MySQL“取代into"的坑自增id、备机会有问题,这个问题在mysql5.7.17上是不会出现

  

MySQL”替换成“的坑自增id、备机会有问题,这个问题在mysql5.7.17上是不会出现


以下是网上资料,

来源于:http://www.cnblogs.com/monian/archive/2014/10/09/4013784.html

MySQL”替换成“的坑

MySQL对SQL有很多扩展,有些用起来很方便,但有一些被误用之后会有性能问题,还会有一些意料之外的副作用,比如取代。


比如有这样一张表:

CREATE  TABLE “汽车”,(   “id”才能,int (10), unsigned  NOT  NULL  AUTO_INCREMENT,   “k”才能,int (10), unsigned  NOT 空,   “v”,才能varchar (100), DEFAULT 空,   “额外的”,才能varchar (200), DEFAULT 空,   PRIMARY 才能;KEY  (id),   UNIQUE 才能;KEY “uk_k”, (“k”)   ),引擎=InnoDB

汽车表有一个自增的id字段作为主键,字段k有唯一键做唯一性约束。写入几条记录之后会是这样:

  xupeng@diggle7:3600 (dba_m), (dba), mysql>, INSERT  INTO  auto  (k, v,额外的),VALUES  (1),“1”,“extra  1”),, (2, ' 2 ',, extra  2),, (3, ' 3 ',, extra  3);   Query 好吧,,3,rows  affected (0.01,秒)   记录:3,,重复:,0,,警告:0   xupeng@diggle7:3600 (dba_m), (dba), mysql>, SHOW  CREATE  TABLE 汽车\ G   * * * * * * * * * * * * * * * * * * * * * * * * * * *,1只row  * * * * * * * * * * * * * * * * * * * * * * * * * * *   ,,,,,,表:汽车   Create 表:,Create  TABLE “汽车”,(   “id”才能,int (10), unsigned  NOT  NULL  AUTO_INCREMENT,   “k”才能,int (10), unsigned  NOT 空,   “v”,才能varchar (100), DEFAULT 空,   “额外的”,才能varchar (200), DEFAULT 空,   PRIMARY 才能;KEY  (id),   UNIQUE 才能;KEY “uk_k”, (“k”)   ),引擎=InnoDB  AUTO_INCREMENT=4, DEFAULT  CHARSET=latin1。中的一个   1,row  set 拷贝;(0.01,sec) xupeng@diggle7:3600 (dba_m), (dba), mysql>, SELECT  *,得到汽车;   + - - - + - - - + - - - - - - - - - - - - - - - - - - + +   | |,id  k  |, v ,,, |, extra , |   + - - - + - - - + - - - - - - - - - - - - - - - - - - + +   |,,1,|,1,|,1,,,,|,extra  1 |   |,,2,|,2,|,2,,,,|,extra  2 |   |,,3,|,3,|,3,,,,|,extra  3 |   + - - - + - - - + - - - - - - - - - - - - - - - - - - + +   3,rows  set 拷贝;(0.00,sec)


在奴隶节点上是和主人一致的:

xupeng@diggle8:3600 (dba_s), (dba), mysql>, SELECT  *,得到汽车;   + - - - + - - - + - - - - - - - - - - - - - - - - - - + +   | |,id  k  |, v ,,, |, extra , |   + - - - + - - - + - - - - - - - - - - - - - - - - - - + +   |,,1,|,1,|,1,,,,|,extra  1 |   |,,2,|,2,|,2,,,,|,extra  2 |   |,,3,|,3,|,3,,,,|,extra  3 |   + - - - + - - - + - - - - - - - - - - - - - - - - - - + +   3,rows  set 拷贝;(0.00,sec)   xupeng@diggle8:3600 (dba_s), (dba), mysql>, SHOW  CREATE  TABLE 汽车\ G   * * * * * * * * * * * * * * * * * * * * * * * * * * *,1只row  * * * * * * * * * * * * * * * * * * * * * * * * * * *   ,,,,,,表:汽车   Create 表:,Create  TABLE “汽车”,(   “id”才能,int (10), unsigned  NOT  NULL  AUTO_INCREMENT,   “k”才能,int (10), unsigned  NOT 空,   “v”,才能varchar (100), DEFAULT 空,   “额外的”,才能varchar (200), DEFAULT 空,   PRIMARY 才能;KEY  (id),   UNIQUE 才能;KEY “uk_k”, (“k”)   ),引擎=InnoDB  AUTO_INCREMENT=4, DEFAULT  CHARSET=latin1。中的一个   1,row  set 拷贝;(0.00,sec)

可以看的到,写入三条记录之后,自动表的AUTO_INCREMENT增长为4,也就是说下一条不手工为id指定值的记录,id字段的值会是4 .


接下来使用替换成来写入一条记录:

xupeng@diggle7:3600 (dba_m), (dba), mysql>, REPLACE  INTO  auto  (k, v), VALUES  (1, 1);   Query 好吧,,2,rows  affected (0.01,秒)   xupeng@diggle7:3600 (dba_m), (dba), mysql>, SELECT  *,得到汽车;   + - - - + - - - + - - - - - - - - - - - - - - - - - - + +   | |,id  k  |, v ,,, |, extra , |   + - - - + - - - + - - - - - - - - - - - - - - - - - - + +   |,,2,|,2,|,2,,,,|,extra  2 |   |,,3,|,3,|,3,,,,|,extra  3 |   |,,4,|,1,|,1-1 , |, NULL ,, |   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

MySQL“取代into"的坑自增id、备机会有问题,这个问题在mysql5.7.17上是不会出现