У меня есть две таблицы, один "пользователь" и один "заказы", где в таблице заказов есть ссылка внешнего ключа на таблицу идентификаторов пользователя. (В этом случае я использую адрес электронной почты как идентификатор пользователя.)
Я хочу выполнить следующее:
-
Если обновлен идентификатор таблицы пользователя (= адрес электронной почты изменен), это будет отображаться в поле user_id таблицы привязанных заказов. (Это отлично работает, используя директиву ON UPDATE CASCADE - здесь нет проблем!)
-
Если пользователь удален из таблицы пользователя, порядок останется, СОХРАНЯЙТЕ указанный user_id.
У меня проблема со второй целью:
Если я использую ON DELETE CASCADE в указанном поле идентификатора пользователя, строка заказа, конечно, удаляется.
Если я использую ON DELETE NO ACTION, я получаю сообщение об ошибке при попытке удалить пользователя. (# 1451 - Не удается удалить или обновить родительскую строку: сбой внешнего ключа)
Если я использую ON DELETE SET NULL, я могу удалить строку пользователя, но для указанной информации установлено значение null, поэтому я не могу отследить, кто сделал этот заказ...
Есть ли способ разрешить удаление пользователя из таблицы пользователя, сохраняя указанную информацию user_id в таблице заказов?