数据库 触发器基础用法(备份删除行+删除多行)

--触发器:触发器就是一种特殊的存储过程,只用来“增删改”
--触发器特殊的地方就在于,触发器是通过对数据库表的操作,来引发
--存储过程是通过人为exec来执行

select *from Student
create trigger Student_Insert --创建触发器
on Student --指定触发器所在的表,还可以写成after,for和after都是在操作后执行
for Insert --当执行insert操作的时候自动执行触发器
as
    update Student set sbirthday=‘1980-08-20‘where Sno=110
go
insert into Student values(110,‘王二小‘,‘男‘,‘1979-09-02‘,95033)

create trigger Student_Delete --创建触发器
on Student
instead of delete --替换某个操作,用触发器的过程来替换删除的操作,不在能够删除student表
as
    update Student set sbirthday=‘1980-08-20‘where Sno=110
go
delete from Student

drop trigger Student_Delete --删除触发器

create trigger Student_Delete2  --删除某一条数据
on Student
instead of delete
as
    delete from Score where Sno=105
    delete from Student where Sno=105
go
delete from Student
delete from Course where Cno=‘3-105‘

create trigger Course_Delete --course表中的cno有主外键关系--deleted触发器中的临时表
on Course
instead of delete
as
    select *from deleted --deleted相当于虚拟的临时表,里面存着你要删除的那些数据
go
delete from Course where Cno=‘3-105‘

drop trigger Course_Delete --删除触发器

--一次性删除Course表数据,实用触发器替换删除操作,线删除外键表相关数据,再删除主键表course表相关数据

create trigger Course_Delete2--只能删除一行,要是删除多行由于赋值的问题遍历后只把最后一个数赋值执行,所以只删除了最后一行
on Course
instead of delete
as
        declare @cno varchar(20)
        select @cno = cno
        delete from score where cno=@cno
        delete from course where cno=@cno
go

create trigger Course_Delete4--一条一条删除多行
on Course
instead of delete
as
        delete from score where cno in (selete cno from deleted)
        delete from course where cno in (selete cno from deleted)
go

create trigger Course_Delete3
on Course
instead of delete
as
    declare @count int
    select @coount = count(*) from deleted
    if @count==1 --执行删除一行的操作
    begin
        declare @cno varchar(20)
        select @cno = cno
        delete from score where cno=@cno
        delete from course where cno=@cno
    end
    if @count>1 --循环遍历每一行,分别执行删除一行的操作
    begin
        delete from score where cno in (selete cno from deleted)
        delete from course where cno in (selete cno from deleted)
    end
go

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 --循环遍历deleted临时表的数据,然后转移到Scorebak
    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)
        --or degree not in (select top(@i) degree from score)--两条就能确定时,不用全写,这道题不用写degree not in,分页查询每一行

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

        delete from score where [email protected] and cno=@cno

        set @[email protected]+1
    end
go
select *from Scorebak
select *from Score
delete from Score where Cno=‘3-105‘
时间: 2024-09-28 15:39:20

数据库 触发器基础用法(备份删除行+删除多行)的相关文章

Cocos数据篇[3.4](6) ——SQLite3数据库基础用法

[唠叨] 在Cocos2d-x中,简单数据存储,可以使用UserDefault.那么如何存储大量,不规则的数据?我们可以使用 SQLite数据库 存储数据.SQLite 是使用非常广泛的 嵌入式数据库 ,它有小巧 .高效.跨平台.开源免费和易操作的特点.所以大量的被用于手机.PDA.MP3播放器.以及机顶盒设备. SQLite数据库是使用C语言来编写的,因此在Cocos2d-x使用SQLite也是得心应手. 本文介绍一下SQLite3数据库的基础用法:增删改查. PS:另外对于SQLite的可视

Cocos2d-x数据篇06:SQLite3数据库基础用法

尊重原创:http://cn.cocos2d-x.org/tutorial/show?id=2430 [前言] 在Cocos2d-x中,简单数据存储,可以使用UserDefault.那么如何存储大量,不规则的数据?我们可以使用 SQLite数据库 存储数据.SQLite 是使用非常广泛的 嵌入式数据库 ,它有小巧 .高效.跨平台.开源免费和易操作的特点.所以大量的被用于手机.PDA.MP3播放器.以及机顶盒设备. SQLite数据库是使用C语言来编写的,因此在Cocos2d-x使用SQLite也

mysql基础篇 - 数据库及表的修改和删除

