Уровни изоляции транзакций MySQL нарушены?
Я не могу получить MySQL 5.0.32 на 32-битном x86 Debian для соблюдения уровней изоляции транзакций.
Я сократил мою проблему до самой простой формы, протестированной с помощью клиента командной строки mysql:
-- On node writer:
--
DROP TABLE test;
CREATE TABLE test (
name VARCHAR(255)
);
set autocommit=0;
set transaction isolation level read committed;
begin;
-- On node reader:
--
set autocommit=0;
set transaction isolation level read committed;
begin;
-- On node writer:
--
INSERT INTO test VALUES ('bob');
-- On node reader:
--
SELECT * from test;
-- Returns the row with bob in it!!!
Вероятно, связано, я заметил, что ряд остается даже после отката!
Итак, я хочу сказать, что автокоммит на самом деле не отключен, и что уровни изоляции транзакций, таким образом, эффективно игнорируются?
Чао, Шелдон.
2 ответа
Решение
Ваши таблицы, кажется, созданы в MyISAM
по умолчанию.
Он не поддерживает транзакции.
Не могли бы вы выполнить следующее:
SELECT @@storage_engine
Извините за вопрос, но вы уверены, что используете u sn innodb table? Вы должны проверить ваш механизм хранения по умолчанию.