Предотвращение Выберите sql из выбора тех же данных из БД PHP - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть вопрос о Seq в PHP. Я создаю 1 таблицу для ведения таблицы последовательности, напр. table - последовательность, а поле - seq (начиная с 1). Последовательность должна иметь уникальное значение.

Проблема в том, есть 2 процесса, которые запускаются параллельно, которые будут использовать его. и я получил сообщение об ошибке с повторяющимся значением.

Вопрос. Как заблокировать таблицу из другого запроса выбора?

это мой код

//select seq
$sqlSeq = "select seq from sequence for update";
$resultSeq = pg_query($sqlSeq);
$rowSeq = pg_fetch_assoc($resultSeq);
$seqCif = $rowSeq['seq'];

//INSERT
$sqlInsert1 ="insert into TEST (customer_id) values( '".$seqCif."')";

//UPDATE 
 $sqlInsert1 .= "update sequence set seq=seq+1;" ; 

Можете ли вы помочь мне в этом случае? Большое спасибо за ..

1 Ответ

0 голосов
/ 23 апреля 2020

Один простой способ сделать операцию atomi c и гарантировать приращение id без пробелов - это превратить оператор в запрос insert ... select ...:

insert into test(customer_id)
select coalesce(max(customer_id), 0) + 1 from test
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...