powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Найти запись или вставить
12 сообщений из 37, страница 2 из 2
Найти запись или вставить
    #39937226
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
hvlad
Она атомарна.
Тогда откуда возьмется дубликат?
Дубликата не будет, если есть констрейнт.
Будет сообщение об ошибке.
...
Рейтинг: 0 / 0
Найти запись или вставить
    #39937232
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad
Будет сообщение об ошибке.
Извини. Я это и имел в виду. В смысле откуда возьмется ошибка?

Давай детальнее. Таблица
Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE mytable(
    ID    INTEGER NOT NULL GENERATED BY DEFAULT AS IDENTITY,
    VAL   INTEGER NOT NULL
);

ALTER TABLE mytable ADD CONSTRAINT pk_mytable PRIMARY KEY (id);
ALTER TABLE mytable ADD CONSTRAINT unq_mytable_val UNIQUE (val);

И из двух параллельных транзакций с параметрами rec_version, read_committed, wait выполняется запрос
Код: sql
1.
2.
3.
UPDATE OR INSERT INTO mytable (val)
VALUES (1)
MATCHING (val);

Если операция атомарна, то откуда возьмется ошибка?
...
Рейтинг: 0 / 0
Найти запись или вставить
    #39937236
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Если операция атомарна
Что такое атомарность, по твоему ?
И что такое изолированность ?
Каким боком вторая тр-ция узнает о том, что первая что-то вставила, если ей нельзя видеть незакомиченное ?
Может уже изучить азы ?
...
Рейтинг: 0 / 0
Найти запись или вставить
    #39937240
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LangRef 3.0Столбцы идентификации (автоинкремент)
Столбцы идентификации могут быть определены с помощью предложения GENERATED BY DEFAULT AS IDENTITY.
Столбец идентификации представляет собой столбец, связанный с внутренним генератором последовательностей.Ключевое я подчеркнул.
Генератор - вне транзакций и обращение к нему выстраивает (в) очередь. Следовательно, если не задавать значение руками (а зачем бы, в нормальной ситуации), то две любые вставки гарантированно получат два разных значения для поля с автоинкрементом.
На атомарность и изоляцию это всё не влияет.
...
Рейтинг: 0 / 0
Найти запись или вставить
    #39937252
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad
Что такое атомарность, по твоему ?
Фиксация состояния таблицы на момент выполнения конкретного оператора
hvlad
Каким боком вторая тр-ция узнает о том, что первая что-то вставила, если ей нельзя видеть незакомиченное ?
А каким боком она узнает о наличии дубликата?

Сейчас провел эксперимент.

1. Стартуем транзакцию
2. Выполняем
Код: sql
1.
2.
3.
UPDATE OR INSERT INTO mytable (val)
VALUES (1)
MATCHING (val);

3. получаем 1 record(s) was(were) inserted into MYTABLE4. Стартуем вторую транзакцию
5. Выполняем
Код: sql
1.
2.
3.
UPDATE OR INSERT INTO mytable (val)
VALUES (1)
MATCHING (val);

получаем Invalid insert or update value(s): object columns are constrained - no 2 table rows can have duplicate column values.
violation of PRIMARY or UNIQUE KEY constraint "UNQ_MYTABLE_VAL" on table "MYTABLE".
Problematic key value is ("VAL" = 1).Т.е. изолированности транзакции хватает на то, чтобы не найти запись при поиске, но найти при попытке вставить и выкинуть ошибку дубликата.

Т.е. тут вопрос даже не в атомарности. Т.к. сейчас никакого race condition нет. Есть обычный конкурентный допуск
...
Рейтинг: 0 / 0
Найти запись или вставить
    #39937257
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

Влад сказал что при отсутствии ограничения уникальности, отсутствие дубликатов таким оператором не гарантируется.
У тебя оно есть о чём и говорит ошибка.
...
Рейтинг: 0 / 0
Найти запись или вставить
    #39937259
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис
Влад сказал что при отсутствии ограничения уникальности, отсутствие дубликатов таким оператором не гарантируется.
Уникальность есть
Симонов Денис
У тебя оно есть о чём и говорит ошибка.
Меня удивляет сам факт ошибки
_Vasilisk_
изолированности транзакции хватает на то, чтобы не найти запись при поиске, но найти при попытке вставить и выкинуть ошибку дубликата.
...
Рейтинг: 0 / 0
Найти запись или вставить
    #39937262
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

транзакции изолированы друг от друга. Ну не может вторая транзакция увидеть запись, которая вставила первая, но не подтвердила вставку. Что тут удивительного? Проверка ограничения уникальности производится вне контекста транзакции, поэтому ты получаешь ошибку.
...
Рейтинг: 0 / 0
Найти запись или вставить
    #39937266
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
hvladЧто такое атомарность, по твоему ?
Фиксация состояния таблицы на момент выполнения конкретного оператораНет никакого "состояния таблицы".
Нет никакого "момента выполнения конкретного оператора".
Вообще всё не так.
Срочно читать определение ACID.

_Vasilisk_
Сейчас провел эксперимент.

1. Стартуем транзакцию
2. Выполняем
...
4. Стартуем вторую транзакцию
5. Выполняем
Я уже писал, что в жизни всё намного сложнее ?
Не думал о том, что 2 и 5 в жизни могут выполняться "одновременно", а не после того, как ты нажмёшь enter ?
...
Рейтинг: 0 / 0
Найти запись или вставить
    #39937270
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad
Не думал о том, что 2 и 5 в жизни могут выполняться "одновременно", а не после того, как ты нажмёшь enter ?
Легко. Но я говорю о конкретном опыте

Симонов Денис
Проверка ограничения уникальности производится вне контекста транзакции
Спасибо. Это именно тот ответ, что я хотел услышать.
...
Рейтинг: 0 / 0
Найти запись или вставить
    #39937283
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_

Симонов Денис
Проверка ограничения уникальности производится вне контекста транзакции
Спасибо. Это именно тот ответ, что я хотел услышать.


Вообще-то ответу больше лет, чем моему опыту работы с IB-FB. И не только по факту реализации, но и в обсуждениях на всякоразных ресурсах. Почему снова и снова это становится откровением даже для вовсе не неофитов - для меня загадка. Был случАй, когда мне пришлось это объяснять аж Хелен
...
Рейтинг: 0 / 0
Найти запись или вставить
    #39937284
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

последний раз говорю - изучай основы. Без них - никуда.
Я могу расжевать тебе этот конкретный случай, но не буду.
Ибо это тебя ничему не научит.
Появится понимание основ, появятся нетривиальные вопросы - приходи, поговорим.
...
Рейтинг: 0 / 0
12 сообщений из 37, страница 2 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Найти запись или вставить
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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