powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Violation of PRIMARY or UNIQUE KEY constraint при update
18 сообщений из 18, страница 1 из 1
Violation of PRIMARY or UNIQUE KEY constraint при update
    #32208036
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi многоуважаемый All!!!
Вот такая ситуевина (для примера все тривиально):

Таблица
create table "Centres"
(
"CentreId" integer not null,
"Name" varchar (256)
);
alter table "Centres" add constraint "pkCentre" primary key ("CentreId");

В ней три записи физически расположены:
1 "Rec #1"
3 "Rec #3"
2 "Rec #2"

При выполнении:
update "Centres" set "CentreId"="CentreId"-1

возникает Violation of PRIMARY or UNIQUE KEY constraint "pkCentre" on table "Centres", т.к. выполняется оператор в порядке физического расположения записей (Причем только на Firebird WI-V 6.2.908 ("самая стабильная версия" www.ibase.ru (c) ;)), на InterBase 6.0.1.0 все Ob ;))
Каким макаром можно отстрочить проверку до окончания выполнения ВСЕГО update?

TIA
...
Рейтинг: 0 / 0
Violation of PRIMARY or UNIQUE KEY constraint при update
    #32208073
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй сначала

Код: plaintext
update  "Centres"  set  "CentreId" = "CentreId"  * - 1  


а потом

Код: plaintext
update  "Centres"  set  "CentreId" = "CentreId"  *  1  -  1 


но это все против религии!!!!! Еретик!!
...
Рейтинг: 0 / 0
Violation of PRIMARY or UNIQUE KEY constraint при update
    #32208074
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
то есть второй запрос

Код: plaintext
update  "Centres"  set  "CentreId" = "CentreId"  * - 1  -  1 
...
Рейтинг: 0 / 0
Violation of PRIMARY or UNIQUE KEY constraint при update
    #32208079
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как из этой ситуевины выкрутиться с подвыпертом - это понятно. Вопрос в том, что ето должно реализовываться самим серваком - ведь update то тривиальный. Да и в SQL92 есть понятие как отстроченные ограничения со всеми вытекающими... Сдается ето ышо одна "национальная особенность", а мо и дыра жар-птицы.
...
Рейтинг: 0 / 0
Violation of PRIMARY or UNIQUE KEY constraint при update
    #32208087
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
изменять суррогатный ключ - это то, что ты сказал, но не жарптицы, а разработчика
сори!
может, и есть отсроченные проверки, но я про них не знаю.. может, кто-то и знает, подождем.
...
Рейтинг: 0 / 0
Violation of PRIMARY or UNIQUE KEY constraint при update
    #32208105
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да меня уже просклоняли на предмет изменения примари кей :( Ну зачем же так сразу шашкой и всех без разбора. Если примари кей составной и в нем фигурирует, 4 example, номер документа, то зачем путать себя и других заводя суррогатный ключ?

"...может, и есть отсроченные проверки, но я про них не знаю..." - дядьку Грабера посмотри...
...
Рейтинг: 0 / 0
Violation of PRIMARY or UNIQUE KEY constraint при update
    #32208608
BodyaS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У тебя наверно получается, что ты пытаешся установить ключ который уже существует.
Попробуй все зделать без ключа и посмотри, что получится.
...
Рейтинг: 0 / 0
Violation of PRIMARY or UNIQUE KEY constraint при update
    #32208662
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
писал:
У тебя наверно получается, что ты пытаешся установить ключ который уже существует.
Ессесно

1 "Rec #1" 1-я запись
3 "Rec #3" 2-я запись
2 "Rec #2" 3-я запись
update использует простой перебор записей
Поэтому на записи номер 2 имеем:
3-1=2, и 3-я запись еще имеет примари кей 2 - отсюда мы имеем (или нас)
Violation of PRIMARY or UNIQUE KEY constraint "pkCentre" on table "Centres".
Причем это только под писал:
Firebird WI-V 6.2.908, на InterBase 6.0.1.0 все Ob

Отсюда следует, что никакого криминала в таком update нет. Просто в FB, происходит проверка ограничений после выполнения update над каждой записью.
Отсюда ВОПРОС
Каким макаром можно отстрочить проверку до окончания выполнения ВСЕГО update?
...
Рейтинг: 0 / 0
Violation of PRIMARY or UNIQUE KEY constraint при update
    #32209344
BodyaS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Убивай ключ, делай update и создавай ключ заново :-)
...
Рейтинг: 0 / 0
Violation of PRIMARY or UNIQUE KEY constraint при update
    #32209353
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты не один - "1+1"
(наши поймут)
Уже такое посоветовали. Вы думаете я только в этом форуме этот вопрос задал? ;) хи-хи-хи...
...
Рейтинг: 0 / 0
Violation of PRIMARY or UNIQUE KEY constraint при update
    #32209896
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вдогонку: дико извиняюсь за ввод в заблуждение на предмет сервака. Данный эхфект имеет место как в IB так и в FB вне зависимости от версии. Как один раз сия фишка выполнилась на IB 6.0.1.0 - ума не приложу...
...
Рейтинг: 0 / 0
Violation of PRIMARY or UNIQUE KEY constraint при update
    #32210537
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поборникам девственности, неизменности и незыблемости Первичного Ключа, сверкающего боя, с ногой
на небе, живущего, пока не исчезнут РБД посвящается...