基础篇 - 数据库及表的修改和删除 修改和删除 一.实验简介 本节实验中,我们将学习并实践如何对数据库的内容做修改,删除,重命名等操作. 二.实验准备 在正式开始本实验内容之前,需要先下载相关代码. 该代码可以新建两个数据库,分别名为 test_01 和mysql_shiyan ,并在 mysql_shiyan 数据库中建 4 个表(department,employee,project,table_1),然后向其中插入数据. 具体操作如下,首先输入命令进入 /home/shiyanlou/De

数据库备份定期删除程序的开发。

第一.最近客户的服务器数据库备份每天都在进行,随着数据量的不断的增加,备份也在不断的进行变大. 第二.于是一些问题就出现了客户的服务器的磁盘的空间有限,定期数据库备份文件太大而导致无法进行保存问题. 第三.从而导致了服务器宕机以及服务器中一些应用程序以及网站无法使用等等. 第四.所以需要进行解决这个问题就需要开发一个应用程序进行定期的删除数据库的备份以及其他的文件. 第五.在进行删除数据库的备份的时候需要注意是的删除设置的几天前的数据库备份,其他最新的数据库的备份的文件不要删除. 第六:可以应用

10-30C#数据库基础--(备份和还原、分离和附加数据库)、语句查询操作

一.数据库是一个大容量的存储数据的仓库,为了保证数据完整性,防止一些数据的意外丢失等情况,需要对数据进行备份和还原. 备份数据不影响数据库的正常运行. 1.备份.还原数据库 首先对数据库进行备份,操作步骤如下: 1)把鼠标放在在选择想要备份的数据库,右击“任务”--“备份”: 2)单击“确定”,弹出“备份数据库”的窗口,在备份类型下面,选择“仅复制备份”,选择“备份过期时间”,添加“目标备份到的位置”,单击“确定”. 3)弹出对话框:提示备份已成功执行. 还原: 备份完成后,删除该数据,利用还原

数据库开发基础-教案-3-认识数据库备份和事务日志备份

认识数据库备份和事务日志备份 数据库备份与日志备份是数据库维护的日常工作,备份的目的是在于当数据库出现故障或者遭到破坏时可以根据备份的数据库及事务日志文件还原到最近的时间点将损失降到最低点. 数据库备份 数据库备份可以手动备份和语句备份 一.手动备份数据库 1.鼠标右键选择你要进行备份的数据库-任务-备份 可以在常规选项页面你可以选择备份类型是进行完整数据库备份还是差异数据库备份 2.点击添加选项,选择数据库文件的存放路径 注意文件名记得加后缀.bak,便于恢复时的查找 数据库还原 右键数据库-

数据库基础(备份、还原、分离、附加以及语句)

认识数据库备份和事务日志备份 数据库备份与日志备份是数据库维护的日常工作,备份的目的是在于当数据库出现故障或者遭到破坏时可以根据备份的数据库及事务日志文件还原到最近的时间点将损失降到最低点. 数据库备份 数据库备份可以手动备份和语句备份 一.手动备份数据库 1.鼠标右键选择你要进行备份的数据库-任务-备份 可以在常规选项页面你可以选择备份类型是进行完整数据库备份还是差异数据库备份 2.点击添加选项,选择数据库文件的存放路径 注意文件名记得加后缀.bak,便于恢复时的查找 数据库还原 右键数据库-

SQL SERVER 设置自动备份和删除旧的数据库文件

打开SQL SERVER MANAGEMENT STUDIO,启动SQL SERVER代理服务(注意在“控制面板-管理工具-服务”中设置SQL SERVER AGENT的启动类型为自动).启动后点击“作业-新建作业”,弹出一个作业属性的窗口,在“常规”栏目里可以先给作业命名,假设为“备份数据”. 一.备份数据的第一个步骤--“备份当日数据” 在“步骤”栏目里新建一个步骤名为“备份当日数据”,类型为“T-SQL”,数据库选择你要操作的数据库(假设为“TESTDB”),命令窗口里填入备份的SQL语句

Oracle数据库——触发器的创建与应用

一.涉及内容 1.理解触发器的概念.作用和类型. 2.练习触发器的创建和使用. 二.具体操作 (实验) 1.利用触发器对在scott.emp表上执行的DML操作进行安全性检查,只有scott用户登录数据库后才能向该表中执行DML操作.(第1题中,user是系统函数,返回当前用户.字符串中使用两个单引号表示一个单引号.) 要求:分别以system用户和scott用户对emp 表执行DML操作,试验触发器的运行效果. (1)在scott用户下创建触发器 语句: create or replace t