2015-11-13 3 views
3

У меня есть проблемы по обновлению набора столбцов в качестве первичного ключа, даже я сделал на обновлении набора по умолчаниюоператор обновления противоречило внешнему ключу

это мой код для создания таблиц, я поставил на обновление набора по умолчанию

create table department(
id int default 10 primary key, 
name varchar(50) 
); 

create table employee 
(
id int primary key, 
dept_id int default 40 foreign key references department(id) on update set default on delete set default, 
    name varchar(40) 
); 

после этого, я вставил данные в таблицы

insert into department 
values 
(1,'hr'), 
(2,'programming'), 
(3,'telesales'), 
(4,'database') 

insert into employee 
values 
(1,1,'mohammed'), 
(2,2,'magd'), 
(3,1,'soha'), 
(4,3,'sameh'), 
(5,4,'ashraf') 

, но, когда я запускаю этот код для обновления столбца идентификатора

update department 
set id = 44 where id = 4 

Я получаю эту ошибку

The UPDATE statement conflicted with the FOREIGN KEY constraint "FK__employee__dept_i__571DF1D5". The conflict occurred in database "test", table "dbo.department", column 'id'. 
The statement has been terminated. 

, но я не знаю, где моя вина!

благодаря

+0

Итак, вы объявили столбец, чтобы иметь значение по умолчанию '40', который представляет собой значение не содержится в' department' таблицы либо до, либо после обновления , и у вас есть 'on update set default' в ограничении внешнего ключа. Что вы ожидали от вас? –

ответ

2

Использование ON UPDATE CASCADE в ограничении внешнего ключа, например, так:

create table employee 
(
id int primary key, 
dept_id int default 40 foreign key references department(id) on update cascade on delete set default, 
    name varchar(40) 
); 

Если есть какое-либо обновление значения по id колонка, dept_id также обновляется, чтобы следовать измененному значению.

+0

Я знаю, что он работает, но почему, когда я использую значение по умолчанию для обновления, кажется, что ошибка – sarahHH

+0

Подумайте об этом. У вас есть отношение внешнего ключа, и вы затем меняете значение. Как связанная таблица предполагает, что 44 является тем же самым 4, что и в нем, если вы не указали это? –

+0

Вы правы, спасибо – sarahHH

1

Поскольку employee таблица имеет столбец dept_id* ограничение * с id колонкой department. Эта ошибка возникает, когда первичный ключ таблицы обновляется, но на нее ссылается внешний ключ из другой таблицы, а для конкретного обновления установлено значение «Нет действий». Действие No - это параметр по умолчанию.

Если это ваш случай, и никаких действий не устанавливается на операции обновления вы можете изменить внешнего ключа определение Каскад

Вы можете попробовать это:

ALTER TABLE employee 
DROP Constraint FK__employee__dept_i__571DF1D5 
GO 

ALTER TABLE employee 
ADD CONSTRAINT New_FK_Constraint 
FOREIGN KEY (dept_id) REFERENCES department (id) 
ON DELETE CASCADE ON UPDATE CASCADE 
GO 
1

это нормально, что ошибки в Появится, у вас отношение внешнего ключа, и вы затем измените значение.

Использование ON UPDATE CASCADE в ограничении внешнего ключа

Смежные вопросы