powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Не получается удалить запись из таблицы
12 сообщений из 12, страница 1 из 1
Не получается удалить запись из таблицы
    #39705924
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно удалить запись из таблицы flowrate, где supply_id равно 2513, и при этом для нее существует запись в таблице writeoff с таким же id (это таблица категорий). Если в ней нет записи для данного id, то не удалять.
Код: sql
1.
2.
3.
DELETE FROM flowrate
INNER JOIN writeoff ON flowrate.id = writeoff.id
WHERE flowrate.supply_id = 2513


Выдает ошибку
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 'INNER JOIN writeoff ON flowrate.id = writeoff.id
WHERE flowrate.supply_id = 251' at line 2
При этом на удаление из flowrate стоит триггер before_delete, удаляющий записи с одноименным id из всех таблиц категорий для этой таблицы.
Если пишу вот так:
Код: sql
1.
2.
3.
4.
DELETE flowrate
FROM flowrate
INNER JOIN writeoff ON flowrate.id = writeoff.id
WHERE flowrate.supply_id = 2513


То выдает ошибку:
ERROR 1442 (HY000): Can't update table 'writeoff' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
...
Рейтинг: 0 / 0
Не получается удалить запись из таблицы
    #39705944
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvladна удаление из flowrate стоит триггер before_delete, удаляющий записи с одноименным id из всех таблиц категорий для этой таблицыЯвная ошибка логики. Даже если запись не будет удалена, связанные-то уже удалены в триггере... связанные записи удаляют в триггере AFTER. Хотя гораздо правильнее настроить внешние ключи с каскадным удалением, а не организовывать всё то же вручную.

svnvladвыдает ошибкуПоказывайте текст триггера.
...
Рейтинг: 0 / 0
Не получается удалить запись из таблицы
    #39706217
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akinasvnvladна удаление из flowrate стоит триггер before_delete, удаляющий записи с одноименным id из всех таблиц категорий для этой таблицыЯвная ошибка логики. Даже если запись не будет удалена, связанные-то уже удалены в триггере... связанные записи удаляют в триггере AFTER.

Таблица writeoff дочерняя по отношению к flowrate, там стоит внешний ключ, ее никак не удалишь позже.

AkinaХотя гораздо правильнее настроить внешние ключи с каскадным удалением, а не организовывать всё то же вручную.
На этом же форуме обсуждалось, что в MySQL не стоит доверять каскадным ключам.
...
Рейтинг: 0 / 0
Не получается удалить запись из таблицы
    #39706224
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaПоказывайте текст триггера.
Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE DEFINER = 'netmedsuperuser'@'%' TRIGGER `flowrate_before_del_tr1` BEFORE DELETE ON `flowrate`
  FOR EACH ROW
BEGIN
  DELETE FROM prescribe WHERE id = OLD.id;
  DELETE FROM emergency_flow WHERE id = OLD.id;
  DELETE FROM writeoff WHERE id = OLD.id;
END;
...
Рейтинг: 0 / 0
Не получается удалить запись из таблицы
    #39706301
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvladтам стоит внешний ключА тогда какой в тыкву триггер? надо просто настроить каскадное действие по FK.
...
Рейтинг: 0 / 0
Не получается удалить запись из таблицы
    #39706315
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akinasvnvladтам стоит внешний ключА тогда какой в тыкву триггер? надо просто настроить каскадное действие по FK.
На этом же форуме обсуждалось, что в MySQL не стоит доверять каскадным ключам.
...
Рейтинг: 0 / 0
Не получается удалить запись из таблицы
    #39706320
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvladНа этом же форуме обсуждалось, что в MySQL не стоит доверять каскадным ключам.Подзреваю, что обсуждалось немного не то.
А именно:
https://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html Cascaded foreign key actions do not activate triggers.
...
Рейтинг: 0 / 0
Не получается удалить запись из таблицы
    #39706334
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftsvnvladНа этом же форуме обсуждалось, что в MySQL не стоит доверять каскадным ключам.Подзреваю, что обсуждалось немного не то.
А именно:
https://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html Cascaded foreign key actions do not activate triggers.
http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=995695&msg=13741373
miksoftЕсли это не учебный проект, то забудьте вообще про изменение первичного ключа. Да и про такие каскадные удаления записей - желательно, тоже.
...
Рейтинг: 0 / 0
Не получается удалить запись из таблицы
    #39706347
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvlad http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=995695&msg=13741373
miksoftЕсли это не учебный проект, то забудьте вообще про изменение первичного ключа. Да и про такие каскадные удаления записей - желательно, тоже.Там была попытка сделать кривую архитектуру БД. Из этого никак не следует, что "в MySQL не стоит доверять каскадным ключам".

Кстати, надо бы еще такой момент учесть:
https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_foreign_key_checks Setting foreign_key_checks to 1 does not trigger a scan of the existing table data. Therefore, rows added to the table while foreign_key_checks=0 will not be verified for consistency.
...
Рейтинг: 0 / 0
Не получается удалить запись из таблицы
    #39706348
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот еще нашел из своей темы:
http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1173403&msg=18096334

MasterZivsvnvladЕсли удаляем категорию, каскадно удаляется подкатегория.
Ну я бы на твоём месте вообще бы с каскадными удалениями не баловался. Опасная и вредная вещь..
...
Рейтинг: 0 / 0
Не получается удалить запись из таблицы
    #39706351
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Не получается удалить запись из таблицы
    #39706361
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvlad http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1173403&msg=18096407 Это то же что и 21682429 . С тех пор ничего не изменилось даже в версии 8.0.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Не получается удалить запись из таблицы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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