MySQL 数值列设置默认值,解决不为空问题(mysql不为空 默认值)
MySQL 数值列设置默认值,解决不为空问题
在 MySQL 中,数值列默认是不允许设置为 NULL 的,这就导致在插入新数据时,如果没有为数值列赋值,就会出现“field ” doesn’t have a default value”的错误提示,使得插入操作失败。
为了解决这个问题,可以通过设置数值列的默认值来规避。MySQL 支持设置默认值作为列的默认值,当插入新数据时,如果没有为该列赋值,就会自动填充默认值,从而避免了不允许 NULL 的限制。
下面通过示例演示如何设置 MySQL 数值列的默认值:
创建一个学生信息表(student):
CREATE TABLE student (
id int(11) NOT NULL, name varchar(50) NOT NULL,
age int(11) NOT NULL DEFAULT '18', score int(11) DEFAULT NULL,
PRIMARY KEY (id)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
在这个表中,有四个字段,分别是 id、name、age 和 score。其中,id、name 和 age 都是数值类型,而 score 是可以为 NULL 的数值类型。
注意到在 age 字段的定义中,有一个 DEFAULT ’18’ 的设定,这就是设置该字段的默认值为 18。当插入新数据时,如果没有为 age 字段赋值,就会自动填充默认值,即18。
下面是一些数据插入的示例:
-- 插入一条完整的数据
INSERT INTO student (id, name, age, score) VALUES (1, 'Tom', 20, 90);
-- 插入一条不带 age 字段的数据INSERT INTO student (id, name, score) VALUES (2, 'Jack', 80);
-- 查询所有数据SELECT * FROM student;
此时查询结果如下:
+----+------+-----+-------+
| id | name | age | score |+----+------+-----+-------+
| 1 | Tom | 20 | 90 || 2 | Jack | 18 | 80 |
+----+------+-----+-------+
可以看到,在第二条插入语句中,没有为 age 字段赋值,但是该字段的默认值“18”被自动填充了进去。这就解决了让 age 字段不能为空的问题。
除了在表的定义中设置默认值,还可以使用 ALTER TABLE 语句来修改表结构和设置默认值:
-- 增加默认值
ALTER TABLE student MODIFY COLUMN score int(11) NOT NULL DEFAULT '0';
以上命令表示将 score 字段的定义中的默认值设为 0,这样在插入新数据时,如果没有为 score 字段赋值,就会自动填充0。设置完成后,查询该表的定义可以看到如下结果:
mysql> DESC student;
+-------+--------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(50) | NO | | NULL | || age | int(11) | NO | | 18 | |
| score | int(11) | NO | | 0 | |+-------+--------------+------+-----+---------+----------------+
另外,如果想要删除数值列的默认值,则可以使用如下语句:
-- 删除默认值
ALTER TABLE student ALTER COLUMN age DROP DEFAULT;
以上命令表示将 age 字段的默认值清空,如果在插入新数据时,没有为该字段赋值,则会报错。如果想要继续使用默认值,可以重新执行 ALTER TABLE 语句,把默认值设回去。
总结
通过在 MySQL 中设置数值列的默认值,可以避免因为禁止 NULL 而导致插入新数据失败的问题。通过示例演示了设置数值列中的默认值的过程,同时还介绍了通过 ALTER TABLE 语句来修改表结构和设置默认值的方法。在实际操作中,建议开发者根据需求灵活设置表结构,并且注意默认值的类型与数据类型的匹配。