Страница 1 из 1

lock conflict на поле которое не изменялось

Добавлено: 19 май 2007, 14:04
Attid
не знаю кто виноват я или сервер но мне кажется так быть не должно
есть 2 таблицы

Код: Выделить всё

CREATE TABLE TABLE1 (
    ID  INTEGER NOT NULL,
    TM  TIMESTAMP
);
ALTER TABLE TABLE1 ADD CONSTRAINT PK_TABLE1 PRIMARY KEY (ID);
/***************************/
CREATE TABLE TABLE2 (
    FID  INTEGER,
    TM   TIMESTAMP
);
ALTER TABLE TABLE2 ADD CONSTRAINT FK_TABLE2_1 FOREIGN KEY (FID) REFERENCES TABLE1 (ID);
дефолтные данные

Код: Выделить всё

insert into table1 (id, tm) values (1, current_timestamp);
insert into table1 (id, tm) values (2, current_timestamp);
теперь в одной транзакции делаем

Код: Выделить всё

update table1
set tm = current_timestamp
where (id = 1)
не закрываем её.

в другой

Код: Выделить всё

insert into table2 (fid, tm)
values (1, current_timestamp)
и получаем

Код: Выделить всё

Unsuccessful execution caused by system error that does not preclude successful execution of subsequent statements.
lock conflict on no wait transaction.
violation of FOREIGN KEY constraint "FK_TABLE2_1" on table "TABLE2".
Foreign key reference target does not exist.
обьясните в чем я не прав ?
в первой транзакции я поле ID не трогаю, соответственно внешнему ключу нечего беспокоится.

Код: Выделить всё

show version;
ISQL Version: LI-V2.0.1.12855 Firebird 2.0
Server version:
Firebird/linux Intel (access method), version "LI-V2.0.1.12855 Firebird 2.0"
Firebird/linux Intel (remote server), version "LI-V2.0.1.12855 Firebird 2.0/tcp (attid-desktop)/P10"
Firebird/linux Intel (remote interface), version "LI-V2.0.1.12855 Firebird 2.0/tcp (attid-desktop)/P10"
on disk structure version 11.0

Re: lock conflict на поле которое не изменялось

Добавлено: 19 май 2007, 14:17
Merlin
Attid писал(а): в первой транзакции я поле ID не трогаю, соответственно внешнему ключу нечего беспокоится.
А он об этом не знает. Он знает только то, что в мастере у него есть некоммиченная версия записи, на которую должна сослаться деталь, а что в ней отличается от коммиченной - не знает. Кто виноват, в принципе не так уж важно, это просто объективная реальность, данная нам в ощущениях, так оно устроено и всё тут. А что делать - подстраивать свои алгоритмы.

Добавлено: 20 май 2007, 15:20
kdv
в первой транзакции я поле ID не трогаю, соответственно внешнему ключу нечего беспокоится.
"блокирование" проверяется по наличии не-коммиченой версии, а она в данном случае есть.