2012-09-02 95 views
0

我有一個數據庫表像這樣:MySQL的檢查約束

-- Table KNOWN_AS 
create table `known_as`(
id int not null auto_increment, 
person_id int not null, 
default_name boolean not null, 
first_name varchar(100) not null, 
middle_name_1 varchar(100), 
middle_name_2 varchar(100), 
middle_name_3 varchar(100), 
last_name varchar(100), 
primary key(id), 
foreign key(person_id) references `person`(id) 
) engine=innodb; 

當插入值,我要檢查每一個獨特的「PERSON_ID」有且只有一個真正的「DEFAULT_NAME」。

所有谷歌搜索等我迄今爲止做了導致頁面解釋如何保持價值非負面,或如何確保價值是唯一的 - 而不是如何檢查一個值在多個條目中是唯一的(但不是全部)。

任何幫助/指針非常感謝!

+1

你的問題是指兩個完全不同的東西:1. *我想檢查每個唯一的「person_id」是否只有一個真正的「default_name」*和2. *如何檢查一個值是在多個條目中獨一無二(但不是全部)*你想要哪個? – eggyal

回答

1
  1. 我要檢查每一個獨特的 「PERSON_ID」 有且只有一個真正的 「DEFAULT_NAME」

    爲什麼不存儲default_name作爲personNOT NULL列?

  2. 如何檢查一個值是在多個條目唯一的(但不是全部)

    定義UNIQUE指數比複合(person_id, default_name)

    ALTER TABLE known_as ADD UNIQUE INDEX (person_id, default_name); 
    
+0

謝謝 - 我很明顯地在錯誤的方向與約束:) –