Итак, вопрос действительно два вопроса.
Поддерживает ли MariaDB ON DELETE SET DEFAULT
. Да. Но, тем более важным вопросом является действительно
Есть ли у MariaDB устройства хранения данных, поддерживающие ON DELETE SET DEFAULT
?
Я считаю, что MariaDB принимает синтаксис (на уровне сервера). Но когда сервер переходит к базовому механизму хранения, механизм хранения будет отклоняться и отклонять его.
Например, это может привести к передаче данных в таблицы с использованием механизма хранения MyISAM. (Я не уверен в этом, мы никогда не определяем внешние ключи в таблицах MyISAM.) Если он будет передан в MyISAM, было бы натянуто сказать «он работает», потому что ничего «внешнего ключа» фактически не работает с MyISAM. MyISAM эффективно игнорирует ограничения внешнего ключа.
Я думаю, что есть примечание в документации, на которую вы ссылались, что у MariaDB был механизм хранения с именем PBXT, который принял бы это. Но разработка PBXT прекратилась, и она отключена в MariaDB 5.5. Чтобы включить механизм хранения, вам нужно будет сделать сборку MariaDB с включенным. Но это целая фраза, просто сказать: «MariaDB поддерживает ON DELETE SET DEFAULT
».
Механизм хранения InnoDB не поддерживает его. И XtraDB - улучшенный InnoDB, но я не думаю, что это область, которую они улучшили. (Стоит быстрая проверка, если вы используете XtraDB.)
Если вы используете движок хранения InnoDB для своей таблицы, то ответ заключается в том, что MariaDB не поддерживает ON DELETE SET DEFAULT
.
Если вы используете какой-либо другой механизм хранения, возможно. Но я думаю, что единственным механизмом хранения в MariaDB, который поддерживал его, была PBXT.
Ссылка: https://mariadb.com/kb/en/mariadb/foreign-keys/
Допустимые действия для ON DELETE и ON UPDATE являются:
SET DEFAULT: только работал с PBXT. Подобно SET NULL, но для столбцов внешнего ключа были установлены значения по умолчанию. Если значения по умолчанию не существуют, возникает ошибка.
Обходной, конечно, не полагаться на FOREIGN KEY правило ограничения, чтобы сделать это для вас. Просто установите для правила значение ON DELETE RESTRICT.
Перед удалением строк из родительской таблицы вы можете выполнить обновление ссылок на строки в дочерней таблице, и вы можете установить столбец внешнего ключа в этих строках на любое допустимое значение, которое вы хотите. Затем вы можете удалить строки из родителя.
Спасибо за подробный ответ. –