Я спрашивал про insert. В pg например, если ты в одной транзакции что-то сделал, то пока не сказал commit изменения видны не будут.Автор оригинала: DiMA
ты про какой именно вопрос?
Зависит от уровня изоляции. SERIALIZABLE избавляет от всех проблем путем забоя конкурентности. По-умолчанию обычно тот уровень, что ты привел т.е. REPEATABLE READ.Автор оригинала: Sherman
Пока в первой не сказали коммит, никак ты не увидишь эту запись, что является основой любого версионника.
Если теперь добавить unique индекс на column, то вторая вставка пройдет только в том случае, если первая транзакция(в котором insert был раньше) была откачена. А пока первая транзакция(которая сделала insert первой) не решит что делать, вторая будет висеть в row lock.
Консоль раз:
postgres=# create table dima (a text, b text, c text);
CREATE TABLE
postgres=# begin work;
BEGIN
postgres=# set transaction isolation level serializable;
SET
postgres=# select c from dima where a = 'stupid' and b = 'question' for update;
c
---
(0 rows)
postgres=# insert into dima values ('stupid', 'question', 'stupid answer');
INSERT 0 1
Открываем вторую консоль:
postgres=# begin work;
BEGIN
postgres=# set transaction isolation level serializable;
SET
postgres=# select c from dima where a = 'stupid' and b = 'question' for update;
c
---
(0 rows)
postgres=# insert into dima values ('stupid', 'question', 'stupid answer');
INSERT 0 1
В первой консоли:
postgres=# commit;
COMMIT
Ну и во второй консоли:
postgres=# commit;
COMMIT
postgres=# select * from dima;
a | b | c
--------+----------+---------------
stupid | question | stupid answer
stupid | question | stupid answer
(2 rows)
Да, в InnoDB есть gap lock - позволет блокировать несуществующее.А MySQL залочит несуществующую строку?
БЕЗ индексов?Автор оригинала: MiksIr
Да, в InnoDB есть gap lock - позволет блокировать несуществующее.
Ну то есть gap lock нам точно поможет в борьбе с конкурентными insert'ами? А то вот whirlwind пишет, что результат АНАЛогичный, а у меня MySQL не установлен, чтобы на ём проверить.Автор оригинала: MiksIr
Да, в InnoDB есть gap lock - позволет блокировать несуществующее.