我创建了表 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)的约束(限制)?或者我应该在应用程序中检查这个吗?
答案 0 :(得分:15)
CREATE UNIQUE INDEX idx_twocols ON t1t2(t1_id, t2_id)
您可能需要在两列中的每一列的声明中添加NOT NULL。
或者,您可以选择放弃主键列(如果您使用它的唯一性)并在t1_id
和t2_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_id
和t2_id
以从表中检索单行。
答案 1 :(得分:8)
您可以为create table语句添加唯一约束。 这不一定是主键。
UNIQUE(t1_id, t2_id),
答案 2 :(得分:0)
您可以使用这些选项创建UNIQUE主索引,以保留主键和唯一约束SQL Lite New Index option