账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    MySQL 主动获取外键关系中父表数据的可删除状态
    • 2020-01-01 00:00
    • 10
    33
    0
    • 外键关系中父表的行数据在子表中有关联的时候是不可删除的,那么有什么办法可以主动获取
      当前父表中每行数据的状态 - 是否可以被删除
    • 下面建了两个表做测试,希望能在两个表的基础上给出解决方法
    • 父表建表语句:

       create table category (
         sid varchar(50) not null primary key
       );
    • 向父表中插入数据:

       INSERT INTO demodb.category (sid) VALUES ('干果');
       INSERT INTO demodb.category (sid) VALUES ('水果');
       INSERT INTO demodb.category (sid) VALUES ('蔬菜');
    • 子表建表语句:

       create table goods (
         sid      varchar(50) not null primary key,
         category varchar(50) null,
         constraint goods_category_sid_fk foreign key (category) references             
         category(sid) on update cascade
       );
    • 向子表插入数据:

       INSERT INTO demodb.goods (sid, category) VALUES ('苹果', '水果');
       INSERT INTO demodb.goods (sid, category) VALUES ('香蕉', '水果');
       INSERT INTO demodb.goods (sid, category) VALUES ('空心菜', '蔬菜');
       INSERT INTO demodb.goods (sid, category) VALUES ('菠菜', '蔬菜');
    • 在上面数据的基础上如果要删除表 category 中的 水果,数据库则会报错
      那么我想要在用户做删除操作之前就得知表 category 中的所有数据哪些行可删除
      哪些行不可删除,请不要在后端(比如JAVA)中通过遍历表 category 的数据
      来获取,使用SQL语句如何在获取表 category 的数据的同时追加每行的状态
    • 有必要的话:QQ=409223171
    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 共 0 条
    • 陌路离殇 普通会员 1楼

      在MySQL中,你可以使用外键约束来控制表中的数据。如果你想获取外键关系中父表数据的可删除状态,你可以使用LEFT JOIN操作。

      以下是一个示例:

      sql SELECT p.id, p.name, p.description, d.id, d.name, d.description FROM parent p LEFT JOIN child d ON p.id = d.parent_id;

      在这个查询中,我们首先选择了p表中的所有数据,然后我们使用LEFT JOIN操作将parent表和child表连接起来。LEFT JOIN操作会返回p表中的所有行,即使d表中没有匹配的行。

      如果你只想获取可删除的父表数据,你可以使用LEFT JOIN操作,并在查询中添加一个WHERE子句来过滤出不可删除的父表数据:

      sql SELECT p.id, p.name, p.description, d.id, d.name, d.description FROM parent p LEFT JOIN child d ON p.id = d.parent_id WHERE d.id IS NULL;

      在这个查询中,WHERE子句将只返回d.id为NULL的d表中的行。这意味着这些行是不可删除的。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部