我将每个列都设置为,NOT NULL但是由于某种原因,我仍然能够NULL在每个列中添加一个值。这是我的表信息(创建语法):
NOT NULL
NULL
CREATE TABLE `addresses` ( `id` int(11) NOT NULL AUTO_INCREMENT, `address` varchar(100) NOT NULL, `city` varchar(100) NOT NULL, `state` varchar(4) NOT NULL, `zip` varchar(30) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4545 DEFAULT CHARSET=utf8;
这是一个有效的示例INSERT:
INSERT
INSERT INTO `addresses` (`street`, `city`, `state`, `zip`) VALUES ('', '', '', '');
有什么想法为什么会这样?
您要插入空字符串,而空字符串不是NULL,要检查NULL错误,请执行以下操作:
INSERT INTO `addresses` (`street`, `city`, `state`, `zip`) VALUES (NULL, NULL, NULL, NULL);
你会看到错误。该NOT NULL只对那些不值检查NULL。
为了防止空字符串,您必须使用触发器,或者NULL在执行INSERT查询之前对服务器端编程语言进行检查以将空字符串转换为。的示例触发器INSERT可能类似于:(这只是一个示例)
CREATE TRIGGER avoid_empty BEFORE INSERT ON addresses FOR EACH ROW BEGIN IF street = '' THEN SET street = NULL END IF; END;