2011-01-22 58 views
2

我使用表約束創建一個複合主鍵,我想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)); 
+1

你爲什麼要把名字放在主鍵上?如果你想要名稱是唯一的,爲什麼不使用CREATE UNIQUE INDEX? – 2011-01-22 22:04:14

回答

5

不,只有一個主鍵:這是id和name的組合。

如果你的意思是你想要id是主鍵,並且名字是一個索引的替代鍵,我會說你應該給一個唯一的約束命名並使id爲主鍵。

0

這裏是SQLite常見問題頁面的鏈接,你如何自動增加一個整數主鍵的問題是#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和卡萊布的建議。

0

在我看來,OP並不希望名稱是唯一的。 (但我可能是錯的。)無論如何,你可以

  1. 使用INTEGER PRIMARY KEY和NULL插入該列獲得一個自動遞增整數,
  2. 通過使用(ID的唯一約束聲明一個超密鑰,名稱)。

superkey只是一個候選鍵(在這種情況下是主鍵)加上一個或多個列。

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

如果您在使用PRAGMA foreign_keys = on;打開外鍵的支持,超密鑰可以在其他表的外鍵約束的目標。但我不確定那是你在找什麼。

相關問題