sql server 2012
案例:create table dbo.test
(id int identity,num int,uqno int);
alter table test add constraint pk_test primary key (id);
create unique index ix_test_uqno on test (uqno);
process 1:
insert dbo.test (num,uqno) values (100,100);
insert dbo.test (num,uqno) values (100,100); --因為uqno重複,所以最終是要報錯的
process 2:
select * from dbo.test with (nolock) where num=100; --可能得到2條記錄
若 process 2在 process 1的第2個sql發出後,且在其因為唯一索引約束報錯前執行,
則會得到2條記錄。比如process 1的第2個sql是 00:00:00.100 毫秒執行,在00:00:00.500毫秒報錯,
當process 2在 00:00:00.200毫秒執行,就能查詢出2條記錄
按此推理,資料寫入過程:
寫資料記憶體頁->寫索引記憶體頁,若唯一索引重複,報錯,就回滾資料記憶體頁->寫日誌檔案
感覺這處理得有點怪怪的。是不是該先檢查資料正確(無違反唯一索引及其他約束等),再行寫入?
MySQL 新增唯一約束和聯合唯一約束
在mysql資料庫中,經常會碰到由於業務需要新增唯一鍵約束,唯一鍵約束,可以在乙個列上新增約束,也可以在多個列上新增唯一約束。1.建表時加上唯一性約束 create table t user id int 11 notnull auto increment username varchar 18 n...
db2唯一索引與唯一約束,重複刪除唯一約束儲存過程
db2唯一索引與唯一約束,重複刪除唯一約束儲存過程 今天寫可重複執行的指令碼時,發現沒有重複刪除約束的儲存過程,寫此紀錄。先建立唯一約束會自動建立唯一索引且兩者名字相同,若該字段上已有索引,再次建立索引的語句無效,此時第二句話無效。先建立唯一索引不會建立唯一約束,在執行建立唯一約束,此時兩者名字不同...
唯一約束,主鍵約束,唯一索引
1.unique約束和primary key約束用來保證同一表中指定的列上沒有重複值,這兩個約束都產生唯一索引確保資料一致性,預設情況下,unique約束產生唯一的非聚集索引,primary key約束產生唯一的聚集索引。primary key約束比unique約束嚴格 primary key列不允...