蹦迪时有个人让我把扇子送给他
9052023-08-24
很多朋友对于mysql数据库主键设置了自增,但是,我把删除了一些数据,随后加的数据为什么会自增ID会接着已经删除了的和不建议mysql自增不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!
本文目录
这是因为你设置的主键自增策略中就是每次增二。其实在建表语句中主键字段设置autoincrement就可以了,当然建表以后也可以使用alte语句,实现自增一的效果。
在innodb里里面又一个参数叫innodb_autoinc_lock_mode,它的值分别为0,1,2.
下面来说说这三个值分别是什么意思。
0:传统方式。串行自增的,并且是连续的。这样需要独占的串行锁,语句完成才释放锁,所以性能最低。例如:1、2、3、4、5、6
1:连续方式。自增的,并且是连续的。当语句申请到自增锁就释放自增锁,自增锁就可以给其它语句使用。性能会好很多。这个是系统默认的。例如:1、2、3、4、5、6
2:交错方式。多语句插入数据时,有可能自增的序列号和执行先后顺不一致,并且中间可能有断裂。一次分配一批自增值,然后下个语句就再进行分配一批自增值,阻塞很小,性能很高。例如:1、2、3、6、5
楼主说的自增锁的问题应该就是并发高的时候,语句执行完毕才会释放锁,所以可能会遇到语句阻塞。如果您不需要连续的自增id的话,可以把innodb_autoinc_lock_mode=2,并且把innodb_autoextend_increment设置大一些,例如innodb_autoextend_increment=10,这样可以缓解mysql自增锁的问题。
但是在statement-basedreplication下不一定是安全的,因为它插入的数据不一定是连续的,可能会导致一些主从不一致的情况。
mysql自增单词,是实现MySQL设置自增字段。
譬如,MySQL设置自增字段的相关语句:
altertablealbumchangeALBUM_IDALBUM_IDbigintnotnullauto_increment;
altertablealbumauto_increment=1;
创建:
mysql>createtablecc(idintauto_increment,namevarchar(20),primarykey(id));
修改:
mysql>altertableccchangeididintprimarykeyauto_increment。
按如下方法操作:
1、先正常创建带有主键的表。
createtableuser(
idintegerprimarykey,
firstnamevarchar(200)notnull,
lastnamevarchar(200)notnull,
ageinteger);
2、设置自增字段。
altertableusermodifyidintegerauto_increment;
3、将auto_increment_increment设置成10。
setauto_increment_increment=10
关于mysql数据库主键设置了自增,但是,我把删除了一些数据,随后加的数据为什么会自增ID会接着已经删除了的到此分享完毕,希望能帮助到您。