版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第五章第五章 存储过程、触发器和数据完整性存储过程、触发器和数据完整性( SQLSQL的高级功能)的高级功能)l存储过程存储过程l触发器触发器l数据完整性数据完整性任务任务l掌握存储过程,触发器的概念和使用方法;掌握存储过程,触发器的概念和使用方法;l掌握运用掌握运用T-SQL编写基本的存储过程、触发器。编写基本的存储过程、触发器。( )l理解存储过程、触发器的用途;理解存储过程、触发器的用途;l进一步理解数据完整性的含义(进一步理解数据完整性的含义()l了解数据完整性的规则、默认值等使用。了解数据完整性的规则、默认值等使用。 5.1 存储过程存储过程l5.1.1 存储过程的基本概念存储过程的
2、基本概念l5.1.2 存储过程的优点存储过程的优点l5.1.3 存储过程的分类存储过程的分类l5.1.4 存储过程的使用方法存储过程的使用方法5.1 存储过程存储过程l传统的数据库结构传统的数据库结构l管理数据等共享资源,管理数据等共享资源,l所有的应用程序都在用户端,都与用户实际运行的应所有的应用程序都在用户端,都与用户实际运行的应用程序捆绑在一起;用程序捆绑在一起;l客户客户/服务器数据库服务器数据库l管理数据等共享资源管理数据等共享资源l承担一些应用逻辑,完成来自客户端的一些处理请求,承担一些应用逻辑,完成来自客户端的一些处理请求,在数据库中还可以存放程序,即存储过程。在数据库中还可以存
3、放程序,即存储过程。5.1.1 存储过程的基本概念存储过程的基本概念l是什么是什么:是事先编好的、存储在服务器端的数据:是事先编好的、存储在服务器端的数据库中的程序库中的程序(预编译的(预编译的SQL集合),这些程序用集合),这些程序用来完成对数据库的指定操作。来完成对数据库的指定操作。l怎么使用怎么使用:这些程序可以由应用程序的调用启动,:这些程序可以由应用程序的调用启动,或由数据完整性规则和触发器调用。或由数据完整性规则和触发器调用。l怎么理解怎么理解:存储过程是用户可以简单地将其作为:存储过程是用户可以简单地将其作为一个函数来调用,无须重复执行存储过程的一个函数来调用,无须重复执行存储过
4、程的SQL语句。它包含一组经常执行的、逻辑完整的语句。它包含一组经常执行的、逻辑完整的SQL语句。语句。5.1.2 存储过程的优存储过程的优点点l减轻程序编写的工作量减轻程序编写的工作量:可以在各个程序中反复调用定:可以在各个程序中反复调用定义好的存储过程。义好的存储过程。l存储过程能够实现较快的执行速度存储过程能够实现较快的执行速度 :因为存储过程是预因为存储过程是预编译的,而批处理编译的,而批处理的的T- SQL 语句在每次运行时都要进语句在每次运行时都要进行编译和优化,因此速度相对要慢一些。行编译和优化,因此速度相对要慢一些。l 存储过程能够减少网络流量存储过程能够减少网络流量 : 对于
5、同一个针对数据库对于同一个针对数据库对象的操作,所涉及到的对象的操作,所涉及到的 T-SQL 语句被组织成一存储语句被组织成一存储过程,当在客户端调用该存储过程时,过程,当在客户端调用该存储过程时,网络中传送的只网络中传送的只是该调用语句是该调用语句 ,降低网络负载,降低网络负载 。l存储过程增加安全机制:存储过程增加安全机制:系统管理员通过对执行某一存系统管理员通过对执行某一存储过程的权限进行限制,从而能够实现对相应的数据访储过程的权限进行限制,从而能够实现对相应的数据访问权限的限制,避免非授权用户对数据的访问,保证数问权限的限制,避免非授权用户对数据的访问,保证数据的安全。据的安全。客户端
6、应用客户端应用(不使用存储过程)(不使用存储过程)客户端应用客户端应用(使用存储过程)(使用存储过程).Start transaction.INSERT dataUPDATE dataDELETE dataEnd transaction.Start transaction.Call Stored procedureEnd transaction.DBMSServerDBMSServerProcedure:INSERT dataUPDATE dataDELETE data(a)(b) 不使用存储不使用存储过程时,所有的过程时,所有的数据处理都在客数据处理都在客户端完成;而使户端完成;而使用存储过
7、程时,用存储过程时,可以使数据处理可以使数据处理在服务器端完成。在服务器端完成。5.1.3 储存过程的分类储存过程的分类l系统存储过程系统存储过程lSQL Server本身提供了一些存储过程,用于管理本身提供了一些存储过程,用于管理SQL Server和显示有关数据库和用户的信息,我们和显示有关数据库和用户的信息,我们称之为系统存储过程。系统存储过程都以称之为系统存储过程。系统存储过程都以“sp_” 开头,存储在开头,存储在master数据库中。数据库中。l用户存储过程用户存储过程l用户也可以编写自己的存储过程,并把它存放在数用户也可以编写自己的存储过程,并把它存放在数据库中。这样安排的主要目
8、的就是要充分发挥数据据库中。这样安排的主要目的就是要充分发挥数据库服务器的功能,尽量减少网络库服务器的功能,尽量减少网络上的堵塞。上的堵塞。5.1.4 存储过程的使用方法存储过程的使用方法l创建存储过程创建存储过程l执行存储过程执行存储过程l修改存储过程修改存储过程l删除存储过程删除存储过程创建存储过程创建存储过程CREATE PROCedure procedure_name ; number parameter data_type = default , AS sql_statement s s procedure_name:给出存储过程名;:给出存储过程名;s s number:对同名的存
9、储过程指定一个序号;:对同名的存储过程指定一个序号;s s parameter:给出参数名;:给出参数名;s s data_type:指出参数的数据类型;:指出参数的数据类型;s s = default:给出参数的默认值;:给出参数的默认值;s s sql_statement:存储过程所要执行的:存储过程所要执行的SQL语句,它可以语句,它可以是一组是一组SQL语句,可以包含流程控制语句等。语句,可以包含流程控制语句等。例:创建一个最简单的存储过程(无参数调用):例:创建一个最简单的存储过程(无参数调用):CREATE PROCedure sp_getemp;1AS SELECT * FROM
10、 职工说明:创建存储过程说明:创建存储过程sp_getemp;1,要求查询职工信息,要求查询职工信息例:带参数的存储过程:例:带参数的存储过程:CREATE PROCedure sp_getemp;2(salary int)AS SELECT * FROM 职工 WHERE 工资 salary说明:创建存储过程说明:创建存储过程sp_getemp;2,要求查询工资值大,要求查询工资值大于给定值的职工信息于给定值的职工信息说明:说明:存储过程一般用来完成数据查询和数据处理操作,所以在存储过程中不可以使用创建数据库对象的语句,即在存储过程中一般不能含有以下语句:CREATE TABLECREATE
11、 VIEWCREATE DEFAULTCREATE RULECREATE TRIGGERCREATE PROCEDURE执行存储过程执行存储过程EXECute=|例:执行带参数的例:执行带参数的sp_getemp;2存储过程存储过程Execute sp_getemp;2 1240 说明:执行存储过程说明:执行存储过程sp_getemp;2,要求查询工资值大,要求查询工资值大于于1240元的职工信息元的职工信息存储过程的返回值和状态信息存储过程的返回值和状态信息 无论什么时候执行存储过程,总要返回一个结果码,用以指示存储过程的执行状态。如果存储过程执行成功,返回的结果码是0;如果存储过程执行失败
12、,返回的结果码一般是一个负数,它和失败的类型有关。我们在创建存储过程时,也可以定义自己的状态码和错误信息。常用的存储过程返回状态表常用的存储过程返回状态表0 过程成功执行1 对象丢失2 发生数据类型错误3 处理过程被死锁4 发生权限错误5 发生语法错误6 发生恶意用户错误7 发生资源错误8 遭遇非致命的内部错误9 遭遇系统限制10 发生致命的内部不稳定性12 表或索引被破坏13 数据库被破坏14 发生硬盘错误通常用全局变量ERROR 返回最后执行的SQL 语句的错误代码。 CREATE PROCedure sp_getemp;3(salary int =NULL)AS IF salary IS
13、 NULLBEGIN PRINT 必须提供一个数值作参数! RETURN 13ENDIF NOT EXISTS (SELECT * FROM 职工 WHERE 工资 salary)BEGIN PRINT 没有满足条件的记录! RETURN -103ENDSELECT * FROM 职工 WHERE 工资 salaryRETURN 0例:带参数和返回状态值的存储过程。利用全局变量修改刚才的例子利用全局变量修改刚才的例子CREATE PROCedure sp_getemp;3(salary int =NULL)AS SELECT * FROM 职工 WHERE 工资 salaryIF ERROR
14、= 0 RETURN 0ELSERETURN -1例:执行以上存储过程。DECLARE status intEXECUTE status=sp_getemp;3 salary 1200print status存储过程的修改和删除存储过程的修改和删除 l修改存储过程的语句是(一般格式):ALTER PROCedure procedure_name ; number parameter data_type = default , AS sql_statement l删除存储过程的语句是: DROP PROCedure procedure_name注意:删除存储过程的语句中不能指定序号。也就是说,该
15、语句将同时删除同名的所有存储过程。小结:要用好存储过程小结:要用好存储过程 存储过程是客户/服务器机制的一个重要组成部分,如果使用客户/服务器机制的数据库管理系统,但是不理解存储过程或没有充分利用存储过程,那将使客户/服务器机制的功能大打折扣,使系统的整体性能可能降低很多。5.2 触发器触发器l5.2.1 触发器的基本概念触发器的基本概念l5.2.2 触发器的用途触发器的用途l5.2.3 触发器与存储过程的比较触发器与存储过程的比较l5.2.4 触发器的使用方法触发器的使用方法5.2.1 触发器的基本概念触发器的基本概念l触发器可以看作是一类特殊的存储过程,它在满足某个特定条件时自动触发执行。
16、l触发器是为表上的更新、插入、删除操作定义的,也就是说当表上发生更新、插入或删除操作时触发器将执行。l因此,相应的,触发器根据触发类型分为insert,delete,update触发器。5.2.2 触发器的用途触发器的用途l触发器的主要作用就是其能够实现由主键和外键所不能保证的复杂的参照完整性和数据的一致性。l除此之外,触发器还有以下的功能: l触发器可以通过级联的方式对相关的表进行修改。比如,对父表的修改,可以引起对子孙表的一系列修改,从而保证数据的一致性和完整性。l触发器可以禁止或撤消违反参照完整性的修改。l触发器可以强制比用CHECK约束定义更加复杂的限制。5.2.3 触发器与存储过程的
17、比较触发器与存储过程的比较l联系:l1、触发器也是存储过程。l2、它们都是提高数据库服务器性能的工具。l 区别:l1、执行方法不同。触发器主要是通过事件进行触发而被执行的,存储过程可以通过存储过程名字而被直接调用。l2、建立方法不同。触发器是依附于表的数据库对象触发器是依附于表的数据库对象lCREATE TRIGGER 语句必须是批处理的第一个语句语句必须是批处理的第一个语句l表的所有者具有创建触发器的缺省权限,表的所有者不能表的所有者具有创建触发器的缺省权限,表的所有者不能把该权限传给其它用户。把该权限传给其它用户。l触发器是数据库对象,所以其命名必须符合命名规则。触发器是数据库对象,所以其
18、命名必须符合命名规则。l尽管在触发器的尽管在触发器的SQL 语句中可以参照其它数据库中的对语句中可以参照其它数据库中的对象,但是触发器只能创建在当前数据库中。象,但是触发器只能创建在当前数据库中。l虽然触发器可以参照视图或临时表,但不能在视图或临时虽然触发器可以参照视图或临时表,但不能在视图或临时表上创建触发器,而只能在基表或在创建视图的表上创建表上创建触发器,而只能在基表或在创建视图的表上创建触发器。触发器。l一个触发器只能对应一个表,这是由触发器的机制决定的一个触发器只能对应一个表,这是由触发器的机制决定的。触发器是依附于表的数据库对象触发器是依附于表的数据库对象l一个触发器和三部分内容有
19、关:一个触发器和三部分内容有关:l定义触发器的表定义触发器的表l激活触发器的数据操作语句激活触发器的数据操作语句l触发器要采取的动作触发器要采取的动作不能在触发器中使用的不能在触发器中使用的sql语句语句lCreate database和create tablel所有drop语句l数据库修改语句alter table,alter databasel对象权限语句grant和revoke5.2.4 触发器的使用方法触发器的使用方法l创建触发器的语句l触发器的使用原理-理解两个视图并掌握它们的使用l插入类触发器l删除类触发器l更新类触发器l触发器的相关操作l修改删除触发器建立触发器的语句建立触发器的
20、语句CREATE TRIGGER trigger_nameON tableFOR INSERT | UPDATE | DELETE AS IF UPDATE(column) AND | OR UPDATE(column)sql_statements trigger_name:给出了触发器的名称;s table:说明了定义触发器的表或视图;s FOR INSERT | UPDATE | DELETE :说明了激活触发器的数据操作语句;s IF UPDATE(column):对应于UPDATE类触发器,说明如果更新某(些)列则做如何处理;s sql_statement:触发器所要执行的SQL语句,
21、它可以是一组SQL语句,可以包含流程控制语句等。例:建立一个简单的触发器。例:建立一个简单的触发器。CREATE TRIGGER wh_triggerON 仓库FOR INSERT AS PRINT 插入了一个仓库元组说明:当在说明:当在“仓库仓库”表中插入一行元组,则输出表中插入一行元组,则输出“插入了一个仓库元组插入了一个仓库元组”。触发器的原理触发器的原理 两个特殊的视图两个特殊的视图l每个触发器有两个特殊的视图:每个触发器有两个特殊的视图:插入视图(插入视图(inserted)和删除视图(和删除视图(deleted) 。l它们是逻辑表且是由系统管理的,存储在内存中,不允许用它们是逻辑表
22、且是由系统管理的,存储在内存中,不允许用户直接对其修改,结构与原表有相同的表结构。户直接对其修改,结构与原表有相同的表结构。l当触发器工作完成,这两个视图也被删除。当触发器工作完成,这两个视图也被删除。l它们主要保存因用户操作(存放刚插入的新记录和存放刚删它们主要保存因用户操作(存放刚插入的新记录和存放刚删除的旧记录)而被影响到的原数据值或新数据值。除的旧记录)而被影响到的原数据值或新数据值。l它们是只读的,即用户不能向这两个表写入内容它们是只读的,即用户不能向这两个表写入内容,但可以引但可以引用表中的数据。用表中的数据。触发器的原理触发器的原理这两个视图与数据操作的关系这两个视图与数据操作的
23、关系l一旦对表执行了插入操作,一旦对表执行了插入操作,插入视图插入视图就是用来存就是用来存储向原表插入的内容。储向原表插入的内容。l一旦对表执行了删除操作,则将所有的删除行存一旦对表执行了删除操作,则将所有的删除行存放至放至删除视图删除视图中。中。l更新操作包括两个部分即先将更新的内容去掉然更新操作包括两个部分即先将更新的内容去掉然后将新值插入,因此对一个定义了更新类型触发后将新值插入,因此对一个定义了更新类型触发器的表来讲,在器的表来讲,在删除视图删除视图中存放了旧值,然后在中存放了旧值,然后在插入视图插入视图中存放新值。中存放新值。插入类触发器插入类触发器 插入类触发器就是当表上发生插入操
24、作时所触发执行的程序。例:例:对职工表的插入操作定义一个触发器,使得当插入职对职工表的插入操作定义一个触发器,使得当插入职工记录时,检查相应的仓库元组是否存在,如果不存在则工记录时,检查相应的仓库元组是否存在,如果不存在则撤消所做的插入操作。撤消所做的插入操作。CREATE TRIGGER e_ins_triggerON 职工 FOR INSERTAS如果如果 插入的职工元组的仓库号在仓库表中存插入的职工元组的仓库号在仓库表中存在在,那么插入成功,职工表增加一行元组。那么插入成功,职工表增加一行元组。如果如果 插入的职工元组的仓库号在仓库表中不插入的职工元组的仓库号在仓库表中不存在存在,则插入
25、操作不成功,给出相应的提示,并则插入操作不成功,给出相应的提示,并且事务回滚到插入操作之前。且事务回滚到插入操作之前。IF (SELECT COUNT(*) FROM 仓库 w , inserted i WHERE w.仓库号 = i.仓库号) = 0BEGIN RAISERROR (非法仓库号!,1,1) ROLLBACK TRANSACTIONEND思考:思考:如果上题如果上题要求改为在职工表的插入操作定义一个触要求改为在职工表的插入操作定义一个触发器,使得当插入职工记录时,检查实体完整性,如果不发器,使得当插入职工记录时,检查实体完整性,如果不满足实体完整性则撤消所做的插入操作。满足实体
26、完整性则撤消所做的插入操作。CREATE TRIGGER e_ins_trigger2ON 职工 FOR INSERTAS如果如果 插入的职工元组的职工号在原职工表中插入的职工元组的职工号在原职工表中不存在不存在,那么插入成功,职工表增加一行元组。那么插入成功,职工表增加一行元组。如果如果 插入的职工元组的职工号在插入的职工元组的职工号在原职工表原职工表中中已存在已存在,则插入操作不成功,给出相应的提示,则插入操作不成功,给出相应的提示,并且事务回滚到插入操作之前。并且事务回滚到插入操作之前。IF (SELECT COUNT(*) FROM 职工 w , inserted i WHERE w.
27、职工号 = i.职工号) 0BEGIN RAISERROR (重复的职工号!,1,1) ROLLBACK TRANSACTIONEND删除类触发器删除类触发器 删除类触发器就是当表上发生删除操作时所触发执行的程序。例:定义一个触发器,例:定义一个触发器,使得当删除仓库记录时,同时使得当删除仓库记录时,同时将所属所有职工记录的仓库号字段值置为空值将所属所有职工记录的仓库号字段值置为空值NULL: CREATE TRIGGER w_del_triggerON 仓库 FOR DELETEASUPDATE 职工SET 仓库号=NULLWHERE 仓库号 = (SELECT 仓库号 FROM delet
28、ed)思考:若改为定义一个触发器,思考:若改为定义一个触发器,使得当删除仓使得当删除仓库记录时,同时将所属所有职工记录删除:库记录时,同时将所属所有职工记录删除: CREATE TRIGGER w_del_trigger2ON 仓库 FOR DELETEASDELETE FROM 职工 FROM deletedWHERE 职工.仓库号 = deleted.仓库号更新类触发器更新类触发器 更新类触发器就是当表上发生更新操作时所触发执行的程序。例:例:对职工表的更新操作定义一个触发器,使得当职工对职工表的更新操作定义一个触发器,使得当职工变换所属仓库时,检查相应的仓库元组是否存在,如果变换所属仓库
29、时,检查相应的仓库元组是否存在,如果不存在则撤消所做的更新操作,如果新的仓库号是不存在则撤消所做的更新操作,如果新的仓库号是WH2则将工资提高则将工资提高10%。定义语句(注意表名,哪一类的触发器)定义语句(注意表名,哪一类的触发器)当改变职工所属的仓库号时(仓库号当改变职工所属的仓库号时(仓库号a-仓库号仓库号b,不确定,怎么写语句?),不确定,怎么写语句?)如果仓库号如果仓库号b在仓库表中不存在,事务回滚,撤在仓库表中不存在,事务回滚,撤销更新职工表的仓库号字段,维持原来的元组。销更新职工表的仓库号字段,维持原来的元组。如果仓库号如果仓库号b在仓库表中存在,则进行下面的工在仓库表中存在,则
30、进行下面的工作作如果更新的仓库号如果更新的仓库号b为为WH2,则给这个职工,则给这个职工增加增加10%工资工资如果更新的仓库号如果更新的仓库号b不是不是WH2,而是其它合,而是其它合法的仓库号,则只是修改该职工所属的仓库法的仓库号,则只是修改该职工所属的仓库号(即用户的更新操作成功)号(即用户的更新操作成功)WH21331WH5CREATE TRIGGER e_upd_triggerON 职工 FOR UPDATEASDECLARE wh_no CHAR(4)IF UPDATE(仓库号) BEGIN IF (SELECT COUNT(*) FROM 仓库 w , inserted i WHER
31、E w.仓库号 = i.仓库号) = 0 BEGIN RAISERROR (非法仓库号!, 16, 1) ROLLBACK TRANSACTION END ELSE BEGIN SELECT wh_no = 仓库号 FROM inserted IF wh_no = WH2 UPDATE 职工 SET 工资 = 工资*1.10 WHERE 职工号 = (SELECT 职工号 FROM inserted) ENDEND定义语句定义语句当更新操作,生成两张视图当更新操作,生成两张视图如果仓库号如果仓库号b在仓库表中不在仓库表中不存在,不符合参照完整性,存在,不符合参照完整性,事务回滚。事务回滚。如果
32、仓库号如果仓库号b在仓库表中存在,在仓库表中存在,且为且为WH2则增加工资则增加工资使用系统存储过程查看触发器使用系统存储过程查看触发器l系统存储过程sp_help, sp_helptext 和sp_depends 分别提供有关触发器的不同信息。lsp_help,通过该系统过程可以了解触发器的一般信息如触发器的名字属性类型创建时间l使用sp_help 系统过程的命令格式是sp_help 触发器名字lsp_helptext 通过sp_helptext 能够查看触发器的正文信息,其语法格式为 sp_helptext 触发器名lsp_depends 通过sp_depends 能够查看指定触发器所引用
33、的表或指定的表涉及到的所有触发器,其语法形式如下 sp_depends 触发器名字 sp_depends 表名修改删除触发器修改删除触发器l可以修改触发器的名字和正文l使用sp_rename 命令修改触发器的名字,其语法格式为 sp_rename oldname,newnamel用Alert trigger 命令修改触发器正文l删除已创建的触发器有两种方法:l用系统命令DROP TRIGGER 删除指定的触发器,其语法形式如下 DROP TRIGGER 触发器名字l删除触发器所在的表时, 将自动删除与该表相关的触发器。5.3 数据完整性数据完整性 l在第3章已经介绍了在关系数据模型上数据完整性
34、的概念和规则;在前一章介绍了CREATE TABLE语句中可以实现的一些完整性约束。这里介绍与数据完整性有关的 其 他 一 些 内 容 。 . 5.3.1 规则规则 l在在CREATE TABLE语句中可以使用语句中可以使用CHECK子句实子句实现一些用户定义完整性或域完整性约束。另外还可以现一些用户定义完整性或域完整性约束。另外还可以通过通过“规则规则”(RULE)来实现用户定义完整性或域)来实现用户定义完整性或域完整性。完整性。lCHECK约束固定在一个表的一个列上,它只在指定约束固定在一个表的一个列上,它只在指定的列上起作用。如果在不同的列上有相同的约束条件,的列上起作用。如果在不同的列
35、上有相同的约束条件,则可以使用规则,一个规则可以绑定在多个列上。则可以使用规则,一个规则可以绑定在多个列上。l规则是一种独立的数据库对象,它可以绑定到一个列规则是一种独立的数据库对象,它可以绑定到一个列上来约束该列的取值范围等。上来约束该列的取值范围等。 规则的用法规则的用法l定义规则l绑定到相应的列上建立规则的命令是:建立规则的命令是: CREATE RULE rule AS condition_expression lrule:给出新建规则的名称; lcondition_expression:定义规则的条件,可以是任何有效的表达式,并且可以包含诸如算术运算符、关系运算符和谓词(如IN、LI
36、KE、BETWEEN)之类的元素。 注意:l规则不能引用列或其它数据库对象,规则可以包含不引用数据库对象的内置函数;lcondition_expression需要包含一个变量,变量的前面有一个前缀;l该表达式引用通过 UPDATE或INSERT语句输入或传递的字段值。 例如,规定某类数值对象的取值范围是例如,规定某类数值对象的取值范围是10003000,则可以定义规则:,则可以定义规则: CREATE RULE range_rule ASrange=1000 AND range=3000规则的绑定规则的绑定l规则是独立的数据库对象,要通过系统存储过程sp_bindrule把规则绑定到数据列上,
37、该系统存储过程的格式是: sp_bindrule rulename , objname , futureonly lrulename是用CREATE RULE命令建立的规则名;lobjname指出要绑定的表和列或用户定义的数据类型;lfutureonly,当绑定规则到用户定义的数据类型时可以选用此项,该选项是禁止已经存在的、用用户定义数据类型定义的列遵循新的规则。例如,将规则例如,将规则range_rule绑定到职工表的工资列上绑定到职工表的工资列上 sp_bindrule range_rule,职工.工资 l使用CREATE RULE命令创建的规则对象,可以绑定到多个数据列上,即一个规则可以
38、反复使用。 绑定的消除和规则的删除绑定的消除和规则的删除l绑定到数据列上的规则可以去除,相应的系统存储过程是sp_unbindrule。例如,取消绑定在职工表工资列上的规则可以使用如下语句: sp_unbindrule 职工.工资l规则可以删除,删除规则的命令是DROP RULE,但是删除规则之前,必须首先解除所有的绑定。5.3.2 默认值默认值 l在CREATE TABLE命令中可以使用DEFAULT约束为数据列定义默认值。这里介绍另外一种方法:使用CREATE DEFAULT命令创建默认值对象。 CREATE DEFAULT命令的格式命令的格式 CREATE DEFAULT default
39、 AS constant_expressionl default:是建立的默认值对象名;l constant_expression:定义默认值的常量表达式。例如,定义一个值为例如,定义一个值为“北京北京”的默认值对象的默认值对象val_bj CREATE DEFAULT val_bjAS 北京绑定默认值绑定默认值 l默认值是独立的数据库对象,它要作用于某个数据对象,则也和绑定规则一样,需要用类似的系统存储过程把默认值绑定到列,绑定默认值的系统存储过程是sp_bindefault,具体格式是: sp_bindefault defname , objname , futureonly ldefname:是用CREATE DEFAULT命令建立的默认值对象名; lobjname:指出要绑定的表和列或用户定义的数据类型; lfutureonly,当绑定默认值到用户定义的数据类型时可以选用此项,该选项是禁止已经存在的、用用户定义数据类型定义的列遵循新的默认值约定。例如,将定义的默认值对象例如,将定义的默认值对象val_bj绑定到仓库关系绑定到仓库关系的城市列上和供应商关系的地址列上:的城市列上和供
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025国网重庆市电力校园招聘(提前批)笔试模拟试题浓缩500题附答案详解(满分必刷)
- 2026中国华能集团有限公司能源研究院高校毕业生招聘考试参考试题(浓缩500题)及答案详解【历年真题】
- 2026届国家管网集团高校毕业生招聘笔试参考题库(浓缩500题)及完整答案详解
- 2026国网山西电力公司高校毕业生提前批招聘笔试参考题库浓缩500题及答案详解(夺冠)
- 2026秋季国家管网集团东部原油储运公司高校毕业生招聘考试备考试题(浓缩500题)及参考答案详解
- 2026国网上海市电力公司高校毕业生提前批招聘笔试模拟试题浓缩500题附答案详解(完整版)
- 2025国网山东省高校毕业生提前批招聘(约450人)笔试模拟试题浓缩500题参考答案详解
- 2026秋季国家管网集团西北公司高校毕业生招聘笔试模拟试题(浓缩500题)含答案详解(完整版)
- 国家管网集团湖南公司2026届秋季高校毕业生招聘考试备考题库(浓缩500题)附答案详解(培优a卷)
- 2026秋季国家管网集团云南公司高校毕业生招聘考试备考题库(浓缩500题)及参考答案详解(综合题)
- 跌倒事件不良事件医疗安全(不良)事件讨论表
- 国家开放大学一网一平台电大《建筑测量》实验报告1-5题库
- 冷压端子压接说明书
- 2023年湖南省人社局工伤保险服务中心人员招聘笔试模拟试题及答案解析
- 中国建筑科技管理手册
- 《中国古代的民族关系与对外交往》课件
- 2022年上海市初中学业考试地理中考试卷真题(含答案详解)
- GB/T 28885-2012燃气服务导则
- GB/T 21709.16-2013针灸技术操作规范第16部分:腹针
- GB/T 19492-2020油气矿产资源储量分类
- 预算绩效管理课件讲解课件
评论
0/150
提交评论