
仅凭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语句,使用时调用该过程
主要是更改sqlstr的值,与数据库的更新,添加,删除的sql语句一致
sqlstr=update 学生成绩 set 字段名=value,字段名2=value2 where 条件
sqlstr=insert into 学生成绩(字段名1,字段名2) values(value1,value2)
sqlstr=delete from 学生成绩 where 条件
如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!
vaela
1、打开SQL Server 2008 并连接一个数据库。
2、点击工具栏的“新建查询”按钮,新建一个查询。
3、这个数据库里有个测试表格,里面有7条记录。输入“DELETE FROM FROM 测试;”
4、执行“DELETE FROM FROM 测试;”软件提示错误。
5、去掉DELETE后面的号,改为:
DELETE FROM 测试;
执行显示“7行受影响”,也就是之前的7条记录全部被删除了。
6、然后执行SELECT FROM 测试;查询结果为空,再次验证已删除表格“测试”中的所有记录。
加where条件\x0d\\x0d\删除表的话:drop table if exists `table`,`table2`,`table3`;\x0d\\x0d\删除表数据的话:\x0d\1、delete from t1 where 条件\x0d\\x0d\2、delete t1 from t1 where 条件\x0d\\x0d\3、delete t1 from t1,t2 where 条件\x0d\\x0d\也就是简单用delete语句无法进行多表删除数据 *** 作,不过可以建立级联删除,\x0d\\x0d\在两个表之间建立级联删除关系,则可以实现删除一个表的数据时,同时删除\x0d\另一个表中相关的数据。
在创建表的时候就需要设置级联删除和级联更新(修改)。方法如下:
alter table SZ_Pictureadd constraint FK_SZ_PICTU_RELATIONS_SZ_PICTU foreign key (pictureTypeId)
references SZ_PictureType (pictureTypeId)
on update cascade on delete cascade --其中这句就是级联更新和级联删除
级联删除:
删除包含主键值的行的 *** 作,该值由其它表的现有行中的外键列引用。在级联删除中,还删除其外键值引用删除的主键值的所有行。
级联更新:
更新主键值的 *** 作,该值由其它表的现有行中的外键列引用。在级联更新中,更新所有外键值以与新的主键值相匹配。
你这是要级联删除?
你的用法是不正确的。你先了解一下cascade的用法。
级联删除
外键的级联删除:如果父表中的记录被删除,则子表中对应的记录自动被删除
父表——被外键引用的表
子表——引用父表中的键作为外键的表
解释:
父表中删除包含主键值的行的 *** 作,该值由子表的现有行中的外键列引用。在级联删除中,删除父表中的记录时,同时删除子表中外键引用此主健的记录。
例:
employee 表中有员工的dept_id 引用department表中dept_id( 同时为deptartment主键 )作为外键,当department表(父表)中一个部门被删除,employee表(子表)中引用这个部门的dept_id作为dept_id的记录也自动被删除。
语法:
Foreign Key
(column[,n])
references referenced_table_name[(ref_column[,n])]
[on delete cascade]
[on update cascade]
例子:
SQL级联删除——删除主表同时删除从表——同时删除具有主外键关系的表
create table a(
id varchar(20) primary key,
password varchar(20) not null
)
create table b
(
id int identity(1,1) primary key,
name varchar(50) not null,
userId varchar(20),
foreign key (userId) references a(id) on delete cascade
)
表B创建了外码userId 对应A的主码ID,声明了级联删除
测试数据:
insert a values ('11','aaa')
insert a values('23','aaa')
insert b values('da','11')
insert b values('das','11')
insert b values('ww','23')
删除A表内id为‘11’的数据,发现B表内userId 为“11”也被数据库自动删除了,这就是级联删除
delete a where id='11'
delete
user
where
user_id
in
(select
user_id
from
UT
where
1=1)
delete
topic
where
topic_id
in
(select
topic_id
from
UT
where
1=1)
无须触发器
直接用子删除语句即可实现
不知满意否>
如果一定要用
也可以留言给我
继续作答
给你做个简单试验吧
创建class表,里边其他字段我就略了
create table class(classid int not null primary key,classname varchar(20))
创建学生表
create table student(studentid int not null primary key,studentname varchar(10),
classid int)
添加外键级联删除或更新约束
alter table student add constraint FK_classid foreign key (classid) references class (classid) on update cascade on delete cascade向class表增加数据
insert into class values (1,'1班')insert into class values (2,'2班')
向student表增加数据
insert into student values (1,'aa',1)insert into student values (2,'bb',2)
insert into student values (3,'cc',3) --这条是增加不进去的,会报错
删除class表里一班的数据
delete from class where classid=1检查 student 表里数据
这个时候你就发现,为1班学生的那数据也同时被删了
以上就是关于sql语句从主表删除一条数据,并且把先关联的多个子表数据也删除全部的内容,包括:sql语句从主表删除一条数据,并且把先关联的多个子表数据也删除、access中级联更新、删除怎么写、sql server数据库怎样同时删除两张表的数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)