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 的作用。请按照以下步骤进行操作:

  1. 通过以下语句创建 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_idhobby 列中不接受 NULL 值。

  1. 插入几行数据
INSERT INTO `user_hobby` (`user_id`, `hobby`)
VALUES (1, 'Football'), (1, 'Swimming');

很显然能插入成功。

  1. 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