「自增字段」的恢復

2021-04-21 04:30:29 字數 2305 閱讀 3801

samuel.lau

: 一般我不用資料庫的"自動編號"

samuel.lau

: 一般關係型資料庫常規都是通過自動編號來定義關係。

blogtiger: 嗯

samuel.lau

: 但自動編號在資料庫裡是不能複製和建立的。

samuel.lau

: 那麼在復原資料和換表的情況下,將破壞這個關係表。

samuel.lau

: 不知道你們有沒有遇到這樣的乙個情況,就是,sql庫檔案損壞,其中某個表無法讀出

blogtiger: 有

samuel.lau

: 這樣只能通過復原某個表,但在還原的過程中"自動編號字段"無法複製,所以,我作的資料庫在id欄位都是自己編制編號

blogtiger

: set identity_insert 可以做到自動編號欄位的手動設定

samuel.lau

: 現在網上流行的dvbbs就有這樣的問題,資料庫損壞後無法還原,

blogtiger

: set identity_insert table on後就可以手工插入任意值了呀

samuel.lau

: 我印象裡,set identity_insert應該只能同時處理1個表,大於1個表就不能處理。

其實我平時的習慣和samuel.lau差不多, 也是不喜歡用"自增字段", 因為在資料庫設計的時, 即便是想新增些臨時的測試資料也會變得麻煩(比如, 如果我想加一列id=2的資料, 使用這個語句insert table1 (id, title) values (2, 'title name') 但"自增字段"是不允許指定值的, 所以會報錯).

但是如果是團隊協作情況可能會不一樣, 所以最終我還是覺得使用"自增字段"還是有必要的:

1. 方便, 在資料庫一次設定, 以後在程式中不需要再考慮編號的問題

2. 減少錯誤及程式設計的難度, 如果是程式中設計編號可能會導致一些比較難以查出的錯誤(如果多個會話同時去取編號, 可能會導致髒讀, 儘管可以通過在select的時候使用排他鎖來解決, 但強制加鎖的方式會給除錯帶來不便, 而且在程式設計也會相對複雜, 出錯的機率也就大了)

3.如samuel.lau所說, 資料在恢復的時候可能會變得麻煩, 因為需要使用set identity_insert這個開關

如果"自增字段"與set identity_insert不是很了解, 可以看一下這個對於"自增字段"修改的例子:

--=insertdata identity_insert off***************=

--正確的語法

insert into testidentity (title)

values

('testidentity1'

)insert into testidentity (title)

values

('testidentity2'

)insert into testidentity (title)

values

('testidentity3'

)--錯誤的用法, 語法雖然沒有問題, 但因為"自增字段"是不允許在insert語句中手工指定編號, 解決辦法是將identity_insert在這個表開啟

insert into testidentity (id, title)

values

(4,'testidentity4'

)--=insertdata identity_insert off***************=

--=insertdata identity_insert on***************=

--開啟identity_insert

set identity_insert testidentity on

--"自增字段"已經可以插入自定義的編號了

insert into testidentity(id, title)

values

(4,'testidentity4'

)--記得改過要關上,不然程式裡面的正確語句反而不能執行了

--insert into testidentity (title) values('testidentity5')

--關閉identity_insert

set identity_insert testidentity off

--關閉前下面語句反而會出錯

insert into testidentity (title)

values

('testidentity5'

)--=insertdata identity_insert on***************=

mysql 自增字段原理 MySQL自增字段暴增

找了點資料 從網上看到一篇文章,mysql在檢測到表中有損壞的記錄時,會自動修復,為了保證資料的完整性,mysql會以空格 0x20 寫進磁碟來完成修復。根據欄位的型別,自增字段的長度不同,所允許的最大值也不同。見下 int 10 unsigned型別最大值十進位制為4294967295,十六進製制...

oracle自增字段

在oracle中sequence就是所謂的序列號,每次取的時候它會自動增加,一般用在需要按序列號排序的地方。1 create sequence 你首先要有create sequence或者create any sequence許可權,create sequence emp sequence incr...

oracle自增字段

sqlserver 和mysql都有自增長的功能,但是oracle必須結合sequence序列 觸發器才能夠實現自動增長 1 create table table name id number,name varchar2 50 2 create sequence sequence name minv...