Эпилог

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
create table  "Polis" 
(
    "PolisId"  integer constraint  "pkPolis"  not null primary key,
    "ContractNo"  integer not null,
    "PolisNo"  integer not null,
    "Value"  varchar ( 256 ),
   constraint  "ukPolis"  unique ( "ContractNo" , "PolisNo" )
);


1 1 1 "Rec #1" 1-я запись
2 1 3 "Rec #3" 2-я запись
3 1 2 "Rec #2" 3-я запись

Делаем
Код: plaintext
1.
update  "Polis"  set  "PolisNo" = "PolisNo" - 1  where ( "ContractNo" = 1 )

и ...
Violation of PRIMARY or UNIQUE KEY constraint "ukPolis" on table "Polis"
Statement: update "Polis" set "PolisNo"="PolisNo"-1
Немая сцена.
Занавес.

P.S. Надеюсь: изменять UNIQUE KEY это не против религии?
...
Рейтинг: 0 / 0
Violation of PRIMARY or UNIQUE KEY constraint при update
    #32210551
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ты знаешь, я с тобой полностью согласен.
вот есть у тебя "суррогатный" ключ, и рядом 2 поля с номерами документов, которые ты хочешь чтобы были уникальными. Тебе надо поменять номер документа, а не религиозно-неприкасаемый первичный ключ. И у тебя не получается.
Поскольку знатоки не отвечают на вопрос об отложенной проверке целостности (скорее всего ее нет, а есть ли она например в SQL Serverе?), придется тебе выкручиваться. Мой совет умножить на -1, потом еще раз умножить на -1 и вычесть 1. Это ничего не должно сломать, если ты точно знаешь, что нету отрицательных номеров документов! Убивать ключ лучше не надо, имхо.

А вобще то опять таки как это у тебя номера полюсов меняются? Это уже против бюрократической религии ;)
...
Рейтинг: 0 / 0
Violation of PRIMARY or UNIQUE KEY constraint при update
    #32210772
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedd писал:
...вопрос об отложенной проверке целостности (скорее всего ее нет...

Да нет - есть она. Даже есть модификаторы
Грабер писал:
... DEFERRABLE - (отстроченные, т.е. выполняемые с отстрочкой) или NOT DEFERRABLE (срочные, т.е. выполняемые сразу. Если определение отсутствует, то по умолчанию используется значение NOT DEFERRABLE...

fedd писал:
А вобще то опять таки как это у тебя номера полюсов меняются? Это уже против бюрократической религии ;)

Наоборот. 4 example:
Юзверь вводит договор N5. К нему присовокупляет пять полисов, соответственно с номерами 1, 2, 3, 4, 5. И тут видит, что полис N 3 ему не нужон. Он его удаляет. Ессесно полис N 4 должен стать полисом N 3, а полис N 5 - N 4. А иначе, согласись, у любого нормального человека вызовет недоумение фраза в договоре (шо то типа такого): "... полисы N 1, 2, 4, 5"
...
Рейтинг: 0 / 0
Violation of PRIMARY or UNIQUE KEY constraint при update
    #32214131
zDIV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Могу что-нибудь нехорошее ляпнуть...
Но, если необходимо изменить значения первичного ключа у всех записей (в этом случае гарантируется "отложенная проверка" при прочих реляц. условиях...), то можно все сделать в ХП перебирая записи от мин. до макс...
...
Рейтинг: 0 / 0
Violation of PRIMARY or UNIQUE KEY constraint при update
    #32214413
Vagoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...Ессесно полис N 4 должен стать полисом N 3, а полис N 5 - N 4...

Я в таких случаях сдвиг номеров реализую програмно - ХП/триггер, причем номера полисов не включаю в ключи. Если не ошибаюсь, то включение полезной информации в прймари кей есть ошибкой, согласно теории БД.
...
Рейтинг: 0 / 0
Violation of PRIMARY or UNIQUE KEY constraint при update
    #32215021
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у него теперь не в паймари ки входит, а в юник. номер полюсов в договоре по смыслу должны быть уникальны, почему бы не заставить сервер следить за целостностью.
я бы предложил, если мы уж залезли в дебри предметной области, давать полюсам неупорядоченные номера, чтобы не вызывало вопросов отсутствие "полиса №3".
О! или нумеровать полисы не в каждом договоре заново, а сквозно вобще по базе. подогнать, так сказать, техзадание под технологию......
...
Рейтинг: 0 / 0
Violation of PRIMARY or UNIQUE KEY constraint при update
    #32215165
Vagoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 fedd

Согласен во всем.
Более того, не уверен, что изменение номеров полисов (юрид.документов) - это то, что нужно заказчику. Хотя это зависит от места...

Думаю, что тип ограничения/ключа роли не играет. Смысл слежения за целостностью как раз и заключается в генерации ошибки при попытке ее нарушения. Всегда и везде.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Violation of PRIMARY or UNIQUE KEY constraint при update
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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