SqlServer Mysql数据库修改自增列的值及相应问题的解决方案是怎样的

技术SqlServer Mysql数据库修改自增列的值及相应问题的解决方案是怎样的今天就跟大家聊聊有关SqlServer Mysql数据库修改自增列的值及相应问题的解决方案是怎样的,可能很多人都不太了解,为了让大家更加了

今天跟大家聊聊如何修改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

(0)

相关推荐

  • 靶机-Hackademic-RTB1

    技术靶机-Hackademic-RTB1 靶机-Hackademic-RTB1Hackademic-RTB1
    信息搜集
    nmap 扫描,22 和 80 端口打开。nmap 警告 80 的 http 有风

    礼包 2021年12月14日
  • 四大洋面积从大到小排,四大洋中哪个是最大,哪个最小

    技术四大洋面积从大到小排,四大洋中哪个是最大,哪个最小冰洋 北冰洋位于地球的最北面,大致以此北极为中心,介于亚洲、欧洲和北美洲北岸之间,是四大洋中面积和体积最小、深度最浅的大洋。面积约为1479万平方千米,仅占世界大洋面

    生活 2021年10月26日
  • 如何理解aix命令中的capture和script

    技术如何理解aix命令中的capture和script今天就跟大家聊聊有关如何理解aix命令中的capture和script,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有

    攻略 2021年11月26日
  • c++面向对象程序设计(c++用什么软件编程)

    技术C++右值如何引用本篇内容介绍了“C++右值如何引用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.左值和右值在我

    攻略 2021年12月16日
  • SQLServer中Tempdb空间异常增长及占用非常大该怎么办

    技术SQLServer中Tempdb空间异常增长及占用非常大该怎么办SQLServer中Tempdb空间异常增长及占用非常大该怎么办,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章

    攻略 2021年11月29日
  • let、const、var的区别

    技术let、const、var的区别 let、const、var的区别1、var是ES5提出的,let和const是ES6提出的。
    2、const声明的是常量,必须赋值  1)一旦声明必须赋值,不能使用

    礼包 2021年12月5日