ACCESS级联删除一对多关系的记录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ACCESS级联删除一对多关系的记录相关的知识,希望对你有一定的参考价值。

提示无法从指定的数据表中\删除!

您既然已经选择了“级联删除”,就没有必要出现多端的表(即“工作表”),删除了一端表(公司表)的记录,程序就会自动级联删除多端表(工作表)的记录。你把2张表都让它出现,程序是不允许的,所以报错。如下即可:

实际上,删除查询是删除整条记录的,连  公司.*  都没有必要出现,如下即可:

追问

如果要设置的条件在子表的字段里呢

追答

你说的子表是不是指多端的表?如果条件在多端的表,那就不是级联删除了,直接在子表里设置条件删除不行吗?级联删除总是从一端删除,并连带将多端的相应数据删除。

追问

当然是多端的表,在子表里设置了条件不能级联删除,可主表\里的相应数据也要删除的啊,在子表里直接删是达不到这个效果的./

追答

你在子表里设置了条件进行删除,说明子表里还有一些不需要删除,这些不需要删除的记录还是需要主表里有相应的记录,所以不能删除主表里的记录,否则就违反了参照完整性规则(就是说多端有记录时,一端也必须存在相应的记录),这也就是说:级联删除总是从一端删除,并连带将多端的相应数据删除,而不能反向删除。你能举个例子吗?这样我能更直观地理解你所说的,看看能不能达到你所说的。

参考技术A 我是从来不用关系这种看起来高级实际不好控制的东西
老老实实挨个表按条件删除比较妥当追问

有时不得不用啊,

参考技术B 公司名换成工作表的公司名追问

是一样的啊,只是一个设的主键,一个建的有重复索引

Android Room级联删除一对多关系

【中文标题】Android Room级联删除一对多关系【英文标题】:Android Room cascade delete for a one to many relationship 【发布时间】:2020-07-27 18:03:00 【问题描述】:

假设我有两个实体,锻炼和锻炼,锻炼(一)和锻炼(多)之间存在一对多的关系。实体是这样设置的

锻炼实体:

@Entity(
    tableName = "workouts",
    indices = [Index("startDate")]
)
data class Workout(
    @PrimaryKey
    val startDate: String,

    val workoutName: String
)

运动实体:

@Entity
data class Exercise(
    @PrimaryKey(autoGenerate = true)
    val exerciseId: Long = 0,

    val workoutId: String,

    val name: String
)

锻炼锻炼:

@Entity(
    foreignKeys = [ForeignKey(
        entity = Workout::class,
        parentColumns = arrayOf("startDate"),
        childColumns = arrayOf("workoutId"),
        onDelete = ForeignKey.CASCADE
    )]
)
data class Exercise(
    @PrimaryKey(autoGenerate = true)
    val exerciseId: Long = 0,

    val workoutId: String,

    val name: String
)

这是我获得与锻炼相关的练习的方式:

@Transaction
@Query("SELECT * FROM workouts WHERE startDate = :startDate")
suspend fun getWorkoutWithExercises(startDate: String): WorkoutWithExercises

所以我的问题是,如果包含练习的锻炼实例被删除,相关练习是否也会被删除?如果没有,这将如何实现?

谢谢

【问题讨论】:

【参考方案1】:

练习也将被删除,因为您已经为表格练习创建了Foreign Key

【讨论】:

以上是关于ACCESS级联删除一对多关系的记录的主要内容,如果未能解决你的问题,请参考以下文章

access 不能建立删除查询。

Android Room级联删除一对多关系

关于Hibernate级联更新的一个问题

对于一对多关系,每个级联删除选项的所有副作用是啥?

Hibernate 一对多关系级联删除

15.翻译系列:EF 6中的级联删除EF 6 Code-First 系列