Как удалить из модели навикат несуществующие таблицы
Перейти к содержимому

Как удалить из модели навикат несуществующие таблицы

  • автор:

Как удалить связь между таблицами sql

Чтобы удалить связь между таблицами в SQL, нужно использовать оператор ALTER TABLE и удалить внешний ключ, который связывает две таблицы.

Вот пример SQL запроса для удаления внешнего ключа «fk_column» из таблицы «my_table» :

ALTER TABLE my_table DROP CONSTRAINT fk_column; 

В этом примере оператор ALTER TABLE используется для изменения таблицы «my_table» , а ключевое слово DROP CONSTRAINT указывает на то, что необходимо удалить внешний ключ из таблицы.

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

Как удалить дочерние записи без родителей в mySQL?

Забавный факт: после того, как вы удалите эти записи-сироты, другие записи могут стать сиротами. Так можно рекурсивно повторять удаления, пока не останутся только записи с parent_id = NULL .

23 авг 2016 в 13:10

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

delete from test3 where id in( select id from ( select id from test3 A where not exists(select 1 from test3 B where B.id=A.parent_id) ) as X ) and parent_id is not NULL 

Лишняя вложенность запроса и алиас (X) необходима так как MySQL иначе не позволяет обращаться к той же таблице из которой происходит удаление.

UPD: Я погорячился в комментариях по поводу left join, вариант с ним рабочий и выглядит явно короче:

delete A.* from test3 A left join test3 B on B.id=A.parent_id where B.id is NULL and A.parent_id is not NULL 

Скорость работы стоит сравнить

Как удалить из модели навикат несуществующие таблицы

нет, запрос делал прямо на серваке, в общем в итоге сделал как и написал — то, что DELETE долго выполнялся — нормально — в конечном счете он отработал и все стало нормально всем спасибо за участие. если кому надо:

шаг 1. пишем скрипт, который вытаскивает все id по дереву (либо на скуле — я не смог, либо на другом языке — писал на php, выполнялся не более 1 сек. (в дереве оказалось 7 000 записей уникальных))

шаг 2. удаляем все элементы в objects, которые не в дереве:
DELETE FROM objects WHERE id NOT IN (SELECT id FROM temp_id_tree)

шаг 3. удаляем все элементы из objectsLink, ссылки на которые ведут на несуществующие объекты
DELETE FROM objectsLink WHERE idObject NOT IN (SELECT id FROM objects) AND idObject!=0
DELETE FROM objectsLink WHERE idParent NOT IN (SELECT id FROM objects) AND idParent!=0

нули там обрабатываются — специфика структуры базы, так !=0 можно и не писать.
вот. пожалуй один из самых быстрых вариантов

Как удалить из модели навикат несуществующие таблицы

Как удалить таблицы в базе данных?
Как удалить таблицы в базе данных?

Как удалить таблицы в базе данных через phpMyAdmin?

Обновлено больше недели назад

Если Вы хотите удалить таблицы в базе данных (например, перед импортированием версии из бэкапа), Вам достаточно:

1. Перейти в меню Хостинг → Базы данных → ↓ возле нужной базы → phpMyAdmin:

2. Поставить галочку возле тех таблиц, которые хотите удалить (или одну в самом низу для удаления всех) и в выпадающем списке выбрать Удалить:

Подтвердите действие. Готово — Ваша база данных очищена! 🙂

Вот и всё! Теперь Ваша база данных пуста, и Вы можете продолжить импорт свежего контента в неё. ��

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *