数码资讯
oracle中多表级联删除的分析
表之间的关系很复杂,数据量更大,所以我们已经尝试了几种解决方案。 方法一:在创建约束时设置级联删除 (但由于各种原因或出于各种考虑,没有创建数据库的级联删除。) SQL语句: 复制代码代码如下所示: 创建表的u_wen_book 。fartab (far_id 号(10)不为空, far_nameV
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
表之间的关系很复杂,数据量更大,所以我们已经尝试了几种解决方案。
方法一:在创建约束时设置级联删除
(但由于各种原因或出于各种考虑,没有创建数据库的级联删除。)
SQL语句:
复制代码代码如下所示:
创建表的u_wen_book 。fartab (far_id 号(10)不为空,
far_nameVARCHAR2(10),other_nameVARCHAR2(10),
约束pk_fer主键(far_id ))
创建表的u_wen_book 。chiltab (chil_id 号(10)不
空,chil_nameVARCHAR2(10),chil_otherVARCHAR2(10),
far_id 号(10)不为空,
约束pk_chil主键(chil_id ),
约束fk_chil外键(far_id )
引用u_wen_book 。fartab (far_id )级联删除)
方法二:在创建约束时不使用级联删除,当需要进行级联删除时,删除原始外键约束,并重建级联删除的约束。
实验证明这是完全可行的。有必要对现有数据进行验证。否则,新的约束对原始数据无效。默认是验证。If the mandatory requirement is not verified, use the NOVALIDATE keyword.And the foreign key reference can only be the only primary key.)
SQL语句:
复制代码代码如下所示:
修改表u_wen_book 。gchiltab1
约束fk_g1
修改表u_wen_book 。gchiltab1
添加(约束fk_g1外键()
引用u_wen_book 。chiltab ()
关于删除级联)
这样我们可以连接和删除。删除后,如果我们不感到轻松,没有任何麻烦,我们可以重建它的其他关键约束没有级联和删除,防止误操作。
方法三:使用触发器(创建时没有级联删除)
(更灵活,它可以根据您编写的程序完成,而不是引用的惟一键)。
(1)创建表并插入数据
SQL语句:
复制代码代码如下所示:
创建表ordercombine(
o_id VARCHAR2(16)不为空,
VARCHAR2(15)不为空的行,
formerid VARCHAR2(16)不为空,
pk_ordercombine主键约束(formerid));
VIPForm(创建表
v_id VARCHAR2(16)不为空,
IsValid CHAR(1)默认'0'not空,
fk_vipform外键约束(v_id)参考ordercombine(formerid));
插入ordercombine值(1,1,1);插入ordercombine值(ordercombine,1);(2),对与错;
结果uff1a
(2)创建触发器:
SQL:
复制代码代码如下所示:
创建或替换触发fg123 。ter_ov
之前
在ordercombine 为每一行删除
开始
删除从vipform
在vipform。v_id =:OLD.FormerId;
结束;
(3)删除和结果:
SQL:
复制代码代码如下所示:
从fg123 删除。ordercombine
在formerid = 1
方法四:如果表之间的关系很简单(在两个表上),所涉及的记录很少。
(以前的方法涉及到大量数据和复杂的表间关系,效率更高。简单直接删除速度更快)。
如前一个示例中所示,直接删除
SQL语句:
复制代码代码如下所示:
从fg123 删除。ordercombine
在vipform = 1;
从fg123 删除。ordercombine
在formerid = 1
方法一:在创建约束时设置级联删除
(但由于各种原因或出于各种考虑,没有创建数据库的级联删除。)
SQL语句:
复制代码代码如下所示:
创建表的u_wen_book 。fartab (far_id 号(10)不为空,
far_nameVARCHAR2(10),other_nameVARCHAR2(10),
约束pk_fer主键(far_id ))
创建表的u_wen_book 。chiltab (chil_id 号(10)不
空,chil_nameVARCHAR2(10),chil_otherVARCHAR2(10),
far_id 号(10)不为空,
约束pk_chil主键(chil_id ),
约束fk_chil外键(far_id )
引用u_wen_book 。fartab (far_id )级联删除)
方法二:在创建约束时不使用级联删除,当需要进行级联删除时,删除原始外键约束,并重建级联删除的约束。
实验证明这是完全可行的。有必要对现有数据进行验证。否则,新的约束对原始数据无效。默认是验证。If the mandatory requirement is not verified, use the NOVALIDATE keyword.And the foreign key reference can only be the only primary key.)
SQL语句:
复制代码代码如下所示:
修改表u_wen_book 。gchiltab1
约束fk_g1
修改表u_wen_book 。gchiltab1
添加(约束fk_g1外键()
引用u_wen_book 。chiltab ()
关于删除级联)
这样我们可以连接和删除。删除后,如果我们不感到轻松,没有任何麻烦,我们可以重建它的其他关键约束没有级联和删除,防止误操作。
方法三:使用触发器(创建时没有级联删除)
(更灵活,它可以根据您编写的程序完成,而不是引用的惟一键)。
(1)创建表并插入数据
SQL语句:
复制代码代码如下所示:
创建表ordercombine(
o_id VARCHAR2(16)不为空,
VARCHAR2(15)不为空的行,
formerid VARCHAR2(16)不为空,
pk_ordercombine主键约束(formerid));
VIPForm(创建表
v_id VARCHAR2(16)不为空,
IsValid CHAR(1)默认'0'not空,
fk_vipform外键约束(v_id)参考ordercombine(formerid));
插入ordercombine值(1,1,1);插入ordercombine值(ordercombine,1);(2),对与错;
结果uff1a
(2)创建触发器:
SQL:
复制代码代码如下所示:
创建或替换触发fg123 。ter_ov
之前
在ordercombine 为每一行删除
开始
删除从vipform
在vipform。v_id =:OLD.FormerId;
结束;
(3)删除和结果:
SQL:
复制代码代码如下所示:
从fg123 删除。ordercombine
在formerid = 1
方法四:如果表之间的关系很简单(在两个表上),所涉及的记录很少。
(以前的方法涉及到大量数据和复杂的表间关系,效率更高。简单直接删除速度更快)。
如前一个示例中所示,直接删除
SQL语句:
复制代码代码如下所示:
从fg123 删除。ordercombine
在vipform = 1;
从fg123 删除。ordercombine
在formerid = 1
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。