【问题标题】:Mysql multiple insert queryMysql多次插入查询
【发布时间】:2015-05-02 20:38:30
【问题描述】:

在 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 行。

查询中是否有任何错误?任何想法将不胜感激。

【问题讨论】:

  • 此行为在 SQL Fiddle 上不可重现。第二个查询产生与第一个相同的错误。
  • 如果您创建一个名为“users2”且结构完全相同的新表,然后再次尝试运行查询,会发生什么情况?在运行每个查询后查看表中的最终数据会很有趣。我不明白为什么两个查询都不会失败。
  • @GordonLinoff,我们在服务器版本中得到了这个:5.5.37-0ubuntu0.12.04.1-log (Ubuntu)
  • 您的 SQL 服务器不是在严格模式下运行吗?

标签: php mysql database mysqli


【解决方案1】:

来自documentation

将 NULL 插入已声明为 NOT NULL 的列中。为了 多行 INSERT 语句或 INSERT INTO ... SELECT 语句, 该列设置为列数据的隐式默认值 类型。数字类型为 0,字符串为空字符串 ('') 类型,以及日期和时间类型的“零”值。插入 ... SELECT 语句的处理方式与多行插入相同 因为服务器不检查从 SELECT 到的结果集 看看它是否返回单行。 (对于单行 INSERT,没有 将 NULL 插入 NOT NULL 列时会出现警告。反而, 该语句因错误而失败。)

【讨论】:

猜你喜欢
  • 2012-09-12
  • 2020-12-25
  • 2012-12-16
  • 1970-01-01
  • 2016-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-30
相关资源
最近更新 更多