MySQL 默认值

简介:在本教程中,您将了解 MySQL DEFAULT 约束以及如何有效地使用它。

MySQL DEFAULT 约束介绍

MySQL DEFAULT 约束允许您为列指定默认值。这是 DEFAULT 约束的语法:

column_name data_type DEFAULT default_value;

在此语法中,指定 DEFAULT 关键字后跟列的默认值。默认值的类型与列的数据类型匹配。

本 default_value 必须是一个常量,例如,一个数字或字符串。它不能是函数或表达式。但是,MySQL 允许您将当前日期和时间 ( CURRENT_TIMESTAMP ) 设置为 TIMESTAMP 和 DATETIME 列。

当您定义一个没有 NOT NULL 约束的列时,该列将隐式地 NULL 作为默认值。

如果一个列有一个 DEFAULT 约束并且 INSERT or UPDATE 语句没有提供该列的值,MySQL 将使用 DEFAULT 约束中指定的默认值。

通常,您 DEFAULT 在创建表时为列设置约束。MySQL 还允许您向现有表的列添加默认约束。如果不想对列使用默认值,则可以删除默认约束。

MySQL DEFAULT 约束实例

下面的实例创建一个名为新表 cart_items 四列 item_id , name , quantity ,和 sales_tax :

CREATE TABLE cart_items 
(
    item_id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    quantity INT NOT NULL,
    price DEC(5,2) NOT NULL,
    sales_tax DEC(5,2) NOT NULL DEFAULT 0.1,
    CHECK(quantity > 0),
    CHECK(sales_tax >= 0) 
);

该 sales_tax 列的默认值是 0.1 (10%)。以下语句显示了该 cart_items 表:

DESC cart_items;

输出:

+-----------+--------------+------+-----+---------+----------------+
| Field     | Type         | Null | Key | Default | Extra          |
+-----------+--------------+------+-----+---------+----------------+
| item_id   | int          | NO   | PRI | NULL    | auto_increment |
| name      | varchar(255) | NO   |     | NULL    |                |
| quantity  | int          | NO   |     | NULL    |                |
| price     | decimal(5,2) | NO   |     | NULL    |                |
| sales_tax | decimal(5,2) | NO   |     | 0.10    |                |
+-----------+--------------+------+-----+---------+----------------+
5 rows in set (0.01 sec)

以下 INSERT 语句向 cart_items 表中添加了一个新项目:

INSERT INTO cart_items(name, quantity, price)
VALUES('Keyboard', 1, 50);

在此实例中,该 INSERT 语句不提供该 sales_tax 列的值。该 sales_tax 列使用 DEFAULT 约束中指定的默认值:

SELECT * FROM cart_items;

输出:

+---------+----------+----------+-------+-----------+
| item_id | name     | quantity | price | sales_tax |
+---------+----------+----------+-------+-----------+
|       1 | Keyboard |        1 | 50.00 |      0.10 |
+---------+----------+----------+-------+-----------+
1 row in set (0.00 sec)

此外,您可以 DEFAULT 在向 cart_items 表中插入新行时显式使用关键字:

INSERT INTO cart_items(name, quantity, price, sales_tax)
VALUES('Battery',4, 0.25 , DEFAULT);

在这种情况下,该 sales_tax 列采用默认值:

SELECT * FROM cart_items;

输出:

+---------+----------+----------+-------+-----------+
| item_id | name     | quantity | price | sales_tax |
+---------+----------+----------+-------+-----------+
|       1 | Keyboard |        1 | 50.00 |      0.10 |
|       2 | Battery  |        4 |  0.25 |      0.10 |
+---------+----------+----------+-------+-----------+
2 rows in set (0.01 sec)

向列添加 DEFAULT 约束

要将默认约束添加到现有表的列,请使用以下 ALTER TABLE 语句:

ALTER TABLE table_name
ALTER COLUMN column_name SET DEFAULT default_value;

以下实例向表 DEFAULT 的 quantity 列添加约束 cart_itesm :

ALTER TABLE cart_items
ALTER COLUMN quantity SET DEFAULT 1;

如果您描述该 cart_items 表,您将看到更改:

DESC cart_items;

输出:

+-----------+--------------+------+-----+---------+----------------+
| Field     | Type         | Null | Key | Default | Extra          |
+-----------+--------------+------+-----+---------+----------------+
| item_id   | int          | NO   | PRI | NULL    | auto_increment |
| name      | varchar(255) | NO   |     | NULL    |                |
| quantity  | int          | NO   |     | 1       |                |
| price     | decimal(5,2) | NO   |     | NULL    |                |
| sales_tax | decimal(5,2) | NO   |     | 0.10    |                |
+-----------+--------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

以下语句向 cart_items 表中插入一个新行,而不指定 quantity 列的值:

INSERT INTO cart_items(name, price, sales_tax)
VALUES('Maintenance services',25.99, 0)

该 quantity 列的值将默认为 1:

SELECT * FROM cart_items;

输出:

+---------+----------------------+----------+-------+-----------+
| item_id | name                 | quantity | price | sales_tax |
+---------+----------------------+----------+-------+-----------+
|       1 | Keyboard             |        1 | 50.00 |      0.10 |
|       2 | Battery              |        4 |  0.25 |      0.10 |
|       3 | Maintenance services |        1 | 25.99 |      0.00 |
+---------+----------------------+----------+-------+-----------+
3 rows in set (0.00 sec)

从列中删除 DEFAULT 约束

要从 DEFAULT 列中删除约束,请使用以下 ALTER TABLE 语句:

ALTER TABLE table_name
ALTER column_name DROP DEFAULT;

以下实例 DEFAULT 从表的 quantity 列中删除约束 cart_items :

ALTER TABLE cart_items
ALTER COLUMN quantity DROP DEFAULT;

这是新的 cart_items 结构:

DESC cart_items;

输出:

+-----------+--------------+------+-----+---------+----------------+
| Field     | Type         | Null | Key | Default | Extra          |
+-----------+--------------+------+-----+---------+----------------+
| item_id   | int          | NO   | PRI | NULL    | auto_increment |
| name      | varchar(255) | NO   |     | NULL    |                |
| quantity  | int          | NO   |     | NULL    |                |
| price     | decimal(5,2) | NO   |     | NULL    |                |
| sales_tax | decimal(5,2) | NO   |     | 0.10    |                |
+-----------+--------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

结论

  • MySQL DEFAULT 约束为列设置默认值。
  • 用于 DEFAULT default_value 为列设置默认约束。
  • 用于 ALTER TABLE ... ALTER COLUMN ... SET DEFAULT 向 DEFAULT 现有表的列添加约束。
  • 用于从现有表的列中 ALTER TABLE ... ALTER COLUMN ... DROP DEFAULT 删除 DEFAULT 约束。