MySQL批量插入忽略

标签 mysql insert innodb bulkinsert myisam

我对 InnoDB 和 MyISAM 的 MySQL bluk insert Ignore 语句有一些疑问。示例:

INSERT IGNORE INTO table(`reference`) VALUES ('1','2','3')

引用也是一个唯一的键。

  1. 批量插入是原子的吗?因此,如果我将其发送到数据库,我可以确保在该语句之间不会发生其他插入吗?

  2. 批量插入返回批量插入的第一个 ID 的值。但是,如果第一个插入恰好是重复的(我得到 0 作为返回值还是下一个插入(返回成功的插入,我在文档中找不到这个),会发生什么

亲切的问候,

最佳答案

这里发生了很多事情......

  • 语法错误:您有 1 列,但有 3 个值。也许你的意思是这个? ... VALUES (1), (2), (3) .
  • 修复后,您的一条语句本质上相当于三个 1 行 INSERT IGNOREs封装在事务中(如果使用 InnoDB)。
  • 因为 IGNORE ,任何重复的键都不会中止插入。
  • 变量 innodb_autoinc_lock_mode控制 AUTO_INCREMENT 发生的情况在多行期间INSERT 。需要知道它的值才能完整回答这个问题。默认情况下,AUTO_INCREMENT id无论有多少 reference 都会增加 3值是重复的。这导致了 ids 的意外“烧毁”。 (并消除了您关于“第一个 ID”是什么的问题。)
  • 在 MyISAM 这样的非事务性引擎中,没有什么是“原子的”。特别是,...
  • 使用MyISAM,被中断(例如,由于电源故障)的多行写入(插入/更新/删除)可能已经完成了某些行——您无法知道有多少行。 (这是避免 MyISAM 的重要原因。)

关于MySQL批量插入忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39017523/

相关文章:

mysql - MySQL v5.6 可以使用 InnoDB 表空间加密吗?

mysql - InnoDB 与 MyIsam 在频繁排序的 MySQL 5.5 表上的比较

MySQL 独特的性能

MySQL 从同一个表中进行多重选择

mysql - 记录Mysql连接远程rsyslog

mysql - 关于重复 key 更新帮助

php - 中断php中存储过程(mysql)的执行

php - 多对多配方数据库 SQL

.net - 从数据库中显示用户数量的最快方法?

python - 在 mmap 文件中删除/插入数据