powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите с удалением записи в таблице
9 сообщений из 9, страница 1 из 1
Помогите с удалением записи в таблице
    #39905953
Alick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. Сразу скажу что навыки по mysql минимальные.
Пытаюсь удалить запись в таблице командой delete from hosts where hostid='10321';
В ответ получаю
Cannot delete or update a parent row: a foreign key constraint fails (`zabbix`.`items`, CONSTRAINT `c_items_4` FOREIGN KEY (`interfaceid`) REFERENCES `interface` (`interfaceid`))
Из написанного понятно что не удается удалить по причине того что какая то родительская таблица используется, а какая именно и какая запись непонятно.
Начал удалять через mysql по причине того что zabbix тоже не мог удалить хост.
Спасибо
...
Рейтинг: 0 / 0
Помогите с удалением записи в таблице
    #39905998
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сообщение об ошибке говорит, что удалить нельзя из-за нарушения ссылочной целостности. Т.е. удаление из hosts вызовет каскадное удаление из таблиц, которые на неё ссылаются. По цепочке. И наконец всё упрётся в таблицу interface, удаление из которой приведёт к тому, что в таблице items останутся записи, которые ссылаются на удаляемые записи в таблице interface, и в случае удаления записи из interface эти записи в items "повиснут".

Если всё же нужно удалить, следует и в этом внешнем ключе установить каскадное удаление запросом типа:
Код: sql
1.
2.
3.
4.
5.
6.
7.
ALTER TABLE zabbix.items
DROP CONSTRAINT c_items_4,
ADD CONSTRAINT c_items_4
    FOREIGN KEY (interfaceid) 
    REFERENCES interface (interfaceid)
        ON DELETE CASCADE
        ON UPDATE CASCADE;



Если поле items.interfaceid допускает NULL, то можно ради сохранения данных установить ON DELETE SET NULL.
...
Рейтинг: 0 / 0
Помогите с удалением записи в таблице
    #39906007
Alick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mysql> ALTER TABLE zabbix.items;
Query OK, 0 rows affected (0.04 sec)

mysql> ROP CONSTRAINT c_items_4;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ROP CONSTRAINT c_items_4' at line 1
...
Рейтинг: 0 / 0
Помогите с удалением записи в таблице
    #39906009
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alick , а повнимательнее? откуда у Вас появились точки с запятой, которых НЕТ в моём запросе (кстати, это ОДИН запрос)?
...
Рейтинг: 0 / 0
Помогите с удалением записи в таблице
    #39906017
Alick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не знал. Выполнил сейчас
mysql> ALTER TABLE zabbix.items
-> DROP CONSTRAINT c_items_4,
-> ADD CONSTRAINT c_items_4
-> FOREIGN KEY (interfaceid)
-> REFERENCES interface (interfaceid)
-> ON DELETE CASCADE
-> ON UPDATE CASCADE;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CONSTRAINT c_items_4,
ADD CONSTRAINT c_items_4
FOREIGN KEY (interfaceid)
REFEREN' at line 2
...
Рейтинг: 0 / 0
Помогите с удалением записи в таблице
    #39906087
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, значит, надо дропать не ограничение, а сразу внешний ключ. Типа
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
ALTER TABLE items
DROP FOREIGN KEY c_items_4;

ALTER TABLE items
ADD CONSTRAINT c_items_4
    FOREIGN KEY (interfaceid) 
    REFERENCES interface (interfaceid)
        ON DELETE CASCADE
        ON UPDATE CASCADE;
...
Рейтинг: 0 / 0
Помогите с удалением записи в таблице
    #39906100
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Помогите с удалением записи в таблице
    #39906127
Alick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mysql> ALTER TABLE items
-> DROP FOREIGN KEY c_items_4;
Query OK, 0 rows affected (0.32 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql> ALTER TABLE items
-> ADD CONSTRAINT c_items_4
-> FOREIGN KEY (interfaceid)
-> REFERENCES interface (interfaceid)
-> ON DELETE CASCADE
-> ON UPDATE CASCADE;
Query OK, 3035 rows affected (5.38 sec)
Records: 3035 Duplicates: 0 Warnings: 0

Что дальше делать? Мы удалили запись или нет?

Akina
Ну, значит, надо дропать не ограничение, а сразу внешний ключ. Типа
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
ALTER TABLE items
DROP FOREIGN KEY c_items_4;

ALTER TABLE items
ADD CONSTRAINT c_items_4
    FOREIGN KEY (interfaceid) 
    REFERENCES interface (interfaceid)
        ON DELETE CASCADE
        ON UPDATE CASCADE;

...
Рейтинг: 0 / 0
Помогите с удалением записи в таблице
    #39906129
Alick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вроде как удалилось. Большой спасибо вам и низкий поклон
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите с удалением записи в таблице
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]