2015-04-28 31 views
1

我創建了DB.I裏面的一張桌子是一個成功創建一個表,並能夠對插入表中的數據我的問題是,在我的表我有兩個「ID 「列但我只創建了一個。爲什麼兩個ID列在表中生成。爲什麼是兩個列角同名創建+離子

請按以下步驟生成問題: -

  • 點擊右下角的按鈕(請在彈出屏幕上的文本)。按「添加」按鈕。它產生的行中的「情況」表,但當你檢查它顯示兩列「ID」爲什麼?

這裏是我的代碼 http://codepen.io/anon/pen/OVPgoP

db.transaction(function(tx) { 
    tx.executeSql('CREATE TABLE "Cases" ("ID" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , "CaseName" VARCHAR NOT NULL)'); 
}) 

回答

2

看來,這是SQLite的預期的行爲,在託換技術的Web SQL(這是一個過時的技術,順便說一句)。

the docs

如果表中包含類型INTEGER PRIMARY KEY的列,則該列成爲用於ROWID的別名。然後,您可以使用四種不同名稱中的任何一種來訪問ROWID,即上述的原始三個名稱或賦予INTEGER PRIMARY KEY列的名稱。所有這些名稱都是別名的別名,在任何情況下都可以很好地工作。

因此,我的猜測是,鉻devtools被表示rowid柱,使用它的別名(ID),除了該別名柱明確添加(ID)。

好像你實際上並不需要顯式地使用Web SQL/SQLite的添加ID列。它會爲你添加一個,你可以在任何語句中使用rowid,_rowid_oid

編輯:這是一個fork of your CodePen,更新和刪除所有正確的工作。

0

完全新的WebSQL,所以這個答案是對我非常有用的。你不能指望主鍵與webSQL正常工作,因爲它在內部跟蹤了一些叫做「rowid」的主鍵。使用唯一的,如useful example here所示。您也可以使用規範中的this error code來判斷是否插入了非唯一列值。

相關問題