两列唯一约束的组合

时间:2012-05-08 15:12:25

标签: sqlite constraints unique-constraint

我创建了表 t1t2 ,它连接表 t1 t2 ,如下所示:

CREATE TABLE t1t2(
id integer primary key,
t1_id integer,
t2_id integer,
foreign key(t1_id) references t1(id),
foreign key(t2_id) references t2(id));

是否可以定义仅启用元组唯一值(t1_id,t2_id)的约束(限制)?或者我应该在应用程序中检查这个吗?

3 个答案:

答案 0 :(得分:15)

 CREATE UNIQUE INDEX idx_twocols ON t1t2(t1_id, t2_id)

您可能需要在两列中的每一列的声明中添加NOT NULL。

或者,您可以选择放弃主键列(如果您使用它的唯一性)并在t1_idt2_id的组合上创建主键:

CREATE TABLE t1t2(
t1_id integer NOT NULL,
t2_id integer NOT NULL,
PRIMARY KEY (t1_id, t2_id),
foreign key(t1_id) references t1(id),
foreign key(t2_id) references t2(id));

PRIMARY KEY是UNIQUE索引的特例。使用复合PRIMARY KEY可以保存一列和一个索引,但要求您的应用程序同时知道t1_idt2_id以从表中检索单行。

答案 1 :(得分:8)

您可以为create table语句添加唯一约束。 这不一定是主键。

UNIQUE(t1_id, t2_id),

答案 2 :(得分:0)

您可以使用这些选项创建UNIQUE主索引,以保留主键和唯一约束SQL Lite New Index option