powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Транзакции, добавление уникальной записи
4 сообщений из 4, страница 1 из 1
Транзакции, добавление уникальной записи
    #32063715
Acue
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CREATE TABLE "Table1" ("id" integer NOT NULL, "pole1" varchar(10), "pole2" varchar(10));
CREATE TABLE "Table2" ("id" integer NOT NULL);
Требуется:
1. Недопустить добавления в "Table1" записи с неуникальной конструкцией: pole1, pole2, причем (и pole1, и pole2 м.б. null, поэтому unique не проходит)
2. Регистрировать в таблице "Table2" все попытки добавления записей в таблицу с конструкцией pole1, pole2.
Что пришло на ум. Может кто знает как проще? Нагружать клиента не хочу.

Создаем просмотр на Table1. У пользователя право добавления только в него. На просмотр вешаем триггер
CREATE TRIGGER "vwTable1_BI" FOR "Table1" ACTIVE BEFORE INSERT POSITION 0 AS
BEGIN
new."id"=null;
select "id" from "Table1"
where (new."pole1"="pole1" or (new."pole1" is null and "pole1" is null)) and (new."pole2"="pole2" or (new."pole2" is null and "pole2" is null))
into new."id";
if (new."id" is null) then begin
new."id"=gen_id("gidTable",1);
insert into "Table1"("id","pole1","pole2") values(new."id",new."pole1",new."pole2")
end
Insert into "Table2"("id") values(new."id");
END
(Проблема с одновременным добавлением двумя пользователями идентичной записи, отсутствующей в "Table1")
...
Рейтинг: 0 / 0
Транзакции, добавление уникальной записи
    #32064333
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну а что тебе, собственно, не нравится в том, что ты написал?
А вобще-то, если я не ошибаюсь, когда я изучал SQL в Oracle, там было написано, что уникальный ключ от первичного отличается тем, что может содержать пустые значения. Т.е. как по мне, так в IB само понятие уникального ключа неверно реализовано :(((.
...
Рейтинг: 0 / 0
Транзакции, добавление уникальной записи
    #32064368
Acue
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не нравится следующее.
Два пользователя одновременно работают с базой. Вводят одинаковую запись с pole1 и pole2, которая на это время отсутствует в "Table1". При этом Пользователь1 стартует транзакцию на добавление первым; а Пользователь2 вторым, но до подтверждения транзакции Пользователя1.
В результате имеем дублирование (вернее оно нас) требуемого уникального ключа :(((
...
Рейтинг: 0 / 0
Транзакции, добавление уникальной записи
    #32064373
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Читай доки о транзакциях. Делай всё в коротких транзакциях - тогда такое маловероятно.
В общем, тут вопрос уже в другом. Может тебе подойдёт режим READ COMMITTED NO RECORD_VERSION.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Транзакции, добавление уникальной записи
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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