




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、存储过程和触发器第1页,共69页,2022年,5月20日,16点9分,星期二本章重点存储过程的概念、分类存储过程的创建、执行触发器的概念、分类触发器的创建、触发DELETED与INSERTED表第2页,共69页,2022年,5月20日,16点9分,星期二2022/9/162本章难点有参存储过程的创建、执行触发器的触发时机DELETED与INSERTED表第3页,共69页,2022年,5月20日,16点9分,星期二2022/9/16310.1 存储过程的概念1011 基本概念 存储过程是一组编译在单个执行计划中的Transact-SQL语句,将一些固定的操作集中起来交给SQL Server数据库
2、服务器完成,以实现某个任务。 1012 存储过程的优点(1)与其他应用程序共享应用程序逻辑,因而确保了数据访问和修改的一致性。(2)防止数据库中表的细节暴露给用户。(3)提供安全机制。(4)改进性能。(5)减少网络流量。第4页,共69页,2022年,5月20日,16点9分,星期二2022/9/1641013 存储过程的类型存储过程分为三类:系统提供的存储过程 系统提供的存储过程系统存储过程的名字都以“sp_”为前缀例:sp_bindefault ,sp_bindrule ,sp_help , sp_helpdb, sp_helpindex 等用户定义的存储过程 用户定义的存储过程是由用户为完成
3、某一特定功能而编写的存储过程。存储在创建时的数据库中。 扩展存储过程: 扩展存储过程是用来调用操作系统提供的功能。第5页,共69页,2022年,5月20日,16点9分,星期二2022/9/165系统存储过程说明sp_databases列出服务器上的所有数据库。sp_helpdb报告有关指定数据库或所有数据库的信息sp_renamedb更改数据库的名称sp_tables返回当前环境下可查询的对象的列表sp_columns回某个表列的信息sp_help查看某个表的所有信息sp_helpconstraint查看某个表的约束sp_helpindex查看某个表的索引sp_stored_procedure
4、s列出当前环境中的所有存储过程。sp_password添加或修改登录帐户的密码。sp_helptext显示默认值、未加密的存储过程、用户定义的存储过程、触发器或视图的实际文本。第6页,共69页,2022年,5月20日,16点9分,星期二2022/9/166EXEC sp_databasesEXEC sp_renamedb Northwind,Northwind1USE stuDBGOEXEC sp_tablesEXEC sp_columns stuInfo EXEC sp_help stuInfoEXEC sp_helpconstraint stuInfoEXEC sp_helpindex s
5、tuMarksEXEC sp_helptext view_stuInfo_stuMarks EXEC sp_stored_procedures 修改数据库的名称(单用户访问)列出当前系统中的数据库当前数据库中查询的对象的列表返回某个表列的信息查看表stuInfo的信息查看表stuInfo的约束查看表stuMarks的索引查看视图的语句文本查看当前数据库中的存储过程演示:常用的存储过程第7页,共69页,2022年,5月20日,16点9分,星期二2022/9/16710.2 建立和执行存储过程 简单存储过程类似于将一组SQL语句起个名字,然后就可以在需要时反复调用。复杂一些的则要有输入和输出参数。
6、1021 创建和执行简单存储过程创建存储过程的基本语法如下:CREATE PROC 存储过程名WITH ENCRYPTIONWITH RECOMPILEASSQL 语句其中各参数如下:WITH ENCRYPTION:对存储过程进行加密。WITH RECOMPILE:对存储过程重新编译。第8页,共69页,2022年,5月20日,16点9分,星期二2022/9/168【例10.1】创建一个无参数的存储过程,在SALES数据库中,创建存储过程xs,查询销售编号,商品名称,数量。CREATE PROCEDURE xsASSELECT 销售编号,商品名称,sell.数量 as 销售数量FROM good
7、s,sell WHERE goods.商品编号=sell.商品编号第9页,共69页,2022年,5月20日,16点9分,星期二2022/9/1691022 存储过程的执行执行存储过程的基本语法如下:EXECUTE 存储过程名同时EXECUTE命令除了可以执行存储过程外还可以执行存放Transact-SQL语句的字符串变量,或直接执行Transact-SQL语句字符串。此时EXECUTE语句的语法格式如下。EXECUTE(字符串变量| NSQL语句字符串+.n其中“字符串变量”是局部字符串变量名,最大值为服务器的可用内存。N SQL语句字符串的语句字符串是一个由SQL语句构成的字符串常量。如果包
8、含N,则该字符串将解释为nvarchar数据类型。EXEC xs第10页,共69页,2022年,5月20日,16点9分,星期二2022/9/1610【例10.2】建立一个批处理,查询相应表中的信息。DECLARE tab_name varchar(20)SET tab_name=xsEXECUTE(SELECT * FROM +tab_name)第11页,共69页,2022年,5月20日,16点9分,星期二2022/9/16111023 带输入参数的存储过程1建立存储过程 一个存储过程可以带一个或多个参数,输入参数是指由调用程序向存储过程传递的参数,它们在创建存储过程语句中被定义,在执行存储过
9、程中给出相应的参数值。声明带输入参数的存储过程的语法格式如下:CREATE PROCEDURE 存储过程名 参数名 数据类型=默认值 ,nWITH ENCRYPTIONWITH RECOMPILEASSQL 语句第12页,共69页,2022年,5月20日,16点9分,星期二2022/9/1612其中“参数名”和定义局部变量一样,必须以符号为前缀,要指定数据类型,多个参数定义要用“,”隔开。在执行存储过程时该参数将由指定的参数值来代替,如果执行时未提供该参数的参数值,则使用时须定义默认值(默认值可以是常量或空值null),否则将产生错误。第13页,共69页,2022年,5月20日,16点9分,星
10、期二2022/9/1613【例10.3】创建一个带输入参数的存储过程PROC_GOODS,查询指定员工所进商品信息CREATE PROC proc_goods 员工编号 char(6)=1001AsSelect 商品编号,商品名称,生产厂商,进货价,零售价,数量,进货时间 from goodsWhere 进货员工编号=员工编号 第14页,共69页,2022年,5月20日,16点9分,星期二2022/9/16142执行存储过程 在执行存储过程的语句中,有两种方式传递参数值,分别是使用参数名传递参数值和按参数位置传递参数值。使用参数名传递参数值,是通过语句“参数名=参数值”给参数传递值。当存储过程
11、含有多个输入参数时,对数值可以按任意顺序给出,对于允许空值和具有默认值的输入参数可以不给参数值,其语法格式为: EXECUTE 存储过程名 参数名=参数值 ,n按参数位置传递参数值,不显式地给出“参数名”,而是按照参数定义的顺序给出参数值。按位置传递参数时,也可以忽略允许为空值和有默认值的参数,但不能因此破坏输入参数的指定顺序。必要时使用关键字“DEFAULT”作为参数值的占位。EXEC proc_goods 员工编号 =1002或EXEC proc_goods 1002第15页,共69页,2022年,5月20日,16点9分,星期二2022/9/16151024 带输出参数的存储过程 如果我们
12、需要从存储过程中返回一个或多个值,可以通过在创建存储过程的语句中定义输出参数来实现,为了使用输出参数,需要在创建存储过程的命令中使用OUTPUT关键字。声明带输出参数的存储过程的语法格式如下:CREATE PROCEDURE 存储过程名参数名 数据类型VARYING=默认值 OUTPUT ,nWITH ENCRYPTIONWITH RECOMPILEASSQL 语句第16页,共69页,2022年,5月20日,16点9分,星期二2022/9/1616注意:OUTPUT变量必须在定义存储过程和使用该变量时都进行定义。定义时的参数名和调用时的变量名不一定相同,不过数据类型和参数的位置必须匹配。第17
13、页,共69页,2022年,5月20日,16点9分,星期二2022/9/1617【例10.5】创建一个带有输入和输出函数的存储过程proc_gno,查询指定厂商指定名称的商品对应的商品编号CREATE PROC proc_gno 商品名称 varchar(20),生产厂商 varchar(30),商品编号 int outputAsSelect 商品编号 =商品编号 From goodsWhere 商品名称 = 商品名称 and 生产厂商=生产厂商 第18页,共69页,2022年,5月20日,16点9分,星期二2022/9/1618执行存储过程Declare 商品编号 intExec proc_g
14、no 打印机,惠普公司,商品编号 output Print 该商品编号为:+cast(商品编号 as char(6)第19页,共69页,2022年,5月20日,16点9分,星期二2022/9/161910.3 存储过程的管理与维护1031 查看存储过程的定义信息 在SQL Server Management Studio的“对象资源管理器”中,可以在要查看信息的存储过程上单击鼠标右键,在快捷菜单中选择“属性”,弹出“存储过程属性”窗口. 也可以通过系统存储过程sp_helptext查看存储过程的定义;通过sp_help查看存储过程的参数;通过sp_depends查看存储过程的相关性。第20页,
15、共69页,2022年,5月20日,16点9分,星期二2022/9/1620【例10.7】在SQL Server Management Studio服务器中新建查询,使用系统存储过程,查看例10.5中所创建存储过程的定义、参数和相关性。EXECUTE sp_helptext proc_gnoEXECUTE sp_help proc_gnoEXECUTE sp_depends proc_gno第21页,共69页,2022年,5月20日,16点9分,星期二2022/9/16211032 存储过程的重编译 存储过程所采用的执行计划,只在编译时优化生成,以后便驻留在高速缓存中。当用户对数据库新增了索引或
16、其他影响数据库逻辑结构的更改后,已编译的存储过程执行计划可能会失去效率。通过对存储过程进行重新编译,可以重新优化存储过程的执行计划。SQL Server为用户提供了3种重新编译的方法。第22页,共69页,2022年,5月20日,16点9分,星期二2022/9/16221在创建存储过程时设定 在创建存储过程时,使用WITH RECOMPILE子句时SQL Server不将该存储过程的查询计划保存在缓存中,而是在每次运行时重新编译和优化,并创建新的执行计划。2在执行存储过程时设定 通过在执行存储过程时设定重新编译,可以让SQL Server在执行存储过程时重新编译该存储过程,这一次执行完成后,新的
17、执行计划又被保存在缓存中。这样用户就可以根据需要进行重新编译。EXEC 存储过程名 RECOMPILE3通过系统存储过程设定重编译 通过系统存储过程sp_recompile设定重新编译标记,使存储过程在下次运行时重新编译。其语法格式如下:EXEC sp_recompile 数据库对象第23页,共69页,2022年,5月20日,16点9分,星期二2022/9/16231033 修改和删除存储过程1修改存储过程 存储过程的修改是由ALTER语句来完成的,基本语法如下:ALTER PROCEDURE 存储过程名WITH ENCRYPTIONWITH RECOMPILEASSQL语句第24页,共69页
18、,2022年,5月20日,16点9分,星期二2022/9/1624【例10.7】 修改例10.1的存储过程,对其进行加密alter PROCEDURE xsWITH ENCRYPTIONASSELECT 销售编号,商品名称,sell.数量 as 销售数量FROM goods,sell WHERE goods.商品编号=sell.商品编号第25页,共69页,2022年,5月20日,16点9分,星期二2022/9/16252删除存储过程 存储过程的删除是通过DROP语句来实现的,在SQL Server Management Studio的“对象资源管理器”中也同样可以进行删除。命令方式删除存储过程
19、的方法也很简单.语法格式:DROP PROCEDURE 存储过程名【例10.8】删除例10.1中创建的存储过程alter PROCEDURE xs第26页,共69页,2022年,5月20日,16点9分,星期二2022/9/1626张三李四王五赵二王三宋二刘五插入删除触发器触发赵二退休 赵二员工表退休员工表触发器是在对表进行插入、更新或删除操作时自动执行的存储过程触发器通常用于强制业务规则触发器是一种高级约束,可以定义比用CHECK 约束更为复杂的约束 可执行复杂的SQL语句(if/while/case)可引用其它表中的列 触发器定义在特定的表上,与表相关自动触发执行不能直接调用是一个事务(可回
20、滚)第27页,共69页,2022年,5月20日,16点9分,星期二2022/9/1627张三开户1000元,李四开户1元 10.4 触发器的概念 1041 基本概念2、为什么需要触发器为什么需要触发器(TRIGGER)呢?典型的应用就是银行的取款机系统 帐户信息表bank 交易信息表transInfo 张三取钱200 问题:没有自动修改张三的余额最优的解决方案就是采用触发器:它是一种特殊的存储过程 也具备事务的功能 它能在多表之间执行特殊的业务规则 第28页,共69页,2022年,5月20日,16点9分,星期二2022/9/16281042 触发器的功能 SQL Server2005提供了两种
21、方法来保证数据的有效性和完整性:约束和触发器。 触发器的常用功能如下。(1)完成更复杂的数据约束:触发器可以实现比约束更为复杂的数据约束。(2)检查SQL所做的操作是否允许:触发器可以检查SQL所做的操作是否被允许。 第29页,共69页,2022年,5月20日,16点9分,星期二2022/9/1629(3)修改其他数据表里的数据:当一个SQL语句对数据表进行操作的时候,触发器可以根据SQL语句的操作情况来对另一个数据表进行操作。(4)调用更多的存储过程:约束是不能调用存储过程的,但触发器本身就是一种存储过程,而存储过程是可以嵌套调用的,所以触发器也可能调用一个或多个存储过程。(5)返回自定义的
22、错误信息:约束只能通过标准的系统错误信息来传递错误信息,如果应用程序要求使用自定义信息和较为复杂的错误处理,则必须使用触发器。(6)更改原本要操作的SQL语句:触发器可以修改原本要操作的SQL语句。(7)防止数据表结构更改或数据表被删除:为了保护已经建立好的数据表,触发器可以在接收到以DROP或ALTER开头的语句后,不对数据表的结构做任何操作。第30页,共69页,2022年,5月20日,16点9分,星期二2022/9/16301043 触发器的类型1. DML触发器 DML触发器是当数据库服务器中发生数据操纵语言DML事件时执行的特殊存储过程,如INSERT、UPDATE等。2. DDL触发
23、器 DDL触发器是当数据库服务器中发生数据定义语言DDL事件时执行的特殊存储过程,如CREATE、ALTER等。第31页,共69页,2022年,5月20日,16点9分,星期二2022/9/163110.5 创建和应用DML触发器1051 DML触发器的类型1AFTER触发器 这类触发器是在记录已经改变之后,才会被激活执行,它主要是用于记录变更后的处理或检查,一旦发现错误,也可以用ROLLBACK TRANSACTION语句来回滚本次的操作。2INSTEAD OF触发器 这类触发器一般是用来取代原本要进行的操作,在记录变更之前发生的,它并不去执行原来的SQL语句里的操作,而是去执行触发器本身所定
24、义的操作。第32页,共69页,2022年,5月20日,16点9分,星期二2022/9/16321052 DML触发器的工作原理 在SQL Server2005中,为每个DML触发器定义了两个特殊的表,一个是Inserted表,一个是Deleted表。 修改操作inserted表deleted表增加(INSERT)记录存放新增的记录-删除(DELETE)记录-存放被删除的记录修改(UPDATE)记录存放更新后的记录存放更新前的记录第33页,共69页,2022年,5月20日,16点9分,星期二2022/9/1633 Inserted表里存放的是更新前的记录:对于插入记录操作来说,Inserted表
25、里存储的是要插入的数据;对于更新记录的操作来说,Inserted表里存放的是要更新的记录。 Deleted表里存放的是更新后的记录:对于更新记录操作来说,Deleted表里存放的是更新前的记录;对于删除记录操作来说,Deleted表里存储的是被删除的旧记录。第34页,共69页,2022年,5月20日,16点9分,星期二2022/9/16341053 创建DML触发器的注意事项(1)CREATE TRIGGER语句必须是批处理中的第一个语句,该语句后面的所有语句都被解释为CREATE TRIGGER语句定义的一部分。(2)创建DML触发器的权限默认分配给表的所有者,且不能将该权限转授给其他用户。
26、(3)DML可以引用当前数据库以外的对象,但只能在当前数据库中创建DML触发器。(4)不能对系统表或临时表创建DML触发器 (5)对于含有DELETE或UPDATE操作定义的外键表,不能定义INSTEAD OF触发器。第35页,共69页,2022年,5月20日,16点9分,星期二2022/9/16351053 创建触发器CREATE TRIGGER 触发器名ON 表|视图WITH ENCRYPTIONFOR|AFTER|INSTEAD OF INSERT,UPDATE,DELETENOT FOR REPLICATIONASIF UPDATE(列名)AND|OR UPDATE(列名)nSQL语句
27、第36页,共69页,2022年,5月20日,16点9分,星期二2022/9/1636(1)WITH ENCRYPTION。加密CREATE TRIGGER语句文本的条目。(2)FOR|AFTER。FOR与AFTER同义,指定触发器只有在触发器SQL语句中指定的所有操作都已成功后才激发。所有的引用级联操作和约束检查也必须成功完成后,才能执行此触发器,即为后触发。(3)INSTEAD OF。指定执行触发器而不执行造成触发的SQL语句,从而替代造成触发的语句。在表或视图上,每个INSERT、UPDATE或DELETE语句只能定义一个INSTEAD OF触发器,即替代触发。(4)INSERT,UPDA
28、TE,DELETE。是指定在表上执行哪些数据修改语句时将激活触发器的关键字。必须至少指定一个选项。在触发器定义中允许使用任意顺序组合的这些关键字。当进行触发条件的操作时(INSERT、UPDATE或DELETE),将执行SQL语句中指定的触发器操作。第37页,共69页,2022年,5月20日,16点9分,星期二2022/9/1637(5)NOT FOR REPLICATION。表示当复制进程更改触发器所涉及的表时,不要执行该触发器。(6)IF UPDATE(列名)。测试在指定的列上进行的INSERT或UPDATE操作,不能用于DELETE操作,可以指定多列。因为已经在ON子句中指定了表名,所以
29、在IF UPDATE子句中的列名前不要包含表名。若要测试在多个列上进行的INSERT或UPDATE操作,要分别单独地指定UPDATE(列名)子句。在INSERT操作中IF UPDATE将返回TRUE值。第38页,共69页,2022年,5月20日,16点9分,星期二2022/9/16381UPDATE触发器【例10.12】创建一个触发器,当有人试图更新SALES数据库中goods表的商品编号或进货员工编号时,利用触发器产生提示信息.并取消修改操作.-创建触发器CREATE TRIGGER update_trig ON goods FOR updateASIF UPDATE(商品编号) OR UP
30、DATE(进货员工编号)BEGIN RAISERROR(商品编号或进货员工编号不能进行修改!,7,2) ROLLBACK TRANSACTIONEND第39页,共69页,2022年,5月20日,16点9分,星期二2022/9/1639-测试触发器Update goodsSet 商品编号=120Where 数量=8第40页,共69页,2022年,5月20日,16点9分,星期二2022/9/16402INSERT触发器【例10.11】创建一个AFTER INSERT 触发器,当在SALES数据库的employees表中插入一条新员工记录时,如果不是”采购部”,”财务部”,”销售部”或”库存部”的员
31、工,则撤消该插入操作,并返回出错消息.-创建触发器第41页,共69页,2022年,5月20日,16点9分,星期二2022/9/1641CREATE TRIGGER insert_trig ON employees FOR insertASDeclare depart varchar(16)Select depart =employees.部门 from employees,insertedWhere employees.编号=inserted.编号If depart 采购部 or depart 财务部or depart销售部or depart 库存部 BEGINROLLBACK TRANSAC
32、TIONRAISERROR(不能插入非本公司设定部门的员工信息!,16,10)END第42页,共69页,2022年,5月20日,16点9分,星期二2022/9/1642-测试触发器Insert employess(编号,姓名,性别,部门,电话,地址)Values(1511,杨过,人事部,1201200,.南昌市广场南路156号)第43页,共69页,2022年,5月20日,16点9分,星期二2022/9/16433DELETE触发器【例10.13】在sales数据库的emplyoees表和sell表之间具有逻辑上的主外键关系,要求当删除或更新员工记录的时候,要触发触发器update_delete
33、_trig,在sell表中也删除或更新相对应的记录行。- 创建触发器第44页,共69页,2022年,5月20日,16点9分,星期二2022/9/1644CREATE TRIGGER update_delete_trig ON employees FOR update,deleteASDeclare delcount intDeclare empid char(6)-更新If update(编号)BeginUpdate sellSet 售货员工编号=(select 编号 from inserted)Where 售货员工编号 in(select 编号 from deleted)End第45页,共6
34、9页,2022年,5月20日,16点9分,星期二2022/9/1645- 删除Select delcount=count(*) from deletedIf delcount0BeginSelect empid=编号 from deletedDelete from sell where 售货员工编号= empidEND第46页,共69页,2022年,5月20日,16点9分,星期二2022/9/16466触发器案例分析1(1)问题: 解决上述的银行取款问题:当向交易信息表(transInfo)中插入一条交易信息时,我们应自动更新对应帐户的余额。(2)分析:在交易信息表上创建INSERT触发器 从
35、inserted临时表中获取插入的数据行根据交易类型(transType)字段的值是存入/支取, 增加/减少对应帐户的余额。第47页,共69页,2022年,5月20日,16点9分,星期二2022/9/1647CREATE TRIGGER trig_transInfo ON transInfo FOR INSERT AS DECLARE type char(4),outMoney MONEY DECLARE myCardID char(10),balance MONEY SELECT type=transType,outMoney=transMoney, myCardID=cardID FROM
36、 inserted IF (type=支取) UPDATE bank SET currentMoney=currentMoney-outMoney WHERE cardID=myCardID ELSE UPDATE bank SET currentMoney=currentMoney+outMoney WHERE cardID=myCardID .GO 从inserted表中获取交易类型、交易金额等根据交易类型,减少或增加对应卡号的余额 (3)实现方法第48页,共69页,2022年,5月20日,16点9分,星期二2022/9/16486触发器案例分析2 如果你是图书管数据库管理员,现在有Stu
37、dent学生表和BorrowRecord学生借书记录表 ,现有两需求要你去实现其功能:(1)、如果我更改了学生的学号,我希望他的借书记录仍然与这个学生相关(也就是同时更改借书记录表的学号) (2) 、如果该学生已经毕业,我希望删除他的学号的同时,也删除它的借书记录。 第49页,共69页,2022年,5月20日,16点9分,星期二2022/9/1649分析如何实现功能1:A 在哪张表中创建触发器 ? STUDENTB 通过什么事件触发? UPDATEC 事件触发后所要做的事情? if Update (StudentID )BEIGINUpdate BorrowRecord Set Student
38、ID=i.StudentID From BorrowRecord br , Deleted d ,Inserted i END第50页,共69页,2022年,5月20日,16点9分,星期二2022/9/1650分析如何实现功能2:A 在哪张表中创建触发器 ? STUDENTB 通过什么事件触发? deleteC 事件触发后所要做的事情? Delete BorrowRecord From BorrowRecord br , Delted d Where br.StudentID=d.StudentID 第51页,共69页,2022年,5月20日,16点9分,星期二2022/9/16515INST
39、EAD OF触发器 如果视图的数据来自于多个基表,则必须使用INSTAED OF触发器支持引用表中的数据的插入、更新和删除操作。如果视图的列为以下几种情况之一:基表中的计算列基表中的标识列具有timestamp数据类型的基表列该视图的INSERT语句必须为这些列指定值,INSTEAD OF触发器在构成将值插入基表的INSERT语句时,会忽略指定的值。第52页,共69页,2022年,5月20日,16点9分,星期二2022/9/165210.6 触发器的管理与维护1061 查看触发器的定义信息1062 修改和删除触发器1修改触发器ALTER TRIGGER 触发器名ON 表|视图WITH ENCR
40、YPTIONFOR|AFTER|INSTEAD OF INSERT,UPDATE,DELETENOT FOR REPLICATIONASIF UPDATE(列名)AND|OR UPDATE(列名)nSQL语句第53页,共69页,2022年,5月20日,16点9分,星期二2022/9/1653【例10.13】修改例10.12的触发器,对其进行加密.ALTER TRIGGER update_trig ON goodsWITH ENCRYPTION FOR updateASIF UPDATE(商品编号) OR UPDATE(进货员工编号)BEGIN RAISERROR(商品编号或进货员工编号不能进行
41、修改!,7,2) ROLLBACK TRANSACTIONEND第54页,共69页,2022年,5月20日,16点9分,星期二2022/9/16542删除触发器使用DROP TRIGGER 命令,即可删除触发器。【例10.13】删除例10.12创建的触发器DROP TRIGGER update_trig第55页,共69页,2022年,5月20日,16点9分,星期二2022/9/16551063 禁止或启用触发器 使用以下语句可以禁用或启用指定表上的某些触发器或所有触发器。禁止和启用触发器的语法格式如下。ALTER TABLE 表名ENABLE|DISABLE TRIGGERALL|触发器名,n
42、第56页,共69页,2022年,5月20日,16点9分,星期二2022/9/1656【例10.14】禁用或启用例10.11创建的触发器-禁用触发器ALTER TABLE employeesDISABLE TRIGGER insert_trig-启用触发器ALTER TABLE employeesENABLE TRIGGER insert_trig第57页,共69页,2022年,5月20日,16点9分,星期二2022/9/165710.7 DDL触发器 一般来说,在以下几种情况下可以使用DDL触发器。(1)防止数据库架构进行某些修改。(2)防止数据库或数据表被误操作而删除。(3)希望数据库发生某
43、种情况以响应数据库架构中的更改。(4)要记录数据库架构的更改或事件。仅在运行DDL触发器的DDL语句后,DDL触发器才会激发。DDL触发器无法作为INSTEAD OF触发器而使用。第58页,共69页,2022年,5月20日,16点9分,星期二2022/9/16581071 创建DDL触发器 创建DDL触发器的语法格式如下:CREATE TRIGGER 触发器名ON 服务器|数据库WITH ENCRYPTIONFOR|AFTER DDL语句名称ASSQL语句第59页,共69页,2022年,5月20日,16点9分,星期二2022/9/1659【例10.16】建立用于保护数据库sales中的数据表不
44、被删除的触发器。CREATE TRIGGER dis_drop_table ON sales FOR DROP_TABLEASBEGIN RAISERROR(对不起,sales数据库中的表不能删除,16,10)END第60页,共69页,2022年,5月20日,16点9分,星期二2022/9/16601072 查看和修改DDL触发器(1)作用在当前SQL Server服务器上的DDL触发器所在的位置,选择所在的SQL Server服务器上,定位到“服务器对象”中的“触发器”,在“摘要”对话框中就可以看到所有作用在当前SQL Server服务器上的DDL触发器。(2)作用在当前数据库中的DDL触发器所在位置在SQL Server服务器上,通过“数据库”选择所在的数据库,然后定位到“可编程性”中的“数据库触发器”,在摘要对话框中就可以看到所有的当前数据库中的DDL触发器。第61页,共69页,2022年,5月20日,16点9分,星期二2022/9/166110.8 事务1081 基本概念 事务是作为单个逻辑工作单元执行的一系列操作。这一系列操作或者都被执行,或者都不被执行。第62页,共69页,2022年,5月20日,16点9分,星期二2022/9/1662 事务作为一个逻辑工作单元有4个属性,称为ACID(原子性、一致性、隔离性和
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年河湖整治战略合作协议
- 2025年综合商业广场策划与管理服务协议
- 2025年购地建厂协议示范文本
- 2025年河道疏浚工程合作协议书样本
- 事业单位房屋管理风险防控体系构建
- 跨境电商的跨文化沟通与国际团队管理
- 精准消费数据与资金筹集的互动关系
- 引导资本流向消费领域的有效路径
- 商业空间节假日旅游市场策略规划基础知识点归纳
- 深化文化体制机制改革的面临的问题、机遇与挑战
- 用户侧储能电站项目可行性研究报告(范文)
- 2024-2025学年沪教版(五四学制)(2024)初中英语六年级下册(全册)知识点归纳
- 2025年绵阳富乐中学小升初数学、语文入学考试题
- 知识图谱与大语言模型在教育领域的应用综述
- 考研项目合同协议模板
- 砼搅拌站安装、拆卸工程安全技术交底
- 2025广西桂盛金融信息科技服务有限公司专业技术人员常态化招聘笔试参考题库附带答案详解
- 工业自动化设备维护与保养手册
- 河南省五年中考(2020-2024)化学真题试卷含答案
- 音乐教学培训创业计划
- “岗课赛证”融合下的高职软件技术专业课程体系构建探索
评论
0/150
提交评论