1、第第8 8章章 数据完整性约束数据完整性约束8.1 8.1 数据完整性的概念数据完整性的概念8.2 8.2 实现数据完整性实现数据完整性8.3 8.3 系统对完整性约束的检查系统对完整性约束的检查8.4 8.4 删除约束删除约束8.5 8.5 触发器触发器2023年2月8日10时52分18.1 8.1 数据完整性的概念数据完整性的概念o 数据完整性是指数据的正确性和相容性。如数据完整性是指数据的正确性和相容性。如:n 每个人的身份证号必须是唯一的,每个人的身份证号必须是唯一的,n 人的性别只能是人的性别只能是男男或或女女。o 为了维护数据的完整性,为了维护数据的完整性,DBMSDBMS必须要提
2、供一种必须要提供一种机制来检查数据库中的数据。机制来检查数据库中的数据。o 这些加在数据库数据之上的语义约束条件就称这些加在数据库数据之上的语义约束条件就称为为数据完整性约束条件数据完整性约束条件。o DBMSDBMS中检查数据是否满足完整性条件的机制就中检查数据是否满足完整性条件的机制就称为称为完整性检查完整性检查。2023年2月8日10时52分2完整性约束条件的作用对象完整性约束条件的作用对象o列级约束列级约束o元组约束元组约束o关系约束关系约束2023年2月8日10时52分3列级约束列级约束o 主要是对列的类型、取值范围、精度等的约束,主要是对列的类型、取值范围、精度等的约束,包括:包括
3、:n 对数据类型的约束对数据类型的约束:数据类型、长度、精度等:数据类型、长度、精度等例:例:snosno char(8)char(8)n 对数据格式的约束对数据格式的约束:Sno:Sno:2010201001011 10101年年专业专业班号班号序列号序列号n 对取值范围的约束对取值范围的约束:如学生的成绩取值范围为:如学生的成绩取值范围为0 0100100。n 对空值的约束对空值的约束:列:列是否是否允许允许有有空空值值。2023年2月8日10时52分4元组约束元组约束o元组约束是元组中各个字段之间的联元组约束是元组中各个字段之间的联系的约束,如:系的约束,如:n 开始日期小于结束日期开始
4、日期小于结束日期n 订货数量小于等于库存数量订货数量小于等于库存数量n 最低工资不能低于规定的最低值最低工资不能低于规定的最低值2023年2月8日10时52分5关系约束关系约束o是指若干元组之间、关系之间的联系是指若干元组之间、关系之间的联系的约束。比如的约束。比如:n 学号的取值不能重复也不能取空值学号的取值不能重复也不能取空值n 学生修课表中学号的取值受学生表学生修课表中学号的取值受学生表中学号取值的限制等中学号取值的限制等。2023年2月8日10时52分6实现数据完整性的方法实现数据完整性的方法o 可以在服务器端完成,也可以在客户端可以在服务器端完成,也可以在客户端编程实现。编程实现。o
5、 在在服务器端服务器端实现数据完整性的方法主要实现数据完整性的方法主要有两种有两种:n 声明数据完整性声明数据完整性n 触发器触发器o 在在客户端客户端实现数据完整性主要是用前端实现数据完整性主要是用前端开发工具,在应用程序中编写代码保证开发工具,在应用程序中编写代码保证。2023年2月8日10时52分78.2 8.2 实现数据完整性实现数据完整性o 设有如下两张表:设有如下两张表:CREATE TABLE CREATE TABLE 职工表职工表(职工编号职工编号 CHAR(7)NOT NULL,CHAR(7)NOT NULL,职工名职工名 CHAR(10)NOT NULL,CHAR(10)N
6、OT NULL,工作编号工作编号 CHAR(8),CHAR(8),工资工资 SMALLINT,SMALLINT,电话电话 CHAR(8),CHAR(8),身份证号身份证号 CHAR(18)CHAR(18)2023年2月8日10时52分8CREATE TABLE CREATE TABLE 工作表工作表(工作编号工作编号 CHAR(8)NOT NULL,CHAR(8)NOT NULL,最低工资最低工资 SMALLINT,SMALLINT,最高工资最高工资 SMALLINT SMALLINT)1.1.实体完整性约束实体完整性约束o实体完整性是用实体完整性是用PRIMARY KEYPRIMARY KE
7、Y来保证来保证。注意:注意:o每个表只能有一个每个表只能有一个PRIMARY KEYPRIMARY KEY约束;约束;o用用PRIMARY KEYPRIMARY KEY约束的列的取值必须是约束的列的取值必须是不重复的(对由多列构成的主键,是不重复的(对由多列构成的主键,是这些主键列组合起来取值不重),并这些主键列组合起来取值不重),并且不允许有空值且不允许有空值。2023年2月8日10时52分9添加主键约束添加主键约束ALTER TABLE ALTER TABLE 表名表名 ADD CONSTRAINT ADD CONSTRAINT 约束名约束名 PRIMARY KEY PRIMARY KEY
8、(,n n)2023年2月8日10时52分10示例示例ALTER TABLE ALTER TABLE 职工表职工表 ADD CONSTRAINT PK_EMP ADD CONSTRAINT PK_EMP PRIMARY KEY PRIMARY KEY(职工编号)(职工编号)ALTER TABLE ALTER TABLE 工作表工作表 ADD CONSTRAINT PK_JOB ADD CONSTRAINT PK_JOB PRIMARY KEY PRIMARY KEY(工作编号)(工作编号)2023年2月8日10时52分112.2.唯一值约束唯一值约束o 用用UNIQUEUNIQUE约束实现,用
9、于限制一个列或者是约束实现,用于限制一个列或者是多个列的组合取值不重复。多个列的组合取值不重复。o 用在事实上具有唯一性的属性列上,比如身用在事实上具有唯一性的属性列上,比如身份证号码、驾驶证号码等份证号码、驾驶证号码等。注意。注意:o 有有UNIQUEUNIQUE约束的列允许有一个空值;约束的列允许有一个空值;o 在一个表中可以定义多个在一个表中可以定义多个UNIQUEUNIQUE约束;约束;o 可以在一个列或多个列上定义可以在一个列或多个列上定义UNIQUEUNIQUE约束;约束;2023年2月8日10时52分12在创建表时定义在创建表时定义UNIQUEUNIQUE约束约束CREATE T
10、ABLE CREATE TABLE 表名(表名(列名列名 类型类型 CONSTRAINT CONSTRAINT 约束名约束名 UNIQUE UNIQUE(,n n),)或者:或者:CREATE TABLE CREATE TABLE 表名(表名(列名列名 类型类型,CONSTRAINT CONSTRAINT 约束名约束名 UNIQUE UNIQUE(,n n)2023年2月8日10时52分13添加添加UNIQUEUNIQUE约束约束ALTER TABLE ALTER TABLE 表名表名 ADD CONSTRAINT ADD CONSTRAINT 约束名约束名 UNIQUE UNIQUE(,n
11、n)2023年2月8日10时52分14示例示例创建表时定义创建表时定义o 例例2.2.为为“身份证号身份证号”列添加唯一值约束。列添加唯一值约束。CREATE TABLE CREATE TABLE 职工表(职工表(身份证号身份证号 CHAR(19)CHAR(19)UNIQUEUNIQUE,)或:或:CREATE TABLE CREATE TABLE 职工表(职工表(身份证号身份证号 CHAR(19),CHAR(19),UNIQUE(UNIQUE(身份证号身份证号),)2023年2月8日10时52分15示例示例添加约束添加约束ALTER TABLE ALTER TABLE 职工表职工表 ADD
12、CONSTRAINT UN_EMP ADD CONSTRAINT UN_EMP UNIQUE UNIQUE(身份证号)(身份证号)2023年2月8日10时52分16复合唯一约束示例复合唯一约束示例o 例例3.3.设设authorsauthors表,其中表,其中有有au_fnameau_fname和和au_lnameau_lname两个列,现要限制这两个列组合起来不重复。两个列,现要限制这两个列组合起来不重复。CREATE TABLE authors(CREATE TABLE authors(au_fnameau_fname VARCHAR(20),VARCHAR(20),au_lnameau_
13、lname VARCHAR(20)VARCHAR(20)UNIQUE(au_fnameUNIQUE(au_fname,au_lnameau_lname),-作为列级约束定义作为列级约束定义)2023年2月8日10时52分17复合唯一约束示例复合唯一约束示例CREATE TABLE authors(CREATE TABLE authors(au_fnameau_fname VARCHAR(20),VARCHAR(20),au_lnameau_lname VARCHAR(20),VARCHAR(20),UNIQUE(au_fnameUNIQUE(au_fname,au_lnameau_lname)
14、,-作为表级约束定义作为表级约束定义)182023年2月8日10时52分复合唯一约束示例复合唯一约束示例o在已创建好的表上添加唯一值约束:在已创建好的表上添加唯一值约束:ALTER TABLE authorsALTER TABLE authors ADD CONSTRAINT ADD CONSTRAINT UN_NameUN_Name UNIQUE(UNIQUE(au_fnameau_fname,au_lnameau_lname)2023年2月8日10时52分193.3.参照完整性参照完整性o参照完整性(引用完整性)用参照完整性(引用完整性)用FOREIGN KEYFOREIGN KEY约束保
15、证约束保证.o定义定义FOREIGN KEYFOREIGN KEY约束时要注意:约束时要注意:n 外键列引用的列必须是有外键列引用的列必须是有PRIMARY PRIMARY KEYKEY约束或约束或UNIQUEUNIQUE约束的列约束的列,通常,通常是有是有PRIMARY KEYPRIMARY KEY约束约束的列的列。2023年2月8日10时52分20添加外键约束添加外键约束ALTER TABLE ALTER TABLE 表名表名 ADD CONSTRAINT ADD CONSTRAINT 约束名约束名 FOREIGN KEY FOREIGN KEY()REFERENCES REFERENCE
16、S 引用表名(引用表名()ON DELETE ON DELETE CASCADE|NO ACTION CASCADE|NO ACTION ON UPDATE ON UPDATE CASCADE|NO ACTION CASCADE|NO ACTION o ON DELETEON DELETE:级联或限制删除;:级联或限制删除;o ON UPDATEON UPDATE:级联或限制更新。:级联或限制更新。2023年2月8日10时52分21删除示例删除示例2023年2月8日10时52分22SnoSnameSsexSageSdept08111010811101李勇李勇 男男2121计算机系计算机系081
17、11020811102刘晨刘晨 男男2020计算机系计算机系08111030811103王敏王敏 女女2020计算机系计算机系08111040811104张小红张小红 女女1919计算机系计算机系08211010821101张立张立 男男2020信息管理系信息管理系08211020821102吴宾吴宾 女女1919信息管理系信息管理系08211030821103张海张海 男男2020信息管理系信息管理系SnoCnoGrade0811101C001 960811101C002 800811101C003 840811101C005 620811102C001 920811102C002 9008
18、11102C004 840821102C001 760821102C004 850821102C005 730821102C007 NULL0821103C001 500821103C004 8008111020811102刘晨刘晨 男男2020计算机系计算机系0811102C001 920811102C002 900811102C004 84ON DELETE CASCADEON DELETE CASCADEON DELETEON DELETE NO ACTION NO ACTION08111020811102刘晨刘晨 男男2020计算机系计算机系0811102C001 920811102C
19、002 900811102C004 84更新示例更新示例2023年2月8日10时52分23SnoSnameSsexSageSdept08111010811101李勇李勇 男男2121计算机系计算机系08111020811102刘晨刘晨 男男2020计算机系计算机系08111030811103王敏王敏 女女2020计算机系计算机系08111040811104张小红张小红 女女1919计算机系计算机系08211010821101张立张立 男男2020信息管理系信息管理系08211020821102吴宾吴宾 女女1919信息管理系信息管理系08211030821103张海张海 男男2020信息管理系
20、信息管理系SnoCnoGrade0811101C001 960811101C002 800811101C003 840811101C005 620811102C001 920811102C002 900811102C004 840821102C001 760821102C004 850821102C005 730821102C007 NULL0821103C001 500821103C004 8008111020811102刘晨刘晨 男男2020计算机系计算机系0811102C001 920811102C002 900811102C004 84ON UPDATE CASCADEON UPDAT
21、E CASCADEON UPDATEON UPDATE NO ACTION NO ACTION08111100811110刘晨刘晨 男男2020计算机系计算机系0811110C001 920811110C002 900811110C004 84示例示例o例例4 4 为职工表的为职工表的“工作编号工作编号”列添列添加外键约束,此列引用工作表中的加外键约束,此列引用工作表中的“工作编号工作编号”列。列。ALTER TABLE ALTER TABLE 职工表职工表 ADD CONSTRAINT FK_job_id ADD CONSTRAINT FK_job_id FOREIGN KEY(FOREIG
22、N KEY(工作编号工作编号)REFERENCES REFERENCES 工作表工作表(工作编号工作编号)2023年2月8日10时52分244.4.默认值约束默认值约束o用用DEFAULTDEFAULT约束实现,用于提供列的约束实现,用于提供列的默认值。注意:默认值。注意:o只在向表中插入数据时才检查只在向表中插入数据时才检查DEFAULTDEFAULT约束;约束;o每个列只能有一个每个列只能有一个DEFAULTDEFAULT约束。约束。2023年2月8日10时52分25定义或添加默认值约束定义或添加默认值约束CREATE TABLE CREATE TABLE 表名(表名(列名列名 类型类型
23、CONSTRAINT CONSTRAINT 约束名约束名 DEFAULT DEFAULT 常常量表达式量表达式,)ALTER TABLE ALTER TABLE 表名表名 ADD CONSTRAINT ADD CONSTRAINT 约束名约束名 DEFAULT DEFAULT 常量表达式常量表达式 FOR FOR 列名列名2023年2月8日10时52分26示例示例o 例例5 5 在职工表中,如果某个职工没有电话,则在职工表中,如果某个职工没有电话,则写入默认值:写入默认值:1111111111111111。CREATE TABLE CREATE TABLE 职工表职工表(电话电话 CHAR(8
24、)CHAR(8)DEFAULT 11111111 DEFAULT 11111111,)o 或:或:ALTER TABLE ALTER TABLE 职工表职工表 ADD CONSTRAINT DF_PHONE ADD CONSTRAINT DF_PHONE DEFAULT 11111111 FOR DEFAULT 11111111 FOR 电话电话2023年2月8日10时52分275.5.列取值范围约束列取值范围约束o 用用CHECKCHECK约束实现,用于限制列的取值在指定范约束实现,用于限制列的取值在指定范围内,即约束列的取值符合应用语义,如围内,即约束列的取值符合应用语义,如:n 人的性别
25、只能是人的性别只能是“男男”或或“女女”,n 工资必须大于工资必须大于10001000。o 使用使用CHECKCHECK约束时注意:约束时注意:n 在执行在执行INSERTINSERT语句和语句和UPDATEUPDATE语句时系统自动语句时系统自动检查检查CHECKCHECK约束;约束;n CHECKCHECK约束可以限制一个列的取值范围,也约束可以限制一个列的取值范围,也可以限制同表多列之间的取值约束关系。可以限制同表多列之间的取值约束关系。2023年2月8日10时52分28定义或添加定义或添加CHECKCHECK约束约束CREATE TABLE CREATE TABLE 表名表名(列名列名
26、 类型类型 CONSTRAINT CONSTRAINT 约束名约束名 CHECK(CHECK(逻辑表达式逻辑表达式),)或:或:ALTER TABLE ALTER TABLE 表名表名 ADD CONSTRAINT ADD CONSTRAINT 约束名约束名 CHECK CHECK(逻辑表达式)(逻辑表达式)2023年2月8日10时52分29示例示例定义定义CHECKCHECK约束约束例例6 6 为职工表定义工资必须大于等于为职工表定义工资必须大于等于10001000的约束。的约束。CREATE TABLE CREATE TABLE 职工表职工表 (工资工资 SMALLINT SMALLINT
27、 CHECK(CHECK(工资工资 =1000)=1000),)o 或者:或者:CREATE TABLE CREATE TABLE 职工表职工表 (工资工资 SMALLINT,SMALLINT,CHECK(CHECK(工资工资 =1000)=1000),)2023年2月8日10时52分30示例示例添加添加CHECKCHECK约束约束ALTER TABLE ALTER TABLE 职工表职工表 ADD CONSTRAINT CHK_SalaryADD CONSTRAINT CHK_Salary CHECK(CHECK(工资工资=1000)=1000)2023年2月8日10时52分31示例:定义多
28、列取值约束示例:定义多列取值约束o 例例7 7 限制限制“最低工资最低工资”=“最高工资最高工资”。CREATE TABLE CREATE TABLE 工作表(工作表(最低工资最低工资 int,int,最高工资最高工资 int,int,CHECKCHECK(最低工资(最低工资=最高工资)最高工资),)o 注意:多列之间的注意:多列之间的CHECKCHECK约束只能定义在表级约约束只能定义在表级约束处。束处。2023年2月8日10时52分32示例:添加多列取值约束示例:添加多列取值约束ALTER TABLE ALTER TABLE 工作表工作表 ADD CONSTRAINT CHK_Job_Sa
29、lary ADD CONSTRAINT CHK_Job_Salary CHECK(CHECK(最低工资最低工资=最高工资最高工资)2023年2月8日10时52分33示例示例o例例8 8 限制电话号码列的每一位的取限制电话号码列的每一位的取值必须是值必须是0 0 9 9之间的数字。之间的数字。CHECK CHECK(电话(电话 LIKE 0-90-90-9 LIKE 0-90-90-9 0-90-90-90-90-90-90-90-90-90-9)2023年2月8日10时52分348.3 8.3 系统对完整性约束的检查系统对完整性约束的检查o 主键约束主键约束:插入插入和更新数据和更新数据时,检
30、查新时,检查新数据的主键值是否与已存在的主键值重数据的主键值是否与已存在的主键值重复,或者新主键值是否为空。复,或者新主键值是否为空。o 唯一值约束唯一值约束:同主键约束。:同主键约束。o 默认值约束默认值约束:插入数据:插入数据且没有为某个列且没有为某个列提供值提供值时检查。时检查。o 列取值范围约束列取值范围约束:插入和修改:插入和修改有列取值有列取值约束的数据检查约束的数据检查。2023年2月8日10时52分35外键外键约束的检查约束的检查对子表对子表o插入数据插入数据时,检查新数据的外键值是时,检查新数据的外键值是否在主表的主键值范围内。否在主表的主键值范围内。o修改外键修改外键列值时
31、,检查修改后的外键列值时,检查修改后的外键值是否在主表的主键值范围内值是否在主表的主键值范围内。2023年2月8日10时52分36外键外键约束的检查约束的检查对主表对主表o 删除数据删除数据时,检查被删除数据的主键值是否在子时,检查被删除数据的主键值是否在子表中有对它的引用,若无,则删除之;若有,则表中有对它的引用,若无,则删除之;若有,则看是否允许级联删除看是否允许级联删除:n 若允许若允许:则将子表则将子表中相应中相应数据一起删掉;数据一起删掉;n 若不允许若不允许:则删除失败。则删除失败。o 更改主键更改主键列值时,检查被更改的主键值是否在子列值时,检查被更改的主键值是否在子表中有对它的
32、引用,若无,则更改之;若有,则表中有对它的引用,若无,则更改之;若有,则看是否允许级联更改看是否允许级联更改:n 若允许若允许:则将子表中则将子表中相应数据相应数据一起进行更改;一起进行更改;n 若不允许若不允许:则更改失败则更改失败。2023年2月8日10时52分378.4 8.4 删除约束删除约束ALTER TABLE ALTER TABLE 表名表名 DROP CONSTRAINT DROP CONSTRAINT 约束名约束名o例例9 9 删除在职工表上定义的限制电删除在职工表上定义的限制电话号码的话号码的CHK_PHONECHK_PHONE约束。约束。ALTER TABLE ALTER
33、 TABLE 职工表职工表 DROP CHK_PHONE DROP CHK_PHONE2023年2月8日10时52分388.5 8.5 触发器触发器o是一段由对数据的更改操作引发的是一段由对数据的更改操作引发的自自动执行的代码动执行的代码。更改操作包括更改操作包括:UPDATEUPDATE、INSERTINSERT、DELETEDELETEo通常用于保证业务规则和数据完整性通常用于保证业务规则和数据完整性o主要优点是用户可以用编程的方法实主要优点是用户可以用编程的方法实现复杂的处理逻辑和商业规则,增强现复杂的处理逻辑和商业规则,增强了数据完整性约束的功能。了数据完整性约束的功能。2023年2月
34、8日10时52分39创建触发器创建触发器CREATE TRIGGER CREATE TRIGGER 触发器名称触发器名称ON ON 表名表名|视图名视图名 FOR|AFTER|INSTEAD OF FOR|AFTER|INSTEAD OF INSERT ,DELETE ,INSERT ,DELETE ,UPDATE UPDATE AS AS SQL SQL 语句语句2023年2月8日10时52分40注意注意o 在一个表上可以建立多个名称不同、类型各异在一个表上可以建立多个名称不同、类型各异的触发器,每个触发器可由所有三个操作引发的触发器,每个触发器可由所有三个操作引发o 对对AFTERAFTE
35、R型型触发器,可以在同一种操作上建立多触发器,可以在同一种操作上建立多个触发器;个触发器;o 对对INSTEAD OFINSTEAD OF型型触发器,在同一种操作上只能触发器,在同一种操作上只能建立一个触发器。建立一个触发器。o 大部分大部分SQLSQL语句都可用在触发器中,但所有的创语句都可用在触发器中,但所有的创建和更改数据库以及数据库对象的语句、所有建和更改数据库以及数据库对象的语句、所有的的DROPDROP语句都不允许在触发器中使用。语句都不允许在触发器中使用。2023年2月8日10时52分41两个特殊的临时表两个特殊的临时表o 在触发器中可以使用两个特殊的临时表:在触发器中可以使用两
36、个特殊的临时表:n INSERTEDINSERTEDn DELETEDDELETEDo 由系统自动创建,由系统自动创建,结构同建立触发器的表结构结构同建立触发器的表结构o 只能用在触发器代码中。只能用在触发器代码中。o INSERTEDINSERTED:保存保存INSERTINSERT操作中新插入的数据和操作中新插入的数据和UPDATEUPDATE操作中更新后的数据;操作中更新后的数据;o DELETEDDELETED:保存保存DELETEDELETE操作删除的数据和操作删除的数据和UPDATEUPDATE操作中更新前的数据操作中更新前的数据。2023年2月8日10时52分42后触发型触发器后
37、触发型触发器o当后触发型触发器执行时,引发触发当后触发型触发器执行时,引发触发器执行的数据操作语句已经执行完成器执行的数据操作语句已经执行完成2023年2月8日10时52分43执行到引发触发器执行的操作语句执行到引发触发器执行的操作语句执行触发器执行触发器执行该语句执行该语句示例:示例:维护不同表数据之间的取值约束维护不同表数据之间的取值约束o 例例1.1.针对针对职工表和工作表,限制职工工资必须在相职工表和工作表,限制职工工资必须在相应工作的最低工资到最高工资之间。应工作的最低工资到最高工资之间。CREATE Trigger tri_SalaryCREATE Trigger tri_Sala
38、ry ON ON 职工表职工表 AFTER INSERT,UPDATEAFTER INSERT,UPDATEASAS IF EXISTS(SELECT IF EXISTS(SELECT*FROM FROM 职工表职工表 a a JOIN JOIN 工作表工作表 b ON a.b ON a.工作编号工作编号=b.=b.工作编号工作编号 WHERE WHERE 工资工资 NOT BETWEEN NOT BETWEEN 最低工资最低工资 AND AND 最高工资最高工资)ROLLBACKROLLBACK -撤销操作撤销操作2023年2月8日10时52分44示例:示例:级联更新级联更新o 例例2.2.
39、对对职工表和工作表,实现工作表到职工表和工作表,实现工作表到工作编号与职工表的工作编号的级联更工作编号与职工表的工作编号的级联更新。新。CREATE Trigger tri_SalaryCREATE Trigger tri_Salary ON ON 工作表工作表 AFTER UPDATEAFTER UPDATEASAS UPDATE UPDATE 职工表职工表 SET SET 工作编号工作编号=(=(SELECT SELECT 工作编号工作编号 FROM INSERTED)FROM INSERTED)WHERE WHERE 工作编号工作编号 IN(IN(SELECT SELECT 工作编号工作
40、编号 FROM DELETED)FROM DELETED)2023年2月8日10时52分45前触发型触发器前触发型触发器o指定执行触发器而不是执行引发触发指定执行触发器而不是执行引发触发器执行的器执行的SQLSQL语句,从而替代引发语语句,从而替代引发语句的操作。句的操作。2023年2月8日10时52分46执行到引发触发器执行的操作语句执行到引发触发器执行的操作语句执行触发器执行触发器示例示例o 例例3 3 限制职工工资在最低工资到最高工资之间限制职工工资在最低工资到最高工资之间CREATE Trigger tri_SalaryCREATE Trigger tri_Salary ON ON 职
41、工表职工表 INSTEAD OF INSERTINSTEAD OF INSERTASAS IF NOT EXISTS(SELECT IF NOT EXISTS(SELECT*FROM FROM 职工表职工表 a a JOIN JOIN 工作表工作表 b ON a.b ON a.工作编号工作编号 =b.=b.工作编号工作编号 WHERE WHERE 工资工资 NOT BETWEEN NOT BETWEEN 最低工资最低工资 AND AND 最高工资最高工资)INSERT INTO INSERT INTO 职工表职工表SELECT SELECT*FROM INSERTED FROM INSERTED2023年2月8日10时52分47重做操作重做操作
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。