MySQL DEFAULT

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

MySQL DEFAULT 约束简介

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

column_name data_type DEFAULT default_value;Code language: SQL (Structured Query Language) (sql)

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

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

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

如果列具有DEFAULT约束,并且INSERTUPDATE语句未提供该列的值,则 MySQL 将使用DEFAULT约束中指定的默认值。

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

MySQL DEFAULT 约束示例

以下示例创建一个名为cart_items的新表,其中包含四列item_idnamequantitysales_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) 
);Code language: SQL (Structured Query Language) (sql)

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

DESC cart_items;Code language: SQL (Structured Query Language) (sql)

输出:

+-----------+--------------+------+-----+---------+----------------+
| 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)Code language: plaintext (plaintext)

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

INSERT INTO cart_items(name, quantity, price)
VALUES('Keyboard', 1, 50);Code language: SQL (Structured Query Language) (sql)

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

SELECT * FROM cart_items;Code language: SQL (Structured Query Language) (sql)

输出:

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

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

INSERT INTO cart_items(name, quantity, price, sales_tax)
VALUES('Battery',4, 0.25 , DEFAULT);Code language: SQL (Structured Query Language) (sql)

在本例中, sales_tax列采用默认值:

SELECT * FROM cart_items;Code language: SQL (Structured Query Language) (sql)

输出:

+---------+----------+----------+-------+-----------+
| 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)Code language: plaintext (plaintext)

向列添加 DEFAULT 约束

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

ALTER TABLE table_name
ALTER COLUMN column_name SET DEFAULT default_value;Code language: SQL (Structured Query Language) (sql)

以下示例将DEFAULT约束添加到cart_itesm表的quantity列:

ALTER TABLE cart_items
ALTER COLUMN quantity SET DEFAULT 1;Code language: SQL (Structured Query Language) (sql)

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

DESC cart_items;Code language: SQL (Structured Query Language) (sql)

输出:

+-----------+--------------+------+-----+---------+----------------+
| 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)Code language: plaintext (plaintext)

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

INSERT INTO cart_items(name, price, sales_tax)
VALUES('Maintenance services',25.99, 0)Code language: SQL (Structured Query Language) (sql)

quantity列的值默认为 1:

SELECT * FROM cart_items;Code language: SQL (Structured Query Language) (sql)

输出:

+---------+----------------------+----------+-------+-----------+
| 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)    Code language: plaintext (plaintext)

从列中删除 DEFAULT 约束

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

ALTER TABLE table_name
ALTER column_name DROP DEFAULT;Code language: SQL (Structured Query Language) (sql)

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

ALTER TABLE cart_items
ALTER COLUMN quantity DROP DEFAULT;Code language: SQL (Structured Query Language) (sql)

这是新的cart_items结构:

DESC cart_items;Code language: SQL (Structured Query Language) (sql)

输出:

+-----------+--------------+------+-----+---------+----------------+
| 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)Code language: plaintext (plaintext)

概括

  • MySQL DEFAULT约束设置列的默认值。
  • 使用DEFAULT default_value为列设置默认约束。
  • 使用ALTER TABLE ... ALTER COLUMN ... SET DEFAULTDEFAULT约束添加到现有表的列。
  • 使用ALTER TABLE ... ALTER COLUMN ... DROP DEFAULT从现有表的列中删除DEFAULT约束。
本教程有帮助吗?