带有复合主键的表,其中一个字段是自增的
我正在使用表约束来创建一个复合主键,我想让 id
字段自动增加,这可能吗?或者有什么其他的选择?
CREATE TABLE IF NOT EXISTS atable(
id INTEGER NOT NULL, --I want to autoincrement this one
name TEXT NOT NULL,
anotherCol TEXT,
PRIMARY KEY(id, name));
3 个回答
0
在我看来,提问者似乎并不想让名字是唯一的。(不过我可能错了。)无论如何,你可以:
- 通过使用
INTEGER PRIMARY KEY
并在该列插入 NULL 来获取一个自动递增的整数; - 通过在 (id, name) 上使用 UNIQUE 约束来声明一个超级键。
超级键就是一个候选键(在这个情况下是主键)加上一个或多个列。
CREATE TABLE yourtable(
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
CONSTRAINT superkey UNIQUE (id, name)
);
如果你通过使用 PRAGMA foreign_keys = on;
来开启外键支持,那么超级键可以作为其他表中外键约束的目标。不过我不确定这是否是你想要的。
0
这里有一个链接,指向SQLite的常见问题解答页面,你问的关于如何让整数主键自动增加的问题排在第一位。 http://www.sqlite.org/faq.html#q1
下面是你SQL语句稍微修改过的版本:
CREATE TABLE IF NOT EXISTS atable(
id INTEGER PRIMARY KEY, -- use NULL for this column on INSERT to autoinc
name TEXT NOT NULL,
anotherCol TEXT);
然后,按照duffymo和Kaleb的建议,在NAME上创建一个唯一索引。
5
不,只有一个主键:就是id和name的组合。
如果你是想让id成为主键,而name成为一个有索引的备用键,那我建议你给name设置一个唯一约束,并把id设为主键。