我有一张桌子
CREATE TABLE `devicelist` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`ip` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL,
`serial` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`networkname` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`login` varchar(130) COLLATE utf8_unicode_ci DEFAULT NULL,
`password` varchar(130) COLLATE utf8_unicode_ci DEFAULT NULL,
`peopleid` int(10) unsigned NOT NULL,
`deviceid` int(10) unsigned NOT NULL,
`placeid` int(10) unsigned NOT NULL,
`stationid` int(10) unsigned NOT NULL,
`place` text COLLATE utf8_unicode_ci,
`date` date NOT NULL,
`active` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `placeid` (`placeid`),
KEY `stationid` (`stationid`),
KEY `peopleid` (`peopleid`),
KEY `deviceid` (`deviceid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
如您所见序列设置为 NOT NULL ,
但是当我运行像
UPDATE DeviceList SET serial = NULL WHERE id = 1
输出
1 row affected. ( Query took 0.0079 sec )
为什么将null插入非空字段?
我想要发生错误:D
/// ******************************编辑
我找到答案了
问题出在sql_mode中
https://dev.mysql.com/doc/refman/5.6/en/sql-mode.html#sql-mode-strict
我的sql_mode默认为空
我通过
SET GLOBAL sql_mode='STRICT_ALL_TABLES'
答案 0 :(得分:1)
因为这个问题,我今天因为这个问题而陷入困境,所以我只是分享了我对此的了解。
MySQL 5.6默认为NO_ENGINE_SUBSTITUTION
。
MySQL 5.7默认为ONLY_FULL_GROUP_BY
,STRICT_TRANS_TABLES
,NO_ZERO_IN_DATE
,NO_ZERO_DATE
,ERROR_FOR_DIVISION_BY_ZERO
,NO_AUTO_CREATE_USER
,NO_ENGINE_SUBSTITUTION
。< / p>
如MySQL参考手册中的page所述,
MySQL安装程序可以在安装过程中配置SQL模式。例如, mysql_install_db 会在基本安装目录中创建名为 my.cnf 的默认选项文件。
答案 1 :(得分:0)
它应该并且确实会引发错误。我猜你在问题中发布的create table
与实际的表定义不符(考虑到你有语法错误 - 额外的逗号)。