Старый вопрос, но добавлен ответ, чтобы можно было получить помощь
Его двухэтапный процесс:
Предположим, у a table1
есть внешний ключ с именем столбца fk_table2_id
, с именем ограниченияfk_name
и table2
указана таблица с ключом t2
( что-то вроде ниже на моей диаграмме ).
table1 [ fk_table2_id ] --> table2 [t2]
Первый шаг , УДАЛИТЬ старое ОГРАНИЧЕНИЕ: ( ссылка )
ALTER TABLE `table1`
DROP FOREIGN KEY `fk_name`;
ограничение уведомления удаляется, столбец не удаляется
Второй шаг , ДОБАВИТЬ новое ОГРАНИЧЕНИЕ:
ALTER TABLE `table1`
ADD CONSTRAINT `fk_name`
FOREIGN KEY (`fk_table2_id`) REFERENCES `table2` (`t2`) ON DELETE CASCADE;
добавление ограничения, столбец уже есть
Пример:
У меня UserDetails
таблица относится к Users
таблице:
mysql> SHOW CREATE TABLE UserDetails;
:
:
`User_id` int(11) DEFAULT NULL,
PRIMARY KEY (`Detail_id`),
KEY `FK_User_id` (`User_id`),
CONSTRAINT `FK_User_id` FOREIGN KEY (`User_id`) REFERENCES `Users` (`User_id`)
:
:
Первый шаг:
mysql> ALTER TABLE `UserDetails` DROP FOREIGN KEY `FK_User_id`;
Query OK, 1 row affected (0.07 sec)
Второй шаг:
mysql> ALTER TABLE `UserDetails` ADD CONSTRAINT `FK_User_id`
-> FOREIGN KEY (`User_id`) REFERENCES `Users` (`User_id`) ON DELETE CASCADE;
Query OK, 1 row affected (0.02 sec)
результат:
mysql> SHOW CREATE TABLE UserDetails;
:
:
`User_id` int(11) DEFAULT NULL,
PRIMARY KEY (`Detail_id`),
KEY `FK_User_id` (`User_id`),
CONSTRAINT `FK_User_id` FOREIGN KEY (`User_id`) REFERENCES
`Users` (`User_id`) ON DELETE CASCADE
:
Вы можете сделать это одним запросом, если хотите изменить его имя:
Это полезно для минимизации времени простоя, если у вас большой стол.
источник
источник
ALTER TABLE table_name ADD
...ON DELETE RESTRICT
SHOW CREATE TABLE
.Помните, что MySQL сохраняет простой индекс для столбца после удаления внешнего ключа. Итак, если вам нужно изменить столбец «ссылки», вы должны сделать это за 3 шага.
drop index
предложение)источник
Вы можете просто использовать один запрос, чтобы управлять ими всеми:
ALTER TABLE products DROP FOREIGN KEY oldConstraintName, ADD FOREIGN KEY (product_id, category_id) REFERENCES externalTableName (foreign_key_name, another_one_makes_composite_key) ON DELETE CASCADE ON UPDATE CASCADE
источник
Мне нужно было изменить кучу FK, поэтому я написал что-то, чтобы сделать заявления за меня. Прикинул, что поделюсь:
источник