我在SQLite3中创建了以下表来标记项目(在阅读this great response之后)。标签保存在表格中,而ItemTags将显示一个项目(来自表格项目)与一个或多个标签(来自表格标签)之间的关系。
CREATE TABLE Items ItemID INTEGER PRIMARY KEY, Title TEXT, Comment TEXT;
CREATE TABLE Tags TagID INTEGER PRIMARY KEY, Title TEXT;
CREATE TABLE ItemsTags ItemID INTEGER, TagID INTEGER;
提交新行时,用户将输入标题和注释(将保存在表项目中),并从一个或多个标签中选择(从表格中选择/添加标签)。到目前为止,我已经设法做到了这一点:
INSERT INTO Items (Title, Comment) VALUES ('First title', 'First comment');
我希望列ItemID为INTEGER PRIMARY KEY,但同时,我希望在同一个调用中访问该值。比如说,我的表格标签有以下布局:
TagID | Title
------|----------
1 | First tag
2 | Second tag
并且我想用TagID 1和2标记上面提到的语句(“First title”,其标题ID为1),并将关系保存到表ItemsTags。完成后,我希望进行以下更改:
Table: Items
TitleID | Title | Comment
--------|-------------|--------------
1 | First title | First comment
Table: Tags
TagID | Title
------|----------
1 | First tag
2 | Second tag
Table: ItemsTags
TagID | ItemID
------|---------
1 | 1
2 | 1
我怎样才能做到这一点?提前谢谢!
答案 0 :(得分:3)
您不能通过一次调用数据库将行插入两个单独的表中,也不能通过一次调用将两行插入同一个表中。在这种情况下你需要四个:
INSERT INTO Items (Title, Comment) VALUES ('First title', 'First comment');
SELECT last_insert_rowid() -- To get last inserted id
INSERT INTO ItemTags (TagID, ItemID) VALUES (1, :LastID)
INSERT INTO ItemTags (TagID, ItemID) VALUES (2, :LastID)
如果将它们全部放在一个事务中,它们将同时被提交,只有一个锁定放在数据库文件中。