#mysql #sql #database
#mysql #sql #База данных
Вопрос:
Я пытаюсь TRUNCATE
вызвать таблицу user_info
, однако не могу, поскольку в моей другой таблице user_profile
у меня есть вызываемый внешний ключ f_key
, который мешает мне обрезать таблицу user_info. Я попытался удалить внешний ключ, но безуспешно.
Я пытался:
ALTER TABLE user_profile DROP f_key
и:
ALTER TABLE user_profile DROP FOREIGN KEY f_key
но ни один из них не работает. Есть идеи?
Вывод, как предложено в комментарии ниже:
'user_profile', 'CREATE TABLE user_profile (
user_id int(11) NOT NULL AUTO_INCREMENT,
name varchar(30) COLLATE utf8_unicode_ci NOT NULL,
f_key int(11) NOT NULL,
PRIMARY KEY (user_id),
KEY f_key (f_key),
CONSTRAINT user_profile_ibfk_1 FOREIGN KEY (f_key) REFERENCES user_info (id) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci'
Комментарии:
1. Какой-то вывод ошибки ?!?!
2. Что такое
f_key
? Это имя ограничения или имя столбца, для которого определено ограничение FK? Пожалуйста, опубликуйте выводSHOW CREATE TABLE user_profile
.3. @Sebi2020 ошибка
Error code: 1025. Error on rename of...
— казалась слишком общей для включения в мой пост.4. Итак, имя внешнего ключа
user_profile_ibfk_1
— удалите это имя!5. @NikkiMather Отредактируйте свой вопрос, чтобы включить это. Не добавляйте это в комментарии.
Ответ №1:
Вы не можете использовать TRUNCATE
таблицу, на которую ссылается внешний ключ. Представьте УСЕЧЕНИЕ как комбинацию DROP TABLE
и CREATE TABLE
. В вашем определении таблицы уже есть ON DELETE CASCADE
, что означает, что удаленный главный ключ приведет к удалению дочерних строк. Однако TRUNCATE
эти ограничения будут пропущены.
Используйте DELETE FROM user_info
вместо этого.
Комментарии:
1. Имеет смысл, и это решение сработало. Спасибо.
Ответ №2:
Вы также можете сделать это:
mysql> SET FOREIGN_KEY_CHECKS=0;
mysql> TRUNCATE TABLE user_info;
mysql> SET FOREIGN_KEY_CHECKS=1;
Однако, если в ней существуют какие-либо строки user_profile
, зависящие от строк в user_info
, то эти строки теперь будут «осиротевшими».