|
Транзакции, добавление уникальной записи
|
|||
---|---|---|---|
#18+
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") ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2002, 16:32 |
|
Транзакции, добавление уникальной записи
|
|||
---|---|---|---|
#18+
Ну а что тебе, собственно, не нравится в том, что ты написал? А вобще-то, если я не ошибаюсь, когда я изучал SQL в Oracle, там было написано, что уникальный ключ от первичного отличается тем, что может содержать пустые значения. Т.е. как по мне, так в IB само понятие уникального ключа неверно реализовано :(((. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2002, 13:15 |
|
Транзакции, добавление уникальной записи
|
|||
---|---|---|---|
#18+
Не нравится следующее. Два пользователя одновременно работают с базой. Вводят одинаковую запись с pole1 и pole2, которая на это время отсутствует в "Table1". При этом Пользователь1 стартует транзакцию на добавление первым; а Пользователь2 вторым, но до подтверждения транзакции Пользователя1. В результате имеем дублирование (вернее оно нас) требуемого уникального ключа :((( ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2002, 11:49 |
|
|
start [/forum/topic.php?fid=40&fpage=533&tid=1581099]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
30ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
others: | 274ms |
total: | 394ms |
0 / 0 |