用户
 找回密码
 入住 CI 中国社区
搜索
查看: 3580|回复: 9
收起左侧

◆请教,这样的数据如何处理?急!◆

[复制链接]
发表于 2010-4-7 10:28:23 | 显示全部楼层 |阅读模式
t1是主表,t1中的字段id在其他表中有外键引用,在后台使用的是delete from t1 where id in (2,3)这样的SQL来删除,可是当表t1里id=2的这条数据已经被其他表引用的时候,删除的时候会报错,且所有记录都删除不了,请问如何做到可以删除没有引用的数据,且提示id=2这条数据有引用不能删除?望高手赐教,谢谢!!
发表于 2010-4-7 12:40:14 | 显示全部楼层
这个,单条循环处理?删之前先看其他表里有没引用,然后再弄吧
或者或者你在t1表加个字段标识是否引用了
抑或者使用子查询???
 楼主| 发表于 2010-4-7 14:26:22 | 显示全部楼层
这个,单条循环处理?删之前先看其他表里有没引用,然后再弄吧
或者或者你在t1表加个字段标识是否引用了
抑 ...
ywqbestever 发表于 2010-4-7 12:40



    如果是t1表加个字段标识是否引用的话,那如果有多表引用如何处理啊?每个引用表都检查?
    如果是删之前看其他表里有没有引用,那每次加引用该外键的表,都要改代码啊?子查询也是一样啊。

    有更好的更标准的处理方法吗?
发表于 2010-4-7 17:40:14 | 显示全部楼层
回复 3# sking

给t1表加是否引用标识,多表引用的话就存json变量吧
{"引用表1":"0","引用表2":"1",......}
 楼主| 发表于 2010-4-8 22:45:18 | 显示全部楼层
回复  sking

给t1表加是否引用标识,多表引用的话就存json变量吧
{"引用表1":"0","引用表2":"1",......} ...
ywqbestever 发表于 2010-4-7 17:40



    这样也很麻烦啊,在JAVA里,通常是把删除代码写在try,catch里,如果删除时报异常,那么就提示,在PHP里如何实现?大家一般如何做的?
发表于 2010-4-8 22:48:25 | 显示全部楼层
php也有try catch
 楼主| 发表于 2010-4-9 22:26:24 | 显示全部楼层
php也有try catch
ywqbestever 发表于 2010-4-8 22:48



    但php的try catch有问题,要给出明确的错误,而不是自动捕捉,感觉和用IF判断语句没什么区别啊,如果这样,还是要到数据库中去检查啊,还是很麻烦啊
发表于 2010-4-10 06:51:18 | 显示全部楼层
MySQL外键定义默认值是ON DELETE RESTRICT,意思是删除时进行限制,试把表的外键定义改为ON DELETE SET NULL。

但要注意外键是否NOT NULL。
 楼主| 发表于 2010-4-11 00:26:44 | 显示全部楼层
MySQL外键定义默认值是ON DELETE RESTRICT,意思是删除时进行限制,试把表的外键定义改为ON DELETE SET NUL ...
燃雲 发表于 2010-4-10 06:51



    这样的话是不是删除主表的数据,其他应用该表外键的字段都会变成NULL?可是这样数据会出现问题,我要的效果是如果有被应用,就直接弹出不能删除的提示信息。这个怎么实现呢?谢谢
 楼主| 发表于 2010-4-20 01:46:59 | 显示全部楼层
没有人知道吗?

本版积分规则