Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Уровень изоляции при insert if not exists / 3 сообщений из 3, страница 1 из 1
19.07.2017, 23:44
    #39491915
blantcat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уровень изоляции при insert if not exists
Здравствуйте.
Изучаю БД и дошел до транзакций и уровней изоляции. И столкнулся с непониманием.

Таблица:



Транзакция :

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 
$user_id = 1;
$count   = DB::table('tests')->where('user_id','=', $user_id)->count();

if ( $count < 2 )
{
 DB::table('tests')->insert([
  'user_id'     => $user_id,
  'description' => $faker->text
 ]);
}

$pdo->exec('COMMIT');




Правильно ли я понимаю, что при 5 параллельных транзакциях в момент, когда таблица пустая, то все транзакции отработают и вставят запись? И это будет происходить вне зависимости от типа изоляции, ведь блокировки накладывать не на что (заполненных строк, столбцов, в таблице нет).
Подскажите, пожалуйста, как правильно поступать в такой ситуации, чтобы ограничение по $count всегда отрабатывало корректно при параллельной работе?
...
Рейтинг: 0 / 0
20.07.2017, 00:02
    #39491921
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уровень изоляции при insert if not exists
blantcatТранзакцияЭто, извините, не транзакция, а черти-что.
Показывайте SQL-запрос(-ы).
...
Рейтинг: 0 / 0
20.07.2017, 00:47
    #39491934
blantcat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уровень изоляции при insert if not exists
miksoftblantcatТранзакцияЭто, извините, не транзакция, а черти-что.
Показывайте SQL-запрос(-ы).

Сорри, учусь. Вот пример псевдокодом:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
START TRANSACTION;

 $count = SELECT count(*) FROM `tests` WHERE user_id = 1; 

 if ($count < 2)
 {
  	INSERT INTO `users` (`user_id`, `description`) VALUES ('1', 'text') 
 } 

COMMIT;



Т.е. в теле транзакции получаем количество уже вставленных элементов, и если оно меньше 2х, то добавляем еще один элемент.

Или логика в принципе неправильная ?
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Уровень изоляции при insert if not exists / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]