① sqlserver两张表数据联级删除问题
给你做个简单试验吧
创建class表,里边其他字段我就略了
createtableclass(classidintnotnullprimarykey,
classnamevarchar(20))
创建学生表
createtablestudent(studentidintnotnullprimarykey,
studentnamevarchar(10),
classidint)
添加外键级联删除或更新约束
_classidforeignkey(classid)referencesclass(classid)
向class表增加数据
insertintoclassvalues(1,'1班')
insertintoclassvalues(2,'2班')
向student表增加数据
insertintostudentvalues(1,'aa',1)
insertintostudentvalues(2,'bb',2)
insertintostudentvalues(3,'cc',3)--这条是增加不进去的,会报错
删除class表里一班的数据
deletefromclasswhereclassid=1
检查 student 表里数据
这个时候你就发现,为1班学生的那数据也同时被删了
② sql多表关联删除
删除多表关联数据的三种方法
1、级联删除
createtablea
(
idvarchar(20)primarykey,
passwordvarchar(20)notnull
)
createtableb
(
idintidentity(1,1)primarykey,
namevarchar(50)notnull,
userIdvarchar(20),
foreignkey(userId)referencesa(id)ondeletecascade
)
表B创建了外码userId 对应A的主码ID,声明了级联删除
测试数据:
insertavalues('11','aaa')
insertavalues('23','aaa')
insertbvalues('da','11')
insertbvalues('das','11')
insertbvalues('ww','23')
删除A表内id为‘11’的数据,发现B表内userId 为“11”也被数据库自动删除了
deleteawhereid='11'
2、采用存储过程
A表:AID Aname 主健:AID
B表:BID BelongAID Bname 主健:BID,外健:BelongAID
C表:CID BelongBID Cname 主健:CID,外健:BelongBID
D表:DID BelongCID Dname 主健:DID,外健:BelongCID
其中:
A表和B表通过A.AID和B.BelongAID 创建了外健关系
B表和C表通过B.BID和C.BelongBID 创建了外健关系
C表和D表通过C.CID和D.BelongCID 创建了外健关系
3、采用触发器
删除Class表中的一条记录的同时删除该记录Class_No字段值在Student表中对应的记录。
CreateTriggerClass_delete
onClass
fordelete
as
begin
deletefromStudent
whereClass_No=(selectClass_Nofromdeleted)
end
③ sql 两个表关联删除数据
删除主-从表的记录可以建立简单存储过程来实现:
CREATE PROCEDURE [存储过程]
(
@Id VARCHAR(50)
)
AS
DELETE [子表] WHERE [关联Id] = @Id
DELETE [主表] WHERE [Id] = @Id
GO
执行方法:EXECUTE [存储过程] @Id
④ sql跨表删除
你说的这个问题有些麻烦:
首先,用一个存储过程解决是最方便的:
IF OBJECT_ID('del', 'P') IS NOT NULL
DROP PROC del
GO
CREATE PROC del
@stuname INT
AS
DECLARE @ID INT
SELECT @ID=id FROM student where name=@stuname --得到id
delete from student where id=@Id
delete from mark where id=@id
GO
执行此存储过程:
EXEC del 'rose'
如果只能是只写一个语句的话,那就只能先定义好表
chengji表中的id列是student表的外键,
然后就是级联删除,用到CASCADE。
完整点写出来就是:
alter table mark
add
constraint fk_student_id
foreign key references mark(id)
on delete cascade --这一行是关键,默认是不级联删除
-- on delete no action
这样我们只要删除表student中的数据就可以同时删除mark表中的数据
delete from student where name='rose'
你要是还有问题就再让让我吧。希望你能早点解决这个问题
⑤ sql中多表关联删除
分成两句执行,或写存储过程。
分成两句写时注意包括在一个事务中,避免一个成功一个失败。
⑥ SQL 多个表关联查询!和删除!
两个表之间就没有什么关系么? 比如 表一的某字段 = (或者</>=/<=/<>) 表二的某字段
⑦ sql多表连接删除问题
把这些表中的comid分别作为lm_company表comid的外键添加级联删除功能可以了
⑧ sql多表连接 查询 与删除
1:
SELECT
客户姓名
订单号
时间
FROM
订单表
JOIN 客户表
ON ( 订单表.UID = 客户表.UID)
JOIN
订单时间表
ON ( 订单表.DID = 订单时间表.DID)
WHERE
( SELECT COUNT(*) FROM 订单表 d WHERE d.UID = 客户表.UID ) > 3
2:
-- 先删除 订单时间表
DELETE
订单时间表
WHERE
DID IN (
SELECT DID FROM
订单表
JOIN 客户表
ON ( 订单表.UID = 客户表.UID)
WHERE
客户姓名 = '张三'
);
-- 后删除 订单表.
DELETE
订单表
WHERE
UID IN ( SELECT UID FROM 客户表 WHERE 客户姓名 = '张三');
-- 最后删除 客户表
DELETE
客户表
WHERE
客户姓名 = '张三';
⑨ sql多表删除语句 在线等
--1 如何删除type的一条记录
go
create proc procDeleteTypeById
@TID int
as
begin
--先删除最外层子表的关联记录 (pront表)
delete from proct where mstid in(select mstid from mstype where stid in(select stid from stype where tid=@TID))
--在删除mstype表中的关联记录
delete from mstype where stid in(select stid from stype where tid=@TID)
--在删除stype表中关联记录
delete from stype where tid=@TID
--最后删除根表记录
delete from [type] where tid=@Tid
end
--2 删除stype表中记录同上
go
create proc procDeleteStype
@STID int
as
begin
--先删除最外层子表的关联记录 (pront表)
delete from proct where mstid in(select mstid from mstype where stid=
@STID)
--在删除mstype表中的关联记录
delete from mstype where stid=@STID
--最后删除根表中的关联记录
delete from stype where stid=@STID
end
⑩ sql语句多表删除问题
原则上,同意youyuan1688和ytbelwxg的方法. 5个表,如果每个表都和lm_company表的comid字段有直接主外键关系.那么ytbelwxg的方法是最佳方案; 仔细看了你的连接条件,猜想,并不是每个表都和lm_company表的comid字段有直接主外键关系.所以通过主外键级联删除的方案就不可行,那么就必须逐个表来删除,而且删除的顺序也有讲究,先删子表,再删主表. 本例中,删除的顺序应该是e,d,c,b,a; --1.删除e; sql1="delete from lm_newsinfo from lm_newsinfo as e, lm_company as a where a.comid=e.news_comid and a.comid=" + lblid.Text +";" --2.删除d; sql2="delete from lm_message from lm_company as a ,lm_Yuzhan as b ,lm_Bookinfo as c ,lm_message as d where a.comid=b.yuzhan_comid and b.yuzhan_id=c.Bkinfo_yuzhanid and c.Bkinfo_id=d.message_bookid and a.comid=" + lblid.Text +";" --删除c; sql3="delete from lm_Bookinfo from lm_company as a ,lm_Yuzhan as b ,lm_Bookinfo as c where a.comid=b.yuzhan_comid and b.yuzhan_id=c.Bkinfo_yuzhanid and a.comid=" + lblid.Text + ";" --删除b; sql4="delete from lm_Yuzhan where yuzhan_comid=" + lblid.Text + ";" --删除a; sql5="delete from lm_company where comid=" + lblid.Text + ";" --合并sql1,sql2,sql3,sql4,sql5 sql=sql1+sql2+sql3+sql4+sql5 --在你的客户端执行sql命令串即可