Очистить содержимое базы данных - PullRequest
0 голосов
/ 24 апреля 2011

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

обратите внимание, что я пишу файл сценария SQL для удаления таблиц, например, в следующем примере:

delete from A
delete from B
delete from C
delete from D
delete from E

но я не знаю, с какого стола начинать.

Ответы [ 4 ]

2 голосов
/ 24 апреля 2011

В SQL Server нет собственного способа сделать то, что вы просите. У вас есть несколько вариантов в зависимости от конкретных ограничений вашей среды:

  1. Выясните отношения между таблицами и начните удалять строки в соответствующем порядке от иностранцев к родителям. Это может занять много времени для большого количества объектов, но является «самым безопасным» с точки зрения наименьшего разрушения.
  2. Отключить ограничения внешнего ключа и TRUNCATE TABLE. Это будет немного быстрее, если вы имеете дело с большим количеством данных, но вам все равно нужно знать, где находятся все ваши отношения. Не слишком страшно, если вы работаете с меньшим количеством таблиц, хотя вариант 1 становится таким же жизнеспособным
  3. Сценарий объектов базы данных и DROP DATABASE / CREATE DATABASE. Если вас не волнует необработанное разбиение базы данных, это еще один вариант, однако вам все равно нужно помнить о приоритетах объектов для создания. SQL Server, а также сторонние инструменты предлагают способы сценария объекта DROP / CREATE. Если вы решите пойти по этому пути, положительным моментом будет то, что у вас будет резервная копия всех объектов (которую я хотел бы сохранить «на всякий случай»), и будущие разрушения практически мгновенны, если вы синхронизируете свои сценарии с любые изменения.

Как видите, это не очень простой процесс, потому что вы пытаетесь подорвать саму причину существования ограничений.

2 голосов
/ 24 апреля 2011

Шаги могут быть:

  1. отключить все ограничения во всех таблицах
  2. удалить все записи из всех таблиц
  3. снова включить ограничение.

Также см. Это обсуждение: SQL: удалить все данные из всех доступных таблиц

0 голосов
/ 24 апреля 2011

Чувак, принимая ваш вопрос за чистую монету ... что вы хотите ПОЛНОСТЬЮ воссоздать схему без данных ... забыть отдельные запросы (слишком медленно) ... просто уничтожитьb, а затем создатьb (или что-то еще в вашей RDBMэквивалентно) ... и вы можете нанять компетентного администратора баз данных.

0 голосов
/ 24 апреля 2011
TRUNCATE TABLE tableName

Удаляет все строки из таблицы без регистрация отдельных удалений строк. TRUNCATE TABLE похож на Оператор DELETE без предложения WHERE; однако TRUNCATE TABLE работает быстрее и использует меньше системы и журнала транзакций ресурсы.

СТОЛ TRUNCATE (Transact-SQL)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...