我使用的是5.5版本的MySQL客户端。今天我尝试使用“NOT NULL”来设置属性,但在测试过程中发现它不起作用。有人帮忙解释一下这个吗?
//Create Table
CREATE TABLE state(
state_cd char(2) NOT NULL,
state_name varchar(30)
);
//Insert an "Invalid" Record
INSERT INTO state(state_name)
values('Massachusetts');
//DB Operation succeeds!!!
Query OK, 1 row affected, 1 warning (0.09 sec)
//Check the table
mysql> select * from state;
+----------+---------------+
| state_cd | state_name |
+----------+---------------+
| | Massachusetts |
+----------+---------------+
1 row in set (0.00 sec)
mysql> describe state;
+------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| state_cd | char(2) | NO | | NULL | |
| state_name | varchar(30) | YES | | NULL | |
+------------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
最佳答案
如果您尝试将 NOT NULL
列插入或更新为 NULL
,MySQL 会将其设置为默认值(在这种情况下,事实上的默认值是空的)字符串)。 MySQL 还会发出一条警告,您可以通过 SHOW WARNINGS
看到该警告,该警告应该说明有关不正确的列值的信息。它不会阻止您尝试插入空值,但它不会接受该值。
您可能想要指定一个明确的默认值
state_cd char(2) NOT NULL DEFAULT '--'
如果您希望查询在尝试时失败,您可以在应用程序级别处理此问题,或者查看 MySQL server modes ,您可以将其设置为TRADITIONAL
,这样在尝试添加不正确的值时INSERT
/UPDATE
将会失败。
关于mysql - 为什么 "NOT NULL"在 MySQL 客户端中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20729951/