oracle中如何用delect删除两个关联的表的一条信息,要是用delete不行那应该用啥?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle中如何用delect删除两个关联的表的一条信息,要是用delete不行那应该用啥?相关的知识,希望对你有一定的参考价值。
如果关联的两个表一条信息同时删除,可用下列方法。设关联的外键是ID,先设定外键类型为级联删除。
alter table B add constraint fk_ID foreign key (ID) references A(ID) on delete cascade;
然后delete from A where ID=nnnn; 就可以自动删除对应B表内容了。 参考技术A 如果关联的两个表一条信息同时删除,可用下列方法。
设关联的外键是ID,先设定外键类型为级联删除。
alter table B add constraint fk_ID foreign key (ID) references A(ID) on delete cascade;
然后delete from A where ID=nnnn; 就可以自动删除对应B表内容了。 参考技术B delete from table a,table b where a.? = b.?
mysql之delect语法
一:DELETE语法
以往用delect删除表数据是都是单表(一个表)删除。对于关联表,往往都是先删除第一个表的数据,然后再写另一个delect语句删除另一个表的数据(浪费时间,又影响性能,与数据库交互两次)。通过查阅官方文档的delect语法。有一些新的感悟。
1.1:单表语法(完整语法)
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name #() [PARTITION (partition_name [, partition_name] ...)] #(分区) [WHERE where_condition] #(删除条件) [ORDER BY ...] #(删除顺序) [LIMIT row_count] #(现在一次删除的数量)
对于[]里面都是一些可选阐述,对于每个参数的意思我也是大概了解,在此我就不多做解释了,有兴趣的课参考官方文档:https://dev.mysql.com/doc/refman/5.7/en/delete.html
1.2:多表语法(本次重点)
语法1:
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] tbl_name[.*] [, tbl_name[.*]] ... FROM table_references [WHERE where_condition] DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name[.*] [, tbl_name[.*]] ... USING table_references [WHERE where_condition]
1.3:多表删除
您可以在DELETE
语句中指定多个表,以 根据WHERE
子句中的条件从一个或多个表中删除行 。您不能使用ORDER BY
或LIMIT
在多表中 DELETE
。该 table_references
子句列出了连接中涉及的表。
对于第一个多表语法,仅FROM
删除子句之前列出的表中的匹配行。对于第二个多表语法,仅删除FROM
子句(在USING
子句之前)中列出的表中的匹配行。结果是您可以同时从多个表中删除行,并具有仅用于搜索的其他表:
语法1
DELETE t1, t2 FROM t1 INNER JOIN t2 INNER JOIN t3 WHERE t1.id=t2.id AND t2.id=t3.id;
语法2:
DELETE FROM t1, t2 USING t1 INNER JOIN t2 INNER JOIN t3 WHERE t1.id=t2.id AND t2.id=t3.id;
例如:删除一班班集(id =1)和一班所有的学生(学生的班级classes.id=1)
DELETE classes ,students FROM students INNER JOIN classes WHERE classes.id = 1 AND students.`class_id` = 1;
注意:我上面用的是inner join 关联也可用outer join(是默认关联语法),但推荐用inner join因为inner join是取得两表的交集(outer join也可以取交集),省去了一些麻烦,也可规避一些误操作。具体细节可关联查询细节
备注:前面的示例使用INNER JOIN
,但多表DELETE
语句可以使用语句中允许的其他类型的连接 SELECT
,例如 LEFT JOIN
。例如,要删除不存在t1
匹配项的行 t2
,请使用LEFT JOIN
:
1.4:使用别名(alise)
多表中的表别名 DELETE
只应table_references
在语句的部分声明。在其他地方,允许别名引用但不允许别名声明。
语法:
DELETE a1, a2 FROM t1 AS a1 INNER JOIN t2 AS a2 WHERE a1.id=a2.id; DELETE FROM a1, a2 USING t1 AS a1 INNER JOIN t2 AS a2 WHERE a1.id=a2.id; 注意不要写成:(定义标的别名要在from后面) DELETE t1 AS a1, t2 AS a2 FROM t1 INNER JOIN t2 WHERE a1.id=a2.id; DELETE FROM t1 AS a1, t2 AS a2 USING t1 INNER JOIN t2 WHERE a1.id=a2.id;
以上是关于oracle中如何用delect删除两个关联的表的一条信息,要是用delete不行那应该用啥?的主要内容,如果未能解决你的问题,请参考以下文章
在Oracle数据库中如何用sql查询某一个用户名下的某张表里面的数据,select * from 表名 用户名 where id=1
oracle数据库中如何用sql语句查出重复字段以及如何删除?