SQL Server 平台修改自增列值
由于之前处理过sql server数据库的迁移工作,尝试过其自增列值的变更,但是通过SQL 语句修改自增列值,是严格不允许的,直接报错(无法更新标识列 '自增列名称‘)。sql server我测试是2008、2012和2014,都不允许变更自增列值,我相信SQL Server 2005+的环境均不允许变更字段列值。
如果非要在SQL Server 平台修改自增列值的,那就手动需要自增列属性,然后修改该列值,修改成功后再手动添加自增列属性。如果在生成环境修改自增列的话,建议在空闲时间(零点以后,平台或网站使用的用户很少的时间段)来处理这类问题。数据量大且多表关联的,那就通过T-SQL来变更。该方法最大的缺点就是要通过手工辅助取消和添加自增属性的。
还有一个方法,先将要修改的数据整理为T-SQL的插入脚本,再删除这批要修改的数据,在通过显示插入数据来实现。这种方式适用于要变更不较少的单表记录,该方法到时比较灵活的。
更简单的方法,那就是如果仅仅若干条,那就让运营人员重新发布信息,删除以前的数据。
还有网上通过修过T-SQL语句取消自增属性,我在SQL Server 2005+环境测试均未通过,相应的T-SQL代码如下:
EXEC sys.sp_configure @configname = 'allow updates', -- varchar(35) @configvalue = 1; -- int EXEC sys.sp_configure @configname = 'show advanced options' , -- varchar(35) @configvalue = 1; -- int RECONFIGURE WITH OVERRIDE; GO UPDATE sys.syscolumns SET colstat = 1 WHERE id = OBJECT_ID(N'PrimaryKeyAndIdentityUpdateTestDataTable', 'U') AND name = N'ID' AND colstat = 1; UPDATE sys.columns SET is_identity = 0 WHERE object_id = OBJECT_ID(N'PrimaryKeyAndIdentityUpdateTestDataTable', 'U') AND name = N'ID' AND is_identity = 1;
执行后的结果如下:
MySQL 平台修改自增列值
mysql平台修改自增列值,有些麻烦的。mysql中存在自增列,如果其引擎是myisam,则该列可以为独立主键列,也可以为复合主键列,即该列必须为主键的关联列;如果其引擎是innodb,则该列必须是独立主键列。要直接修改两个自增列值对调变更,肯定是不行的。
我采用的方法是将两个自增列值(比如1、2)分为以下三个步骤来实现:
1、先将自增列值为1的修改为0;
2、再将自增列值为2的修改为1;
3、再将自增列值为0的修改为2;
以下两种数据引擎的测试环境均是mysql 5.6。
数据库引擎为innodb的前提下,具体的mysql测试代码如下:
drop table if exists identity_datatable; create table identity_datatable ( id int not null AUTO_INCREMENT, name varchar(10) not null, primary key (id) ) engine=innodb,default charset=utf8; insert into identity_datatable (id, name) values (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_datatable set id = 0 where id = 1; update identity_datatable set id = 1 where id = 2; update identity_datatable set id = 2 where 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_myisam set id = 0; where id = 1; select * from autoincremenet_datatable_myisam; update autoincremenet_datatable_myisam set id = 1; where id = 2; select * from autoincremenet_datatable_myisam; update autoincremenet_datatable_myisam set id = 2; where id = 0; select * from autoincremenet_datatable_myisam;
注意:
1、以上测试中的变更不可行。
2、疑问“第一条update和其后面的select确实看到了修改后的值,但是随后的sql继续执行,均报错却又恢复了未修改之前的状态“,这个还不清楚,需要继续研究。
Oracle平台的没有接触,不晓得,熟悉oracle平台的博友针对其自增列的变更做个测试或给出个总结。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]