濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > SqlServer Mysql數(shù)據(jù)庫(kù)修改自增列的值及相應(yīng)問(wèn)題的解決方案

SqlServer Mysql數(shù)據(jù)庫(kù)修改自增列的值及相應(yīng)問(wèn)題的解決方案

熱門標(biāo)簽:臺(tái)灣外呼系統(tǒng)軟件 南通智能外呼系統(tǒng)怎么樣 濮陽(yáng)清豐400開頭的電話申請(qǐng) 地圖標(biāo)注可以編輯地名嗎 疫情時(shí)期電話機(jī)器人 地圖標(biāo)注跑線下市場(chǎng) 樂昌電話機(jī)器人 南京怎么申請(qǐng)400這種電話 真3地圖標(biāo)注

SQL Server 平臺(tái)修改自增列值

由于之前處理過(guò)sql server數(shù)據(jù)庫(kù)的遷移工作,嘗試過(guò)其自增列值的變更,但是通過(guò)SQL 語(yǔ)句修改自增列值,是嚴(yán)格不允許的,直接報(bào)錯(cuò)(無(wú)法更新標(biāo)識(shí)列 '自增列名稱‘)。sql server我測(cè)試是2008、2012和2014,都不允許變更自增列值,我相信SQL Server 2005+的環(huán)境均不允許變更字段列值。

如果非要在SQL Server 平臺(tái)修改自增列值的,那就手動(dòng)需要自增列屬性,然后修改該列值,修改成功后再手動(dòng)添加自增列屬性。如果在生成環(huán)境修改自增列的話,建議在空閑時(shí)間(零點(diǎn)以后,平臺(tái)或網(wǎng)站使用的用戶很少的時(shí)間段)來(lái)處理這類問(wèn)題。數(shù)據(jù)量大且多表關(guān)聯(lián)的,那就通過(guò)T-SQL來(lái)變更。該方法最大的缺點(diǎn)就是要通過(guò)手工輔助取消和添加自增屬性的。

還有一個(gè)方法,先將要修改的數(shù)據(jù)整理為T-SQL的插入腳本,再刪除這批要修改的數(shù)據(jù),在通過(guò)顯示插入數(shù)據(jù)來(lái)實(shí)現(xiàn)。這種方式適用于要變更不較少的單表記錄,該方法到時(shí)比較靈活的。

更簡(jiǎn)單的方法,那就是如果僅僅若干條,那就讓運(yùn)營(yíng)人員重新發(fā)布信息,刪除以前的數(shù)據(jù)。

還有網(wǎng)上通過(guò)修過(guò)T-SQL語(yǔ)句取消自增屬性,我在SQL Server 2005+環(huán)境測(cè)試均未通過(guò),相應(yīng)的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;

執(zhí)行后的結(jié)果如下:


MySQL 平臺(tái)修改自增列值

mysql平臺(tái)修改自增列值,有些麻煩的。mysql中存在自增列,如果其引擎是myisam,則該列可以為獨(dú)立主鍵列,也可以為復(fù)合主鍵列,即該列必須為主鍵的關(guān)聯(lián)列;如果其引擎是innodb,則該列必須是獨(dú)立主鍵列。要直接修改兩個(gè)自增列值對(duì)調(diào)變更,肯定是不行的。

我采用的方法是將兩個(gè)自增列值(比如1、2)分為以下三個(gè)步驟來(lái)實(shí)現(xiàn):
1、先將自增列值為1的修改為0;
2、再將自增列值為2的修改為1;
3、再將自增列值為0的修改為2;

以下兩種數(shù)據(jù)引擎的測(cè)試環(huán)境均是mysql 5.6。

數(shù)據(jù)庫(kù)引擎為innodb的前提下,具體的mysql測(cè)試代碼如下:

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;

未修改前的數(shù)據(jù)表結(jié)果,如下圖:


修改后的數(shù)據(jù)表結(jié)果,如下圖:


注意:

1、采用了兩個(gè)數(shù)字進(jìn)行交換的方法。
2、引入的中間值最好=0的數(shù)字。
3、僅僅提供一種解決方法,也可采用sql server平臺(tái)的修改方法(1、先取消自增屬性后變更最后增加自增屬性,2、整理T-SQL腳本重新插入----小數(shù)據(jù)量時(shí)可以;3、運(yùn)營(yíng)人員手工重新添加,也是數(shù)據(jù)量小的情況下)。

數(shù)據(jù)庫(kù)引擎為myisam的前提下,具體的mysql測(cè)試代碼如下:

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、以上測(cè)試中的變更不可行。

2、疑問(wèn)“第一條update和其后面的select確實(shí)看到了修改后的值,但是隨后的sql繼續(xù)執(zhí)行,均報(bào)錯(cuò)卻又恢復(fù)了未修改之前的狀態(tài)“,這個(gè)還不清楚,需要繼續(xù)研究。

Oracle平臺(tái)的沒有接觸,不曉得,熟悉oracle平臺(tái)的博友針對(duì)其自增列的變更做個(gè)測(cè)試或給出個(gè)總結(jié)。

您可能感興趣的文章:
  • sqlserver2005自動(dòng)創(chuàng)建數(shù)據(jù)表和自動(dòng)添加某個(gè)字段索引
  • SQL Server 打開或關(guān)閉自增長(zhǎng)
  • SQL Server 2008怎樣添加自增列實(shí)現(xiàn)自增序號(hào)
  • SQL Server設(shè)置主鍵自增長(zhǎng)列(使用sql語(yǔ)句實(shí)現(xiàn))
  • SQL Server修改標(biāo)識(shí)列方法 如自增列的批量化修改
  • Oracle 實(shí)現(xiàn)類似SQL Server中自增字段的一個(gè)辦法
  • SQL SERVER 自增列
  • SQL Server 中調(diào)整自增字段的當(dāng)前初始值
  • SQL Server數(shù)據(jù)表字段自定義自增數(shù)據(jù)格式的方法

標(biāo)簽:福建 陜西 通遼 河北 阿里 南京 馬鞍山 廣安

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《SqlServer Mysql數(shù)據(jù)庫(kù)修改自增列的值及相應(yīng)問(wèn)題的解決方案》,本文關(guān)鍵詞  SqlServer,Mysql,數(shù)據(jù)庫(kù),修改,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《SqlServer Mysql數(shù)據(jù)庫(kù)修改自增列的值及相應(yīng)問(wèn)題的解決方案》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于SqlServer Mysql數(shù)據(jù)庫(kù)修改自增列的值及相應(yīng)問(wèn)題的解決方案的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    稷山县| 金昌市| 无为县| 即墨市| 扬中市| 克什克腾旗| 宜丰县| 上犹县| 时尚| 洛扎县| 长汀县| 喀喇| 寿宁县| 巴林右旗| 札达县| 大洼县| 常熟市| 尼木县| 石屏县| 包头市| 饶河县| 恩平市| 楚雄市| 靖远县| 九龙城区| 鄄城县| 新密市| 涡阳县| 河曲县| 遵化市| 万全县| 澄城县| 资源县| 山东省| 曲周县| 常德市| 偏关县| 开化县| 四会市| 昭觉县| 高台县|