2014-02-13 3 views
1

я выполнить некоторые запросы MySQL с помощью START TRANSACTION, но после того, как я исполняю COMMIT следующие запросы не вступают в силу в базе данныхНевозможно выполнить любой запрос MySQL после COMMIT

Следующие запросы были выполнены с использованием mysqli_query в том же порядке:

SET names utf8

SET AUTOCOMMIT=0

START TRANSACTION

INSERT INTO table1 (a, b) VALUES (1,2) ;

INSERT INTO table2 (c, d) VALUES (1,1) ;

INSERT INTO table2 (c, d) VALUES (2,1) ;

COMMIT

INSERT INTO table3 (e, f) VALUES (9,7) ; < - Это ничего не вставлять !!

Примечание: Последний запрос должен быть выполнен из блока START TRANSACTIONCOMMIT.

Это действительно сводит меня с ума. Потому что я не могу понять проблему!

ответ

0

Проблема из-за SET AUTOCOMMIT=0, поэтому я должен запросить COMMIT после каждого запроса.

Таким образом, решение должно либо установить SET AUTOCOMMIT=1, либо использовать COMMIT после каждого запроса.

0

Я думаю, что проблема в порядке инструкций. Попробуйте выполнить фиксацию в конце.

SET names utf8 

SET AUTOCOMMIT=0 

START TRANSACTION 

INSERT INTO table1 (a, b) VALUES (1,2) ; 

INSERT INTO table2 (c, d) VALUES (1,1) ; 

INSERT INTO table2 (c, d) VALUES (2,1) ; 

INSERT INTO table3 (e, f) VALUES (9,7) ; 

COMMIT 
+0

Последний запрос должен быть выполнен после 'COMMIT', потому что он должен быть выполнен, будь то' COMMIT' или 'ROLLBACK'. Извините, что я не сделал этого ясно в вопросе. –

+0

Чтобы отключить режим автосохранения в явном виде, используйте следующую инструкцию: SET autocommit = 0; После отключения режима autocommit, установив переменную autocommit в ноль, изменения в безопасных для транзакции таблицах (например, для InnoDB, BDB или NDBCLUSTER) не становятся постоянными немедленно. Вы должны использовать COMMIT для сохранения изменений на диске или ROLLBACK, чтобы игнорировать изменения. – ste

+0

Дополнительная информация: https://dev.mysql.com/doc/refman/5.0/ru/commit.html – ste

Смежные вопросы