2014-11-21 3 views
1

У меня возникли некоторые проблемы с студией управления MySQL, где он дает мне ошибкуИмея два ограничения внешних ключей ссылается на тот же первичный ключ, и оба используют ON UPDATE CASCADE

Msg 1785, Level 16, State 0, Line 65 
Introducing FOREIGN KEY constraint 'FK__Likes__LikeeId__5A846E65' on table 'Likes' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints. 
Msg 1750, Level 16, State 0, Line 65 
Could not create constraint or index. See previous errors. 

Вот код относится к таблице ЛЮБИТ , Таблица профилей - это та, где мы получаем наш внешний ключ. Проблема в том, что я говорю, что у меня нет ограничений внешнего ключа, потому что он создает цикл, но я не понимаю, почему это так.

CREATE TABLE Profile (
ProfileId VARCHAR(24), 
OwnerSSN VARCHAR(11) NOT NULL, 
Age INTEGER NOT NULL, 
AgeRangeStart INTEGER NOT NULL, 
AgeRangeEnd INTEGER NOT NULL, 
GeoRange INTEGER NOT NULL, 
Gender VARCHAR(1) NOT NULL, 
Hobbies VARCHAR(50), 
Height DECIMAL(2,1) NOT NULL, 
Weight INTEGER NOT NULL, 
HairColor VARCHAR(20), 
ProfileCreationDate DATETIME NOT NULL, 
ProfileModDate DATETIME NOT NULL, 
Active BIT NOT NULL, 
PRIMARY KEY(ProfileId), 
FOREIGN KEY (OwnerSSN) REFERENCES Customer(SSN), 
CHECK(Age < 120 AND Age >= 17), 
CHECK(AgeRangeStart >= 17 AND AgeRangeEnd >= AgeRangeStart), 
CHECK(GeoRange > 0)); 

CREATE TABLE Likes (
LikerId VARCHAR(24), 
LikeeId VARCHAR(24), 
Date_Time DATETIME , 
PRIMARY KEY (LikeeId, LikerId, Date_Time) , 
FOREIGN KEY(LikerId) REFERENCES Profile(ProfileId) 
ON UPDATE CASCADE, 
FOREIGN KEY(LikeeId) REFERENCES Profile(ProfileId) 
ON UPDATE CASCADE 
); 
+0

Btw 'Предложение ПРОВЕРКА анализируется, но игнорируется всеми engines.' хранения от http://dev.mysql.com/doc/refman/5.7/en/create-table.html – bodo

ответ

1

Это когда вам нужно начать использовать триггеры.

CREATE TRIGGER tr_UpdateLikee BEFORE UPDATE 
ON Profile FOR EACH ROW 
UPDATE Likes 
SET likeeId = NEW.ProfileId 
Where LikeeId = Profile.ProfileId 

CREATE TRIGGER tr_UpdateLiker BEFORE UPDATE 
ON Profile FOR EACH ROW 
UPDATE Likes 
SET likerId = NEW.ProfileId 
Where LikerId = Profile.ProfileId 
Смежные вопросы