关于mysql数据插入,我遇到了以下问题。这里的电子邮件字段不能为空。在执行以下查询(查询1和2)时,我们期待错误。但是查询1给出了错误,查询2给出了成功。
表格结构
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL,
`email` varchar(100) NOT NULL,
PRIMARY KEY (`id`),
KEY `id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=latin1
查询1:
INSERT INTO `users` (`id`, `name`, `email`) VALUES (NULL, 'manu', NULL);
结果: - #1048 - 专栏'电子邮件'不能为空
查询2:
INSERT INTO `users` (`id`, `name`, `email`)
VALUES (NULL, 'manu', NULL),(NULL, 'Jose', NULL);
结果:插入了-2行。
查询中是否有错误?任何想法都将不胜感激。
答案 0 :(得分:4)
将NULL插入已声明为NOT NULL的列中。对于 多行INSERT语句或INSERT INTO ... SELECT语句, 该列设置为列数据的隐式默认值 类型。数字类型为0,字符串为空字符串('') 类型,以及日期和时间类型的“零”值。插入 ... SELECT语句的处理方式与多行插入的处理方式相同 因为服务器不会检查SELECT中的结果集 看它是否返回一行。 (对于单行INSERT,没有 将NULL插入NOT NULL列时发生警告。代替, 该陈述失败并出现错误。)