久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

SqlServer Mysql數據庫修改自增列的值及相應問題的解決方案是怎樣的

145次閱讀
沒有評論

共計 3164 個字符,預計需要花費 8 分鐘才能閱讀完成。

行業資訊    
數據庫    
SqlServer Mysql 數據庫修改自增列的值及相應問題的解決方案是怎樣的

今天就跟大家聊聊有關 SqlServer Mysql 數據庫修改自增列的值及相應問題的解決方案是怎樣的,可能很多人都不太了解,為了讓大家更加了解,丸趣 TV 小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

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; -- intEXEC sys.sp_configure@configname =  show advanced options  , -- varchar(35)@configvalue = 1; -- intRECONFIGURE WITH OVERRIDE;GOUPDATE sys.syscolumnsSET colstat = 1WHERE id = OBJECT_ID(N PrimaryKeyAndIdentityUpdateTestDataTable ,  U)AND name = N ID AND colstat = 1;UPDATE sys.columnsSET is_identity = 0WHERE 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_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 數據庫修改自增列的值及相應問題的解決方案是怎樣的有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注丸趣 TV 行業資訊頻道,感謝大家的支持。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-17發表,共計3164字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 巴中市| 通州市| 娄底市| 格尔木市| 昌吉市| 日照市| 称多县| 无锡市| 五台县| 南雄市| 大连市| 同仁县| 互助| 奉节县| 永年县| 平远县| 始兴县| 红河县| 玉树县| 察隅县| 科技| 毕节市| 栾城县| 普定县| 澜沧| 淮南市| SHOW| 宽城| 临夏市| 友谊县| 上高县| 宣城市| 如皋市| 沁源县| 遂昌县| 新巴尔虎左旗| 杭州市| 滦南县| 徐水县| 沈丘县| 隆尧县|