MySQL批量插入忽略

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作为返回值还是下一次(插入成功返回,我在文档中找不到该值),会发生什么情况 善意

关于InnoDB和MyISAM的MySQL bluk insert Ignore语句,我有几个问题。例如:

INSERT IGNORE INTO table(`reference`) VALUES ('1','2','3')
引用也是唯一的键

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

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


  • 善意的问候,

    单个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行
      INSERT-IGNOREs
      (如果使用InnoDB)
    • 由于
      忽略
      ,任何重复的密钥都不会中止插入
    • 变量
      innodb_autoinc_lock_mode
      控制在多行插入过程中
      AUTO_INCREMENT
      会发生什么。需要知道它的值才能完全回答这个问题。默认情况下,
      AUTO_INCREMENT id
      将增加3,而不管有多少
      引用
      值是重复的s、 这会导致ID的意外“烧掉”(并消除您关于“第一个ID”是什么的问题)
    • 在MyISAM这样的非事务引擎中,没有什么是“原子的”
    • 使用MyISAM时,中断的多行写入(insert/update/delete)(例如,由于电源故障)可能已经完成了部分行的写入——您无法知道有多少行(这是避免使用MyISAM的一个重要原因)

      • 这里发生了很多事情

        • 语法错误:您有1列,但有3个值。也许您的意思是这样的?
          …值(1)、(2)、(3)
        • 在该修复之后,您的一条语句实质上相当于事务中包装的三条1行
          INSERT-IGNOREs
          (如果使用InnoDB)
        • 由于
          忽略
          ,任何重复的密钥都不会中止插入
        • 变量
          innodb_autoinc_lock_mode
          控制在多行插入过程中
          AUTO_INCREMENT
          会发生什么。需要知道它的值才能完全回答这个问题。默认情况下,
          AUTO_INCREMENT id
          将增加3,而不管有多少
          引用
          值是重复的s、 这会导致ID的意外“烧掉”(并消除您关于“第一个ID”是什么的问题)
        • 在MyISAM这样的非事务引擎中,没有什么是“原子的”
        • 使用MyISAM时,中断的多行写入(insert/update/delete)(例如,由于电源故障)可能已经完成了部分行的写入——您无法知道有多少行(这是避免使用MyISAM的一个重要原因)