MariaDB quot;ON UPDATE CASCADEquot; CONSTRAINT not working as expected?(更新时的MariaDBQuot;约束是否未按预期工作?)
本文介绍了更新时的MariaDB&Quot;约束是否未按预期工作?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我原以为ON UPDATE CASCADE
约束允许我更新引用的外键的值,并将其级联到它的Referee(就像在PostgreSQL中一样),但似乎并非如此。
我是否遗漏了什么?
此处使用MariaDB 10.3.29-MariaDB-0ubuntu0.20.04.1
CREATE TABLE category (
id int(11) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
parent_id int(11) UNSIGNED DEFAULT NULL,
slug varchar(255) NOT NULL,
title varchar(255) NOT NULL,
content longtext NOT NULL,
created_at datetime NOT NULL DEFAULT current_timestamp(),
updated_at datetime DEFAULT NULL,
CONSTRAINT fk_category_parent_id FOREIGN KEY (parent_id) REFERENCES category (id) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO `category` (`id`, `parent_id`, `slug`, `title`, `content`, `created_at`, `updated_at`) VALUES
(1, NULL, 'non-classe', 'Non Classé', '', '2021-05-30 16:46:52', NULL),
(2, NULL, 'cours', 'Cours', '', '2021-05-30 16:47:38', NULL),
(3, 2, 'mysql', 'MySQL', '', '2021-05-30 16:48:18', NULL),
(4, 3, 'initiation-mysql', 'Cours initiation MySQL', '', '2021-05-30 16:49:09', NULL);
UPDATE category SET id = 12 WHERE id = 2;
-- ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`cours_cms`.`category`, CONSTRAINT `fk_category_parent_id` FOREIGN KEY (`parent_id`) REFERENCES `category` (`id`) ON UPDATE CASCADE)
推荐答案
查看本页评论:
https://mariadb.com/kb/en/foreign-keys/
如果ON UPDATE CASCADE递归更新先前在级联过程中更新的表,则它的行为类似于RESTRICE。这意味着您不能在更新级联操作上使用自引用。这是为了防止级联更新导致无限循环。
换句话说,如果是分层数据类型的表,则ON UPDATE CASCADE不起作用。
这篇关于更新时的MariaDB&Quot;约束是否未按预期工作?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:更新时的MariaDB&Quot;约束是否未按预期工作?
基础教程推荐
猜你喜欢
- 如何在 SQL Server 的嵌套过程中处理事务? 2021-01-01
- 在 VB.NET 中更新 SQL Server DateTime 列 2021-01-01
- SQL Server 中单行 MERGE/upsert 的语法 2021-01-01
- 无法在 ubuntu 中启动 mysql 服务器 2021-01-01
- 将数据从 MS SQL 迁移到 PostgreSQL? 2022-01-01
- SQL Server 2016更改对象所有者 2022-01-01
- 使用pyodbc“不安全"的Python多处理和数据库访问? 2022-01-01
- Sql Server 字符串到日期的转换 2021-01-01
- ERROR 2006 (HY000): MySQL 服务器已经消失 2021-01-01
- SQL Server:只有 GROUP BY 中的最后一个条目 2021-01-01