sql语句从主表删除一条数据,并且把先关联的多个子表数据也删除

2024-11-09 09:33:47
推荐回答(4个)
回答1:

仅凭sql不可能实现,多条实现先删从表再删主表
楼主的需求解决方案
1.如果是编程实现,java框架hibernate的cascade可以模拟做到删主去重
2.表中设置好级联删除 这样设定好表后 可以实现删主去重 oracle为例
alter table AAA add constraint asd foreign key (BBB) references CCC(DDD) on delete cascade;
3.新增delete的行级触发器

4.存储过程 包含多条delete语句,使用时调用该过程

回答2:

DELETE FROM table WHERE date in('c','e','f')

  1. 结构化查询语言(Structured Query Language)简称SQL,结构化查询语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;

  2. 用外键关联删除,把B表的uid设成外键关联A表的ID,并关联删除操作。

  3. 用存储过程,用事务来处理实现。

  1. 创建数据库:CREATE DATABASE database-name删除数据库

  2. drop database dbname

  3. 创建新表create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)

  4. 删除新表:drop table tabname

  5. 增加一个列:Alter table tabname add column col type

  6. 添加主键:Alter table tabname add primary key(col)

  7. 删除主键:Alter table tabname drop primary key(col)

  8. 创建索引:create [unique] index idxname on tabname(col….)

  9. 删除索引:drop index idxname

  10. 创建视图:create view viewname as select statement

  11. 删除视图:drop view viewname

回答3:

如果建立了主外键约束,那么这个约束是可以关联删除的(建立的时候要加一个参数,这是oracle的写法,如果你不是oracle我不清楚其他数据库能不能这样做)。
建立触发器,这个所有数据库都可以。你这里就是after delete触发,也是删除语句,这个是可以的。

回答4:

建议你写个存储过程,我写的一个,让你参考一下!CardNo是自定义的数据类型!用触发器容易出错
CREATE PROCEDURE DelFixUser
@CardNo CardNo
AS
Declare @CarNo CarNo
select @CarNo=车辆号码 from FixCardIndexTable
where 卡号=@CardNo
Delete from AllCardIndexTable
where 卡号=@CardNo
Delete from FixCardIndexTable
where 卡号=@CardNo
Delete from FixCardEndDateTable
where 卡号=@CardNo
Delete from CardPassWordTable
where 卡号=@CardNo
Delete from UserCarInfoTable
where 车辆牌号=@CarNo
说明:删除一个固定用户记录,同时从AllCardIndexTable、FixCardIndexTable、FixCardEndDateTable、CardPassWordTable和UserCarInfoTable表中删除相应的记录。