Используйте значение INT PRIMARY KEY в другой таблице, тот же вызов базы данных - PullRequest
0 голосов
/ 25 января 2011

Я создал следующие таблицы в SQLite3 для пометки элементов (после прочтения этот замечательный ответ ).Теги сохраняются в таблице «Теги», а теги «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, но в то же время я хочу получить доступ к этому значению в том же вызове,Скажем, например, что моя таблица Tags имеет следующий макет:

TagID | Title
------|----------
    1 | First tag
    2 | Second tag

и что я хочу пометить вышеупомянутый оператор («Первый заголовок», который имеет TitleID 1) с TagID 1 и 2и сохраните отношение к таблице 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

Как этого добиться?Заранее спасибо!

1 Ответ

3 голосов
/ 25 января 2011

Нельзя вставить строки в две отдельные таблицы с помощью одного вызова базы данных, а также нельзя вставить две строки в одну таблицу с помощью одного вызова. В этом случае вам понадобится четыре:

 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)

Если вы поместите их все в транзакцию, они будут зафиксированы в одно и то же время, при этом на файл базы данных будет установлена ​​только одна блокировка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...