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...