今天跟大家聊聊如何修改SqlServer Mysql数据库的自加值,以及相应问题的解决方法。可能很多人不太了解。为了让大家更好的了解,边肖为大家总结了以下内容。希望大家能从这篇文章中有所收获。
SQL Server 平台修改自增列值
我之前尝试过更改sql server数据库的自增量值,但是严禁用sql语句修改自增量值,会直接报错(标识列‘自增量列名’无法更新)。我在2008年、2012年和2014年测试的Sql server,都是不允许更改自增列值的。我认为SQL Server 2005的环境不允许更改字段列值。
如果必须在SQL Server平台上修改自增列值,需要手动添加自增列属性,然后修改列值,修改成功后再手动添加自增列属性。如果构建环境是修改和自添加的,建议在空闲时间(零点以后,平台或网站用户少的时期)处理这类问题。如果数据量大,多个表相关,那就通过T-SQL进行更改。这种方法最大的缺点是手工取消和添加自增属性。
还有一个方法。首先将需要修改的数据组织成T-SQL插入脚本,然后删除这批需要修改的数据,这是通过显示插入的数据来实现的。这种方法适用于需要大量修改的单表记录,而且灵活。
一个更简单的方法,就是如果只有几项,让操作人员重新发布信息,删除之前的数据。
还有就是通过网上修改的T-SQL语句取消自增属性。我没有通过SQL Server 2005的环境测试,对应的T-SQL代码如下:
exec sys . sp _ config @ config name=' allowupdates ',-varchar(35)@ config value=1;-intexecsys . sp _ config @ config name=' showadvancedoptions ',-varchar(35)@ config value=1;-IntraconfigureWithoverride;goupdatesys . syscolumssetcolstat=1 where ID=OBJECT _ ID(N ' primarykeyandiidentyupdatetestdatatable ',' U ')和name=N ' ID ' and lstat=1;updatesys . columns tis _ identity=0 where OBJECT _ ID=OBJECT _ ID(N ' primarykeyandientityupdatetestdatatable ',' U ')和name=N ' ID ' andis _ identity=1;实施后的结果如下:
MySQL 平台修改自增列值
mysql平台修改自增值比较麻烦。mysql中有一个自增栏。如果其引擎是myisam,则该列可以是独立的主键列或复合主键列,也就是说,它必须是主键的关联列。如果其引擎是innodb,则该列必须是独立的主键列。绝对不可能直接修改两个自增列值的变化。
我的方法是将两个自增量值(如1和2)分成以下三步:1。首先,将自增量值1改为0;2.将自增量值2更改为1;3.将自增量值0更改为2;
下面两个数据引擎的测试环境是mysql 5.6。
在数据库引擎为innodb的前提下,具体的mysql测试代码如下:
droppetableifexistsidentity _ datatable;create table identity _ datatable(IDENTNOtNullAutO _ INVENTURE,namevarchar(10)notnull,primarykey(id))engine=innodb,defaultcharset=utf8插入identity_datatable(id,name)值(1,'
;1'),(2,'2');insert into identity_datatable (id, name)values (3, '3'),(4,'4');select *from identity_datatable;-- 直接修改不可行-- update identity_datatable-- set id = case when id = 1 then 2 when id = 2 then 1 end-- where id in (1, 2);update identity_datatableset id = 0where id = 1;update identity_datatableset id = 1where id = 2;update identity_datatableset id = 2where id = 0;select *from identity_datatable;
未修改前的数据表结果,如下图:
修改后的数据表结果,如下图:
注意:
1、采用了两个数字进行交换的方法。2、引入的中间值最好<=0的数字。3、仅仅提供一种解决方法,也可采用sql server平台的修改方法(1、先取消自增属性后变更最后增加自增属性,2、整理T-SQL脚本重新插入----小数据量时可以;3、运营人员手工重新添加,也是数据量小的情况下)。
数据库引擎为myisam的前提下,具体的mysql测试代码如下:
drop table if exists autoincremenet_datatable_myisam;create table autoincremenet_datatable_myisam (tid int not null,id int not null auto_increment,name varchar(20) not null,primary key(id)) engine = myisam, default charset = utf8;insert into autoincremenet_datatable_myisam (tid, id, name)values(1,1,'a'),(2,2,'b'),(3,3,'c'),(4,4,'d');select *from autoincremenet_datatable_myisam;update autoincremenet_datatable_myisamset id = 0;where id = 1;select *from autoincremenet_datatable_myisam;update autoincremenet_datatable_myisamset id = 1;where id = 2;select *from autoincremenet_datatable_myisam;update autoincremenet_datatable_myisamset id = 2;where id = 0;select *from autoincremenet_datatable_myisam;
注意:
1、以上测试中的变更不可行。
2、疑问“第一条update和其后面的select确实看到了修改后的值,但是随后的sql继续执行,均报错却又恢复了未修改之前的状态“,这个还不清楚,需要继续研究。
看完上述内容,你们对SqlServer Mysql数据库修改自增列的值及相应问题的解决方案是怎样的有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/127856.html