Да, это разрешено. Если вы не выполняете внешнюю синхронизацию клиентов, так что второй выдает COMMIT
только после того, как первый получил положительное подтверждение того, что его фиксация выполнена успешно, порядок выполнения UPDATE
не определен (базе данных нужно только притвориться, что они были сериализованы, но нет гарантии заказа), так что это помогает записать их так, чтобы они изменяли существующие данные, а не заменяли их, и / или цитировали результат SELECT
в предложении WHERE
, чтобы сделать UPDATE
при условии, что строка не изменена. E.g.:
-> SELECT key,value FROM mytable WHERE key = 1;
1 row:
key|value
1 |foo
-> UPDATE mytable SET value='bar' WHERE key = 1 AND value = 'foo';
0 rows affected
Это показывает, что другой запрос изменил строку между ними.