我想知道这个测试问题。我自己准备了示例并进行了测试,但是我仍然不确定答案。
具有以下内容:
CREATE TABLE foo (
id INT PRIMARY KEY AUTO_INCREMENT,
name INT
)
CREATE TABLE foo2 (
id INT PRIMARY KEY AUTO_INCREMENT,
foo_id INT REFERENCES foo(id) ON DELETE CASCADE
)
据我所知,答案是:
一个。 创建两个表
虽然也有:
b。 如果删除表foo2中foo_id为2的行,则表foo中id = 2的行将被自动删除
d。如果删除表foo中id = 2的行,则删除表foo2中所有foo_id = 2的行
在我的示例中,我将使用delete语法:
DELETE FROM foo WHERE id = 2;
DELETE FROM foo2 WHERE foo_id = 2;
由于某种原因,我似乎找不到表之间的任何关系,尽管看起来应该有一个关系。也许有一些MySQL设置,或者ON DELETE CASCADE
在表创建查询中未正确使用?我不知道…
答案d。当且仅当存储引擎实际支持并强制执行外键约束时,才是正确的。
如果使用创建表Engine=MyISAM
,则b。或d。是正确的。
如果使用创建表Engine=InnoDB
,则 d。 是正确的。
注意:
仅当且仅当InnoDB才如此FOREIGN_KEY_CHECKS = 1
。如果为FOREIGN_KEY_CHECKS = 0
,则DELETE
来自父表(foo)的a 不会 从子表(foo2)中删除引用从父表中删除的行的行。
使用SHOW VARIABLES LIKE 'foreign_key_checks'
(1 = ON,0 =
OFF)的输出进行验证(正常默认值为ON。)
来自的输出SHOW CREATE TABLE foo
将显示表使用的引擎。
来自的输出SHOW VARIABLES LIKE 'storage_engine'
将显示在创建表且未指定引擎时使用的默认引擎。
问题内容: 我想使用外键来保持完整性并避免使用孤立键(我已经使用过innoDB)。 如何创建在CASCADE上删除的SQL语句? 如果我删除一个类别,那么如何确保它不会删除也与其他类别相关的产品。 数据透视表“ categories_products”在其他两个表之间创建多对多关系。 问题答案: 如果您的级联删除某个产品是因为该产品属于被杀类别的成员,那么它会删除该产品,那么您的外键设置不正确。给
我正在从事一个java web项目,该项目使用: > Spring Hibernate/JPA MySQL-(在EasyPHP/PHPMyAdmin上)JDBC 当我想删除一些数据时,我遇到了一个错误。但是,只有当我想删除一个有子级的父行并且他的一个子行也至少有一个子行时,这个问题才存在。 目标:我希望操作/查询删除所选行及其子行和子行。 错误代码:在服务器输出中 28-Sep-2016 11:5
问题内容: 我必须缺少SQLAlchemy的层叠选项的琐碎内容,因为我无法获得简单的层叠删除来正确操作-如果删除了父元素,则子对象将使用外键保留。 我在这里放了一个简洁的测试用例: 输出: 父母与子女之间存在简单的一对多关系。该脚本创建一个父级,添加3个子级,然后提交。接下来,它删除父级,但子级仍然存在。为什么?如何使孩子级联删除? 问题答案: 问题是sqlalchemy认为是父级的,因为这是您定
主要内容:JPA级联删除示例,输出结果级联移除用于指定如果父实体被移除,则其所有相关实体也将被移除。 以下语法用于执行级联删除操作 - JPA级联删除示例 在这个例子中,我们将创建两个相互关联的实体类,但要建立它们之间的依赖关系,我们将执行级联操作。 这个例子包含以下步骤 - 第1步: 在包下创建一个名为的实体类,其中包含属性:,,以及标记为级联规范的类型的对象。 文件: StudentEntity.java - 第2步: 在包下创建
级联删除通常被用作数据库术语,用来描述删除一个数据行时自动删除关联的数据行的特征。EF Core 实现了一些不同的删除行为,并且允许对关联关系的删除行为进行配置。EF Core 还实现了相关的惯例,它会基于关系的必要性为每个关系配置有用的默认删除行为。 删除行为 删除行为是在 DeleteBehavior 枚举中定义的,可以将它传递给 OnDelete 流式 API 来控制主实体/父实体的删除是否
编辑:修改问题以更好地反映问题。此处最初发布的问题 我有一个父实体(< code >上下文)和一个子实体(< code >用户)。父级上的级联“删除”不会删除子级。代码如下: