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约束。