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

Access Violation, некорректное выполнение запросов или вызовов API, ошибки утилит командной строки, в общем все, что вам мешает работать

Модераторы: kdv, dimitr

Ответить
Attid
Спец
Сообщения: 377
Зарегистрирован: 14 ноя 2006, 09:58

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

Сообщение Attid » 19 май 2007, 14:04

не знаю кто виноват я или сервер но мне кажется так быть не должно
есть 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

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

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

Сообщение Merlin » 19 май 2007, 14:17

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

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 20 май 2007, 15:20

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

Ответить