pr1
Новичок
Здравствуйте, просьба объяснить один момент. Допустим есть код, который добавляет новую категорию.
	
	
	
		
Меня интересует момент, когда одновременно несколько сессий, пытаются создать новую категорию. Я правильно понимаю, что при включении уровня изоляции SERIALIZABLE, таблица на время будет заблокирована на изменение и остальные сессии будут в очереди дожидаться commit или roolback, т.е таким образом решается проблема с параллельными транзакциями?
								
		PHP:
	
	try {
    $pdo->query('SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE');
  
    $pdo->beginTransaction();
    $parent = $pdo->query('SELECT right_key FROM categories WHERE id =  '.$parent_id)->fetch();
    $pdo->query('UPDATE categories SET left_key = left_key + 2, right_key = right_key + 2 WHERE left_key > '.$parent['right_key']);
    $pdo->query('UPDATE categories SET right_key = right_key + 2 WHERE right_key >= '.$parent['right_key'].' AND left_key < '.$parent['right_key']);
 
    $pdo->query('INSERT INTO categories (left_key, right_key) VALUES ('.$parent['right_key'].', '.$parent['right_key'] + 1 .')');
    $pdo->commit();
    return true;
} catch (PDOException $e) {
    $pdo->rollBack();
}
	
								
									Последнее редактирование: 
								
							
						
						
	
					
	            
