MySQL NOT NULL
在本文中,我们将讨论在 MySQL 中如何使用 NOT NULL
限制列的值。
在 MySQL 中,NOT NULL
用来约束列中的值不能为 NULL
值。
NOT NULL
语法
定义 NOT NULL 列
请使用以下语法定义一个 NOT NULL
列:
CREATE TABLE table_name (
...
column_name data_type NOT NULL ...,
...
);
添加 NOT NULL 约束
要向现有的列添加 NOT NULL
约束,请使用以下语法修改列的定义:
ALTER TABLE table_name
MODIFY column_name data_type NOT NULL ...;
这里,在列的定义上添加 NOT NULL
关键字。
删除 NOT NULL 约束
要删除列上的 NOT NULL
约束,请使用以下语法修改列的定义:
ALTER TABLE table_name
MODIFY column_name data_type ...;
这里,只需要去掉列定义上的 NOT NULL
关键字。
NOT NULL 实例
让我们通过一个例子了解 NOT NULL
的作用。请按照以下步骤进行操作:
- 通过以下语句创建
user_hobby
表:
DROP TABLE IF EXISTS user_hobby;
CREATE TABLE `user_hobby` (
`hobby_id` INT AUTO_INCREMENT PRIMARY KEY,
`user_id` INT NOT NULL,
`hobby` VARCHAR(45) NOT NULL
);
这里,user_id
和 hobby
列中不接受 NULL
值。
- 插入几行数据
INSERT INTO `user_hobby` (`user_id`, `hobby`)
VALUES (1, 'Football'), (1, 'Swimming');
很显然能插入成功。
- 向
hobby
列中插入NULL
值:
INSERT INTO `user_hobby` (`user_id`, `hobby`)
VALUES (1, NULL);
MySQL 服务器会返回如下错误:ERROR 1048 (23000): Column 'hobby' cannot be null
。
将现有列修改为不能为空
如果你想将现有的一个允许 NULL 值的列修改为不允许 NULL 值,请先将该列中的 NULL
值修改为非 NULL
值,否则可能遇到错误。
假设,我们有下面的一个表:
DROP TABLE IF EXISTS user_hobby;
CREATE TABLE `user_hobby` (
`hobby_id` INT AUTO_INCREMENT PRIMARY KEY,
`user_id` INT NOT NULL,
`hobby` VARCHAR(45)
);
这里,hobby
列中是可以有 NULL
值的。
现在我们插入几行测试数据:
INSERT INTO `user_hobby` (`user_id`, `hobby`)
VALUES (1, 'Football'), (1, NULL);
现在我们看以下表中的数据:
SELECT * FROM `user_hobby`;
+----------+---------+----------+
| hobby_id | user_id | hobby |
+----------+---------+----------+
| 1 | 1 | Football |
| 2 | 1 | NULL |
+----------+---------+----------+
2 rows in set (0.00 sec)
如果我们运行如下语句想要把列 hobby
列中修改为不能为 NULL
:
ALTER TABLE `user_hobby`
MODIFY `hobby` VARCHAR(45) NOT NULL;
MySQL 将会返回如下错误: ERROR 1138 (22004): Invalid use of NULL value
。 这是因为 hobby
列中的 NULL
值阻止了这个操作。
我们应该首先将 hobby
列中 NULL 值改为非 NULL 值:
UPDATE `user_hobby`
SET `hobby` = 'NOTHING'
WHERE `hobby` IS NULL;
然后我们在修改 hobby
列的定义:
ALTER TABLE `user_hobby`
MODIFY `hobby` VARCHAR(45) NOT NULL;
现在已经成功的为 hobby
列添加了 NOT NULL
约束。
结论
在本文中,我们学习了在 MySQL 中如何使用 NOT NULL
限制列的值不能为 NULL
。