Ошибка SQLite: невозможно начать транзакцию в транзакции с очень базовыми c таблицами - PullRequest
1 голос
/ 07 мая 2020

Я новичок в SQL и учусь на редакторе SQLite. Итак, я создаю пару очень простых таблиц. Этот код взят прямо из обучения Linkedin «SQL необходимое обучение», и я использую рекомендуемый редактор SQLite.

CREATE TABLE widgetInventory(
    id INTEGER PRIMARY KEY,
    description TEXT,
    onhand INTEGER NOT NULL);

CREATE TABLE widgetSales(
    id INTEGER PRIMARY KEY,
    inv_id INTEGER,
    quan INTEGER,
    price INTEGER);

Затем я обновляю widgetInventory некоторыми данными:

INSERT INTO widgetInventory (description, onhand) VALUES ('rock', 25);
INSERT INTO widgetInventory (description, onhand) VALUES ('paper', 25);
INSERT INTO widgetInventory (description, onhand) VALUES ('scissors', 25);

Затем я хочу обновить таблицу widgetSales с помощью продажи и обновить таблицу widgetInventory, чтобы записать уменьшение onhand.

BEGIN TRANSACTION;
INSERT INTO widgetSales (inv_id, quan, price) VALUES (1,5,500);
UPDATE widgetInventory SET onhand = (onhand-5) WHERE id = 1;
END TRANSACTION;

Я не понимаю, почему это дает мне ошибку, когда я запускаю его, поскольку он точно такой же, как в уроке.

[06:18:04] Error while executing SQL query on database 'test': cannot start a transaction within a transaction

Но я могу запустить INSERT и UPDATE строки по отдельности, и они делают то, что я хочу от них.

1 Ответ

1 голос
/ 21 августа 2020

В редакторе SQLite вам, возможно, придется удалить или закомментировать весь код до и после этих двух транзакций.

BEGIN TRANSACTION;
  INSERT INTO widgetSales ( inv_id, quan, price ) VALUES ( 1, 5, 500 );
  UPDATE widgetInventory SET onhand = ( onhand - 5 ) WHERE id = 1;
END TRANSACTION;

BEGIN TRANSACTION;
  INSERT INTO widgetInventory ( description, onhand ) VALUES ( 'toy', 25 );
ROLLBACK;

В противном случае транзакция не будет выполнена.

Кроме этого, вероятно, где-то есть ошибка. Копирование и вставка в файл .txt не дало мне этой ошибки транзакции и могла нормально выполнить транзакцию.

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