关于mysql⾃增id的获取和重置
mysql获取⾃增id的⼏种⽅法
使⽤max函数:select max(id) from tablename
优点:使⽤⽅便快捷。
缺点:获取的不是真正的⾃增id,是表中最⼤的Id,如果有删除数据的话,那么该值和⾃增id相差⽐较⼤。如果有连表数据,有可能导致数据错乱。
使⽤LAST_INSERT_ID函数:select LAST_INSERT_ID()
优点:获取到的是真正的⾃增id。
缺点:该函数是与table⽆关的,永远保留最新插⼊的⾃增列的id。如果多客户端操作,⽽且不能保证原⼦性,这个值可能会出现错误。所以需要在插⼊之后调⽤。
使⽤@@IDENTITY变量:select @@IDENTITY
此⽅法和LAST_INSERT_ID()功能差不多,优缺点也⼀致。需要在插⼊后调⽤。
使⽤mysql查询函数:SHOW TABLE STATUS;
mysql删除重复的数据保留一条
优点:能够准确的查到⾃增id。⽽且可以在语句后⾯加上where语句或者like语句来过滤。
缺点:该语句返回的是⼀个记录集,不能单独的返回⾃增值。所以需要额外的操作来获取。
使⽤⾃定义查询⽅法:mysql表相关的信息是放在information_schema表⾥。所以我们参考 SHOW TABLE STATUS来构建查询语句。如:
select Auto_increment into autoId from information_schema.tables where Table_Schema = ‘dbname’ and
table_name = ‘tablename’;
优点:⾼度⾃定义,能够准确的得到想得到的任何信息。
确定:不容易记住。呵呵。
mysql⾃增id的重置
使⽤truncate:truncate table;
说明:使⽤truncate会删除表的数据释放空间,并且重置字⾃增id,但不会删除表的定义。
⽤处:需要清空表的时候才能使⽤。
使⽤修改标识:dbcc checkident (‘table_name’ , reseed, new_reseed_value) ;
说明:new_reseed_value是设置的当前标识,下次插⼊则从new_reseed_value+1开始。如果new_reseed_value⼩于表中当前标识的值,有可能会产⽣重复key,会产⽣ 2627 号错误信息。
⽤处:此⽅法不会清空已有数据。适⽤于⼤量删除后修改新的标识,但不能⽐当前表中最⼤值⼩。
使⽤修改表的⽅法:alter table tablename auto_increment=new
说明:此⽅法和上⾯的⼆⽅法类似。也不会清空数据,有可能会出现重复key的可能,所以此⽅法也只适⽤于清空表之后重置⾃增id或者⼤量删除后修改⾃增id。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。