具有复合主键的表,其中一个字段具有自动增量

时间:2011-01-22 21:54:35

标签: python sqlite

我使用表约束创建复合主键,我希望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 :(得分:5)

不,只有一个主键:这是id和name的组合。

如果你的意思是你想让id成为主键,并且将name命名为索引的备用键,我会说你应该给name一个唯一的约束并将id作为主键。

答案 1 :(得分:0)

以下是SQLite FAQ页面的链接,其中有关如何自动增量整数主键的问题是#1。 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上创建一个唯一索引。

答案 2 :(得分:0)

我不认为OP希望名称是唯一的。 (但我可能是错的。)无论如何,你可以

  1. 使用INTEGER PRIMARY KEY并在该列中插入NULL来获取自动增量整数,
  2. 通过对(id,name)使用UNIQUE约束来声明超级键。
  3. 超级密钥只是一个候选密钥(在这种情况下是主键)加上一个或多个列。

    CREATE TABLE yourtable(
        id INTEGER PRIMARY KEY,
        name TEXT NOT NULL,
        CONSTRAINT superkey UNIQUE (id, name)
    );
    

    如果使用PRAGMA foreign_keys = on;打开外键支持,则超级键可以成为其他表中外键约束的目标。但我不确定那是你在找什么。