2015-04-28 95 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来判断是否插入了非唯一列值。

相关问题