我正在使用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)
答案 0 :(得分:3)
如果您尝试将NOT NULL
列插入或更新为NULL
,MySQL会将其设置为默认值(在这种情况下,事实默认值为空字符串)。 MySQL也会发出一个警告,你可以看到SHOW WARNINGS
,它应该说一些不正确的列值。它不会阻止您尝试插入空值,但它不会接受该值。
您可能想要指定显式默认值
state_cd char(2) NOT NULL DEFAULT '--'
如果您希望查询在尝试时失败,您可以在应用程序级别处理此问题,或者查看MySQL server modes,您可以将TRADITIONAL
设置为INSERT
/ {尝试添加不正确的值时,{1}}将失败。