Не удается усечь таблицу, потому что на нее ссылается ограничение FOREIGN KEY? - PullRequest
405 голосов
/ 31 октября 2008

Используя MSSQL2005, можно ли обрезать таблицу с ограничением внешнего ключа, если я сначала усекаю дочернюю таблицу (таблицу с первичным ключом отношения FK)?

Я знаю, что могу либо

  • Используйте DELETE без предложения where, а затем RESEED идентификатор (или)
  • Удалить FK, обрезать таблицу и воссоздать FK.

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

Невозможно усечь таблицу «TableName», так как на нее ссылается ограничение FOREIGN KEY.

Ответы [ 27 ]

0 голосов
/ 13 июля 2017

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

Лучший способ, к сожалению, трудный или трудоемкий. Это существо:

  • Ограничения сброса
  • Усеченная таблица
  • Повторное создание ограничений

Мой процесс для этого включает следующие шаги:

  1. В SSMS щелкните правой кнопкой мыши по рассматриваемой таблице и выберите Просмотр зависимостей
  2. Обратите внимание на таблицы, на которые есть ссылки (если есть)
  3. Вернитесь в проводник объектов, разверните узел Ключи и запишите внешние ключи (если есть)
  4. Запуск сценариев (удаление / усечение / повторное создание)

Сценарии такого рода должны выполняться в пределах блоков begin tran и commit tran.

0 голосов
/ 30 августа 2016

Самый простой способ:
1 - введите в phpmyadmin
2 - Нажмите на название таблицы в левом столбце
3 - Нажмите в Операции (верхнее меню)
4 - Нажмите «Очистить стол» (TRUNCATE)
5 - Отключить флажок «Включить проверки внешнего ключа»
6 - Готово!

Ссылка на учебник
Учебник: http://www.imageno.com/wz6gv1wuqajrpic.html
(извините, у меня недостаточно репутации для загрузки изображений здесь: P)

0 голосов
/ 19 июля 2014

В SSMS у меня была открытая диаграмма, показывающая ключ. После удаления ключа и усечения файла я обновил его, затем снова сосредоточился на диаграмме и создал обновление, очистив и восстановив поле Identity. При сохранении диаграммы появилось диалоговое окно «Сохранить», после чего в диалоговом окне «Изменения были внесены в базу данных во время работы», нажав «Да», восстановил ключ и восстановил его из заблокированной копии диаграммы.

0 голосов
/ 25 ноября 2013

Я только что обнаружил, что вы можете использовать таблицу TRUNCATE для родительской таблицы с ограничениями внешнего ключа для дочернего элемента, если вы сначала ОТКЛЮЧИТЕ ограничения для таблицы child . Э.Г.

Внешний ключ CONSTRAINT child_par_ref в дочерней таблице, ссылки PARENT_TABLE

ALTER TABLE CHILD_TABLE DISABLE CONSTRAINT child_par_ref;
TRUNCATE TABLE CHILD_TABLE;
TRUNCATE TABLE PARENT_TABLE;
ALTER TABLE CHILD_TABLE ENABLE CONSTRAINT child_par_ref;
0 голосов
/ 06 ноября 2012
SET FOREIGN_KEY_CHECKS=0;
TRUNCATE table1;
TRUNCATE table2;
SET FOREIGN_KEY_CHECKS=1;

ссылка - усекать таблицу ограничений внешнего ключа

Работа для меня в MYSQL

0 голосов
/ 27 мая 2019

Удалить, а затем сбросить автоинкремент:

delete from tablename;

тогда

ALTER TABLE tablename AUTO_INCREMENT = 1;
0 голосов
/ 18 июля 2011

Вы можете попробовать DELETE FROM <your table >;.

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

...