sql - 当第一个表中的行被删除时如何从第二个表中删除数据

标签 sql database sqlite database-design triggers

我在 SQLite 中有 2 个简单的表。

第一个表:notebook_id、notebook_name

(1, lenovo) 
(2, hp) 

第二个表:model_id、notebook_id、model_name、价格

例如

(1, 1, y580, 1000)
(2, 1, y510p, 1500)

当我从第一个表中删除联想时,我也想从第二个表中删除联想的型号。我知道我应该使用触发器,但如果有人向我解释这个简单示例的触发器,那就太好了。

我正在添加运行良好的代码,希望对某人有所帮助。

CREATE TRIGGER trigger_name
       BEFORE DELETE ON notebook
BEGIN
    DELETE
      FROM model
     WHERE notebook_id = old.notebook_id;
END;

最佳答案

这通常称为父子关系。
因此,第一个表是您的父表,第二个表是您的子表。
您可以设置级联删除,以便在删除父行时,
属于该父行的所有子行也会被删除。

更多信息请参见:

http://www.sqlite.org/foreignkeys.html

尤其是这部分:

“4.3.删除和更新操作”

请参阅其中包含艺术家和轨道的示例,它是
与您的情况几乎相似(如果不相同)。

当然,您也可以在您的应用程序中处理此问题,
并自己执行此操作,即在删除父行之前,
只需转到子表并删除所有子行
指向特定的父行。

关于sql - 当第一个表中的行被删除时如何从第二个表中删除数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21064528/

相关文章:

c++ - 如何从数据库文件创建 QByteArray

sql - 确定用户是否至少有 5 张收据且 75% 的评分高于 9

php - 计算 now() 和时间戳字段之间的时间 - MySQL 还是 PHP?

mysql - 在 MySQL 中对多个数据运行相同 SELECT 的最简单方法

database - Django-queryset 每个字段获取一个对象=foo

python - 为什么 select_for_update 对于不支持它的数据库会被忽略?

mysql - 获取百分比平均值

mysql - 更新具有一个字段的当前最高(最大)值的行

php - 如何组织一组模块化 div 以齐平

java - 无法从原始资源文件夹复制数据库