2013-10-09 4 views
2

Когда я использую $this->db->trans_start(); в CodeIgniter, он начинает транзакцию с прочитанного уровня изоляции. Я хочу использовать сериализуемый уровень изоляции вместо этого, но trans_start, похоже, не позволяет мне установить это.Как изменить уровень изоляции транзакции в CodeIgniter?

Как установить уровень транзакции транзакции в CodeIgniter?

ответ

3

Использование SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; в запросе сразу после начала операции:

$this->db->trans_start(); 
$this->db->query('SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;'); 
-1

в соответствии с mysql docs

Я думаю, что вы должны использовать SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE если вы хотите сделать это во время операции

или

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE и установить его перед тем начиная сделку так:

$this->db->query('SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;'); 
$this->db->trans_start(); 

Вот копия паста из документации:

С ГЛОБАЛЬНОЙ ключевое слово, оператор устанавливает уровень по умолчанию транзакции глобально для всех последующих сессий. Существующие сессии: не затронуты.

С ключевым словом SESSION оператор устанавливает транзакцию по умолчанию для всех последующих транзакций, выполненных в текущем сеансе .

Без ключевого слова SESSION или GLOBAL оператор устанавливает уровень изоляции для следующей (не начатой) транзакции в текущем сеансе.

SET TRANSACTION ИЗОЛЯЦИЯ LEVEL без GLOBAL или сеансу не разрешается в то время как существует активная транзакция

+0

Я попробовал оба способа и установки его ** до того ** сделка не работает для меня. Может быть, транзакция начнет новую сессию? Установка его просто ** после ** начала транзакции отлично работает, используя SET SESSION. – franer

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