2014-10-15 2 views
0

Допустим, у меня есть 2 таблицыдобавить внешний ключ с на обновление каскада

пользователя

+----+--------+ 
| id | status | 
+----+--------+ 
| 1 | A  | 
| 2 | A  | 
+----+--------+ 

статья

+----+-----+--------+ 
| id | uid | status | 
+----+-----+--------+ 
| 1 | 1 | A  | 
| 2 | 2 | A  | 
| 3 | 2 | A  | 
| 4 | 2 | A  | 
| 5 | 1 | A  | 
| 6 | 2 | A  | 
| 7 | 2 | A  | 
| 8 | 1 | A  | 
| 9 | 2 | A  | 
| 10 | 2 | A  | 
+----+-----+--------+ 

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

UPDATE user SET status='B' WHERE id=1 OR id=2; 

результат будет быть:

пользователь

+----+--------+ 
| id | status | 
+----+--------+ 
| 1 | B  | 
| 2 | B  | 
+----+--------+ 

статья

+----+-----+--------+ 
| id | uid | status | 
+----+-----+--------+ 
| 1 | 1 | B  | 
| 2 | 2 | B  | 
| 3 | 2 | B  | 
| 4 | 2 | B  | 
| 5 | 1 | B  | 
| 6 | 2 | B  | 
| 7 | 2 | B  | 
| 8 | 1 | B  | 
| 9 | 2 | B  | 
| 10 | 2 | B  | 
+----+-----+--------+ 

Или, другими словами, если я обновлю столбец user.status, MySQL автоматически обновит столбец article.status с соответствующим значением.

Как создать этот внешний ключ?

ответ

2

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

код триггера:

CREATE TRIGGER SetArticleStatus AFTER UPDATE ON user 
FOR EACH ROW 
BEGIN 
UPDATE `article` 
    SET status = NEW.status 
WHERE uid = NEW.id 
END 
0

Поскольку ваш FOREIGN KEY является только uid и не знает о status, то вещь, которую вы хотите, не может быть выполнена с использованием только внешних ключей. Это похоже на хороший вариант использования для триггера on-update.

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