2012-09-02 70 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

谢谢 - 我很明显地在错误的方向与约束:) –