数据库--事务:级联删除(学生教师信息表)为例

--事物:保障整个流程的完整执行,全部没有问题统一提交,一旦有问题,回到原点
--存储过程或者触发器里面用

begin tran--事务的开始
--开始写流程语句
--语句写完之后
if @@ERROR>0
rollback--回滚事务
else
commit tran--提交事务

---------------------------------级联删除为例

drop table Scorebak
drop trigger Score_Delete
--删除前先备份数据到备份表之后再删除
create table Scorebak
(
    ids int identity(1,1) primary key,
    sno varchar(50),
    cno varchar(50),
    degree decimal(4,1),
    dayetime datetime
)
create trigger Score_Delete --备份删除--学名:级联删除
on Score
instead of delete
as
    declare @count int
    select @count = count(*) from deleted

    declare @i int
    set @i = 0
    while @i<@count
    begin
        declare @sno varchar(20)
        declare @cno varchar(20)
        declare @degree decimal(4,1)

        select top 1 @sno=sno,@cno=cno,@degree=degree from deleted
        where sno not in (select top (@i) sno from deleted) or cno not in(select top (@i) cno from deleted) 

        begin tran---------------------------------------------------

        insert into Scorebak values(@sno,@cno,@degree,getdate())

        delete from score where [email protected] and cno=@cno
        if @@ERROR>0-------------------------------------------------
        begin
            rollback tran--------------------------------------------
        end
        else---------------------------------------------------------
        begin
            commit tran----------------------------------------------
        end        

        set @[email protected]+1
    end
go
select *from Scorebak
select *from Score
delete from Score where Cno=‘3-105‘
--事物:保障整个流程的完整执行,全部没有问题统一提交,一旦有问题,回到原点
--存储过程或者触发器里面用

begin tran--事务的开始
--开始写流程语句
--语句写完之后
if @@ERROR>0
rollback--回滚事务
else
commit tran--提交事务

---------------------------------级联删除为例

drop table Scorebak
drop trigger Score_Delete
--删除前先备份数据到备份表之后再删除
create table Scorebak
(
    ids int identity(1,1) primary key,
    sno varchar(50),
    cno varchar(50),
    degree decimal(4,1),
    dayetime datetime
)
create trigger Score_Delete --备份删除--学名:级联删除
on Score
instead of delete
as
    declare @count int
    select @count = count(*) from deleted

    declare @i int
    set @i = 0
    while @i<@count
    begin
        declare @sno varchar(20)
        declare @cno varchar(20)
        declare @degree decimal(4,1)

        select top 1 @sno=sno,@cno=cno,@degree=degree from deleted
        where sno not in (select top (@i) sno from deleted) or cno not in(select top (@i) cno from deleted) 

        begin tran---------------------------------------------------

        insert into Scorebak values(@sno,@cno,@degree,getdate())

        delete from score where [email protected] and cno=@cno
        if @@ERROR>0-------------------------------------------------
        begin
            rollback tran
        end
        else---------------------------------------------------------
        begin
            commit tran----------------------------------------------
        end        

        set @[email protected]+1
    end
go
select *from Scorebak
select *from Score
delete from Score where Cno=‘3-245‘
时间: 2024-10-13 09:46:12

数据库--事务:级联删除(学生教师信息表)为例的相关文章

2014-11-9------- 设有一数据库,包括四个表:学生表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)。

一.            设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1-2的表(一)~表(四)所示.用SQL语句创建四个表并完成相关题目. 表1-1数据库的表结构 表(一)Student (学生表) 属性名 数据类型 可否为空 含 义 Sno Char(3) 否 学号(主码) Sname Char(8) 否 学生姓名 Ssex Char(2) 否

设有一数据库,包括四个表:学生表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)。四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1-2的表(一)~表(四)所示。用SQL语句创建四个表并完成相关题目。

表(一)Student (学生表) -- Create table create table STUDENT ( sno VARCHAR2(3) not null, sname VARCHAR2(8) not null, ssex VARCHAR2(2) not null, sbirthday DATE, class VARCHAR2(5) ) tablespace USERS pctfree 10 initrans 1 maxtrans 255; -- Add comments to the

数据库视图--学生教师信息表为例

--视图,视图就是一个虚拟的表,只能查询,不能修改!只能用作查询! select *from View_1 --显示101这个学生的学生sno,sname,cno,degree create view view 2 as select Student.Sno,sname,cno,DEGREE from Student join Score on Student.Sno=Score.Sno go select Student.Sno,sname,cno,DEGREE from Student jo

学生表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)

学生成绩信息表

1.查询 1990 年出生的学生名单 SELECT *FROM student WHERE year(sage) =1990; 原文地址:https://www.cnblogs.com/zunfengliu/p/12199143.html

MySQL外键及级联删除 &amp;&amp; 表的存储引擎与创建索引 &amp;&amp; 删除数据库和表

Messages表: mysql>create table Messages( ->message_id int auto_increment primary key, ->user_name varchar(50) not null, ->author_id int not null, ->body text, ->forum_id int not null); Forums表: mysql>create table Forums( ->forum_id

mysql级联删除更新

首先,目前在产品环境可用的MySQL版本(指4.0.x和4.1.x)中,只有InnoDB引擎才允许使用外键,所以,我们的数据表必须使用InnoDB引擎. 下面,我们先创建以下测试用数据库表: CREATE TABLE `roottb` (   `id` INT(11) UNSIGNED AUTO_INCREMENT NOT NULL,   `data` VARCHAR(100) NOT NULL DEFAULT '',   PRIMARY KEY (`id`) ) TYPE=InnoDB; CR

校园学生消费信息管理系统(C++)

本人第一次写博客,也不知道该怎么写,只能按着自己能想到的思路来分享一下自己做的东西. 这个程序其实是我在大一下学期c++要求写的课程设计,奈何那时懂的不多,加上不好好学习,没能完整实现里面要求的功能.现在回过头来写,实在有不少感慨.这个课程设计要求编写代码实现校园学生消费信息记录,实现最基本的删除.修改.查询等功能,后来我添加了将信息保存到文件的功能. 说一下实现这个系统的思路吧.结构体是一个很好用的数据结构,将不同基本数据类型任意结合,是存储学生基本信息的最好结构.那么怎么对这个结构体进行管理

EF级联删除

引言     在主表中指定Key,子表中指定Required后,并不会在数据库中生成级联删除的外键.那怎么才能使EF在数据中生成级联删除的外键? SQLServer数据库中级联删除功能配置界面: 上图中显示只用[required]特性后生成的外键没有级联删除动作.   看似正确的解决方案.(治标的处理方式) 版本:EF6.0.1 RC 一对多场景,在子对象映射中开启级联删除情况下,删除父对象将自动删除其下所有子对象,需要注意一些事项:  √ 需要保证DbContext中已经加载了该父对象的所有子