MySQL批量插入忽略
关于InnoDB和MyISAM的MySQL bluk insert Ignore语句,我有几个问题。例如:MySQL批量插入忽略,mysql,insert,innodb,bulkinsert,myisam,Mysql,Insert,Innodb,Bulkinsert,Myisam,关于InnoDB和MyISAM的MySQL bluk insert Ignore语句,我有几个问题。例如: INSERT IGNORE INTO table(`reference`) VALUES ('1','2','3') 引用也是唯一的键 批量插入是原子的吗?因此,如果我将其发送到数据库,可以确保在这段语句之间不会发生其他插入吗 批插入返回批插入的第一个ID的值。但是,如果第一次插入恰好是重复的(我是得到一个0作为返回值还是下一次(插入成功返回,我在文档中找不到该值),会发生什么情况 善意
INSERT IGNORE INTO table(`reference`) VALUES ('1','2','3')
引用也是唯一的键
善意的问候,单个MySQL查询,无论是
SELECT
、INSERT
还是其他任何查询,都应该是原子的,因为语句要么完全成功并完成,要么失败并回滚。这并不意味着您的INSERT
将独立运行,或者完全符合ACID,但它应该它是原子的
批插入返回批插入的第一个ID的值
我不知道您使用的是什么工具或界面,但报告中另有说明:
如果将INSERT…VALUES语句与多个值列表或INSERT…SELECT一起使用,则该语句将以以下格式返回信息字符串:
记录:100个重复:0警告:0
例如,在JDBC中,API返回受
INSERT
操作影响的记录数,而不是插入的第一行的ID。单个MySQL查询,无论是SELECT
、INSERT
还是其他任何查询,都应该是原子的,这样语句要么完全成功并完成,要么失败并滚动这并不意味着您的INSERT
将独立运行或完全符合ACID,但它应该是原子的
批插入返回批插入的第一个ID的值
我不知道您使用的是什么工具或界面,但报告中另有说明:
如果将INSERT…VALUES语句与多个值列表或INSERT…SELECT一起使用,则该语句将以以下格式返回信息字符串:
记录:100个重复:0警告:0
例如,在JDBC中,API返回受插入操作影响的记录数,而不是插入的第一行的ID。这里发生了很多事情
- 语法错误:您有1列,但有3个值。也许您的意思是这样的?
…值(1)、(2)、(3)
- 在该修复之后,您的一条语句实质上相当于事务中包装的三条1行
(如果使用InnoDB)INSERT-IGNOREs
- 由于
,任何重复的密钥都不会中止插入忽略
- 变量
控制在多行插入过程中innodb_autoinc_lock_mode
会发生什么。需要知道它的值才能完全回答这个问题。默认情况下,AUTO_INCREMENT
将增加3,而不管有多少AUTO_INCREMENT id
值是重复的s、 这会导致ID的意外“烧掉”(并消除您关于“第一个ID”是什么的问题)引用
- 在MyISAM这样的非事务引擎中,没有什么是“原子的”
- 使用MyISAM时,中断的多行写入(insert/update/delete)(例如,由于电源故障)可能已经完成了部分行的写入——您无法知道有多少行(这是避免使用MyISAM的一个重要原因)
- 语法错误:您有1列,但有3个值。也许您的意思是这样的?
…值(1)、(2)、(3)
- 在该修复之后,您的一条语句实质上相当于事务中包装的三条1行
(如果使用InnoDB)INSERT-IGNOREs
- 由于
,任何重复的密钥都不会中止插入忽略
- 变量
控制在多行插入过程中innodb_autoinc_lock_mode
会发生什么。需要知道它的值才能完全回答这个问题。默认情况下,AUTO_INCREMENT
将增加3,而不管有多少AUTO_INCREMENT id
值是重复的s、 这会导致ID的意外“烧掉”(并消除您关于“第一个ID”是什么的问题)引用
- 在MyISAM这样的非事务引擎中,没有什么是“原子的”
- 使用MyISAM时,中断的多行写入(insert/update/delete)(例如,由于电源故障)可能已经完成了部分行的写入——您无法知道有多少行(这是避免使用MyISAM的一个重要原因)
- 这里发生了很多事情