我在使用 Mysql not null 列时遇到问题。似乎我的 mysql 安装接受 NOT NULL 列的空值。
我的mysql版本是5.6.25-1~dotdeb+7.1(debian)。
以这张表为例:
CREATE TABLE `cities` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`state_id` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5562;
Run Code Online (Sandbox Code Playgroud)
当我插入这样的值时:
insert into cities(state_id) values (20);
Run Code Online (Sandbox Code Playgroud)
Mysql 会发出警告,但无论如何都会提交该值。这是警告。
12:51:43 insert into cities(state_id) values (20) 1 row(s) affected, 1 warning(s): 1364 Field 'name' doesn't have a default value 0.000 sec
Run Code Online (Sandbox Code Playgroud)
如果我删除唯一键 unique_city_in_state 我会得到相同的行为。
我还尝试使用 DEFAULT NULL 创建名称列,如下所示:
`name` varchar(255) NOT NULL DEFAULT NULL,
Run Code Online (Sandbox Code Playgroud)
这会溢出一个错误,大致可以转换为(名称的默认值无效)。 …
mysql ×1