MySQL 如何在MySQL INSERT语句中指定默认值?
阅读更多:MySQL 教程
背景介绍
在MySQL数据库中,当我们执行INSERT语句往表中插入一条记录时,有时候需要在某些字段上指定默认值。这个默认值可以是一个具体的值,也可以是一个表达式。本文将介绍如何在MySQL INSERT语句中指定默认值。
指定具体默认值
在MySQL中,我们可以在创建表时为每个字段指定默认值,如下所示:
CREATE TABLE user (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
age INT DEFAULT 18,
gender CHAR(1) DEFAULT 'M',
email VARCHAR(100) DEFAULT ''
);
上面的语句中,对于字段age、gender和email都指定了默认值。当我们执行INSERT语句时,如果不指定该字段的值,则使用预设的默认值。例如:
INSERT INTO user (name, email) VALUES ('张三', 'zhangsan@example.com');
在这个INSERT语句中,我们只指定了name和email字段的值。因为age和gender字段没有指定值,所以使用了默认值。具体情况如下:
id | name | age | gender | |
---|---|---|---|---|
1 | 张三 | 18 | M | zhangsan@example.com |
指定表达式默认值
在MySQL中,我们不仅可以使用具体的值作为默认值,还可以使用表达式。例如,我们想让email字段的默认值为当前时间的字符串形式,可以这样定义表:
CREATE TABLE user (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
age INT DEFAULT 18,
gender CHAR(1) DEFAULT 'M',
email VARCHAR(100) DEFAULT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s')
);
上面的语句中,我们使用了MySQL内置函数NOW()获取当前时间,然后使用了函数DATE_FORMAT()格式化为字符串,作为email字段的默认值。
当我们执行INSERT语句时,如果不指定email字段的值,则使用该默认值。例如:
INSERT INTO user (name) VALUES ('李四');
下面是最终的表格结果:
id | name | age | gender | |
---|---|---|---|---|
1 | 张三 | 18 | M | zhangsan@example.com |
2 | 李四 | 18 | M | 2022-02-22 23:06:44 |
可以看到,在第二条记录中,email字段的值为当前时间字符串。
手动指定默认值
有时候我们需要手动指定某个字段的默认值,而不是使用预设的默认值。在MySQL中,我们可以使用关键字DEFAULT来指定该字段的默认值。例如:
INSERT INTO user (name, age, gender, email) VALUES ('王五', DEFAULT, DEFAULT, 'wangwu@example.com');
上面的语句中,我们手动指定了email字段的值,而age和gender字段则使用预设的默认值。下面是最终的表格结果:
id | name | age | gender | |
---|---|---|---|---|
1 | 张三 | 18 | M | zhangsan@example.com |
2 | 李四 | 18 | M | 2022-02-22 23:06:44 |
3 | 王五 | 18 | M | wangwu@example.com |
结论
在MySQL INSERT语句中指定默认值需要在创建表时指定。我们可以使用具体的值、表达式或手动指定。如果某个字段没有指定值,则将使用预设的默认值。在实际应用中,这样可以大大简化代码,并且保证了数据的一致性。