SQL-04数据完整性
使用SQL对数据进行完整性控制

使用SQL对数据进行完整性控制(3类完整性、CHECK短语、CONSTRAIN子句、触发器)。
用实验证实,当操作违反了完整性约束条件时,系统是如何处理的。
根据以下要求认真填写实验报告,记录所有的实验用例。
3类完整性
1.实体完整性:
(列级约束条件)
当操作违反了完整性约束条件时:
检查主码的各个属性是否为空,只要有一个为空就拒绝插入;
检查主码值是否唯一,如果不唯一则拒绝插入;
2.参照完整性:
当操作违反了完整性约束条件时:
①sc表中增加一个元组,该元组的sno属性值在表student中找不到一个元组,其sno属性值与之相等;(系统拒绝)
②sc表中修改一个元组,修改后该元组的sno属性值在表student中找不到一个元组,其sno 属性值与之相等;(系统拒绝)
③从student表中删除一个元组,造成sc表中某些元组的sno属性值在表student中找不到一个元组,其sno属性值与之相等;(系统拒绝/级联删除/设置为空值)
④从student表中修改一个元组,造成sc表中某些元组的sno属性值在表student中找不到一个元组,其sno属性值与之相等;(系统拒绝/级联删除/设置为空值)
3.用户定义的完整性:
列值非空、列值唯一、检查列值是否满足一个条件表达式(check短语)
当往表中插入元组或修改属性的值时,关系数据库管理系统将检查属性上的约束条件是否被满足,如果不满足则操作被拒绝执行:
Check语句并没有起约束作用:(在MySQL中check子句会被分析,但是是忽略的)
CONSTRAIN子句
触发器。
第12讲 SQL-数据库的完整性

——表级约束
例2:定义SC表,并设置主码。
CREATE TABLE SC (Sno CHAR(5), Cno CHAR(5), Grade SMALLINT, PRIMARY KEY (SNO,CNO) ); 总结: 单属性主码既可以是列级约束,也可以是表级约束; 多属性主码只能是表级约束。
实体完整性检查和违约处理
5.3 用户定义的完整性
在CREATE TABLE中根据应用要求,定义数据必 须满足的语义要求,包括:
NOT NULL:列值非空 UNIQE:列值唯一
CHECK:检查列值是否满足一个布尔表达式
例4:定义Student表,并设置主码, 要求 Sname 非空且唯一,Ssex只能取值‘男’或
CONSTRAINT C2 CHECK(Ssex IN (‘男’,‘女’)) , Sage SMALLINT,
Sdept );
CONSTRAINT C3 CHECK(Sage<30) ,
CHAR(5)
例7:教务管理数据库中存放有教师信息及院系 信息,其中有Dept(Dno,Dname,Dtel). 定义Teacher(Eno,Ename,Pos,Sal,Deduct,Dno), 设置该表的外码,并要求应发工资不低于3000, 约束名分别为C1,C2。
常用工具
查看触发器 sp_helptext <触发器名 > 设置有效无效 alter table enable | disable trigger <触发器名 > 删除触发器 drop trigger <触发器名 >
有关触发器的参考资料
/vigorlin/article/details/1 818948 /liaolian9948/article/detai ls/5466427 /jinjazz/article/details/34 20299
SQL语言基础:SQL中的数据完整性约束用法

SQL语言基础:SQL中的数据完整性约束用法前言数据库的完整性是指数据库正确性和相容性,是防止合法用户使用数据库时向数据库加入不符合语义的数据,从而保证了数据库中的数据是正确的,避免非法的更新操作。
1、主键约束1.1 完整性约束条件完整性约束条件作用的对象有关系、元组、列三种。
1.2 完整性控制主要有三个方面的功能:定义功能、检测功能、处理功能。
检查是否违背完整性约束的时机有立即执行约束、延时执行约束。
最重要的完整性约束条件是实体完整性、参照完整性。
1.3 实体完整性 Primary Key在关系中只能有一个主键。
声明主键调入方法:•1、将 Primary Key 保留字加在属性类型之后。
比如 Sno char(10) Primary Key•2、在属性列表中引入一个新元素,该元素包含保留字Primary Key 和圆括号括起来的形成该键的属性或属性组列表。
比如:Primary Key (Sno)1.4 外键(Foreign Key)约束语法格式:Foreign Key (属性名) references 表名(属性名)[ON DELETE][CASCADE][SET NULL]说明:•Foreign Key 定义那些列为外码;•references 指明外码属于哪个表的主码;•ON DELETE CASCADE 指明删除记录同时删除关系中的记录;•SET NULL 表示置为空值方式。
比如:Foreign Key Sno references Student (Sno)1.5 属性值上的约束主要包括:•not null 不为空•unique 唯一约束•check 设定属性值需要满足的条件。
比如:age Number(3) check (age>0 and age <180)1.6 全局约束全局约束是值一些比较复杂的完整性约束,这些约束涉及多个属性间的联系或多个不同关系间的联系。
有基于元组的检查子句、断言。
SQL数据完整性

SQL数据完整性1.数据的完整性1. 什么是数据的完整性保证⽤户输⼊的数据保存到数据库中是正确的2.添加数据完整性在创建表的时候给表添加约束3.完整性分类实体完整性、域完整性、引⽤完整性2.完整性的分类1.实体完整性表中的⼀⾏(⼀条记录)代表⼀个实体(entity)实体完整性的作⽤:标记每⼀⾏数据不重复。
⾏级约束约束类型:主键约束(primary key):每个表中要有⼀个主键,数据唯⼀,且不能为null创建主键的⽅式:create table pe(ID BIGINT PRIMARY key, name VARCHAR(50));create table pe2(ID BIGINT, name VARCHAR(50), PRIMARY KEY(ID));联合主键:两个字段数据同时相同时,才违反联合主键约束。
create table stu2(ID BIGINT,snum BIGINT, name VARCHAR(50),PRIMARY KEY(ID, snum));更改表结构,设置主键:ALTER TABLE student ADD CONSTRAINT PRIMARY KEY(sid);唯⼀约束:指定列的数据不能重复,可以为空值CREATE TABLE table1(id int PRIMARY KEY, name VARCHAR(50) UNIQUE); name不能重复⾃动增长列指定列的数据⾃动增长,即使数据删除,依然继续增长CREATE TABLE table1(id int PRIMARY KEY auto_increment,name varchar (20) UNIQUE);2.域完整性使⽤:限制此单元格的数据正确,不对照此列的其他单元格⽐较域,代表当前单元格域完整性约束:数据类型:数值、⽇期、字符串⾮空约束(not null) CREATE TABLE table1(id int PRIMARY KEY auto_increment,name varchar (20) UNIQUE not null);-- 默认值约束 (default)CREATE TABLE table1(id int PRIMARY KEY auto_increment,name varchar (20) UNIQUE not null,sex char(1) default '男')-- 设置默认值为男3. 参照完整性什么是参照完整性指表与表之间的⼀种对应关系通常情况下可以通过设置两张表之间的主键、外键关系,或者编写两表的触发器来实现。
SQLServer第4章(第二部分)设计数据完整性

REFERENCES 参照主键表[ (参照列) ] [ ON DELETE CASCADE | ON UPDATE CASCADE ][,...])
说明:语法格式1定义单列外键约束 。ON DELETE CASCADE表示级联删除,即父表中删除被引用行时, 也将从引用表中删除引用行; ON UPDATE CASCADE表示级联更新,即父表中更新被引用行时, 也将在引用表中更新引用行。
第4章 设计数据的完整性
1数据完整性 实体完整性 域完整性 参照完整性 自定义完整 性 完整性实现 2使用约束 3默认技术 4使用规章 5标识列 6实训 7小结
1数据完整性的概念〔4〕
➢1.4用户定义完整性 〔User- defined Integrity〕
这是由用户定义的完整性。 用户定义完整性可以定义不属于其他 任何完整性分类的特定业务规章
➢ 解除绑定默认
➢ 删除默认
4使用规章
➢ 创立规章 ➢ 绑定规章
➢ 解除绑定规章
➢ 删除规章
5使用IDENTITY〔标识符〕列 ➢ 创立IDENTITY列 ➢ 使用 IDENTITY函数
第4章 设计数据的完整性
1数据完整性 2使用约束 3默认技术 4使用规章 5标识列 6实训 7小结
➢定义 ➢类型
➢ [NOT ]NULL〔非空〕约束
2 使用约束实施数据完整性 ➢ PRIMARY KEY〔主键〕约束
➢ UNIQUE〔惟一性〕约束 ➢ CHECK〔检查〕约束 ➢ DEFAULT〔默认〕约束 ➢ FOREIGN KEY〔外键〕约束
第4章 设计数据的完整性
第5章sql数据库完整性约束

(2)向已有表中添加默认值约束,其语法格式如下。 ALTER TABLE 表名 ADD [CONSTRAINT 约束名] DEFAULT 默认值 FOR 列 [,…]) 【例5.10】在xs表的专业列添加一个默认约束,默认值 为“信息管理”,然后添加一条新记录。 --添加默认值约束 (5-12) ALTER TABLE xs ADD CONSTRAINT df_zy DEFAULT '信息管理' FOR 专业 --插入测试记录 INSERT xs(学号,姓名,出生时间,总学分) VALUES('2006030116','张三','87/06/21',20)
字段名 部门编号 部门名称 电话号码
数据类型 char(5) varchar(10) char(13)
允许空 否,主键 否 是
CREATE TABLE bm (5-1) ( 部门编号 CHAR(5) NOT NULL CONSTRAINT pk_bh PRIMARY KEY, 部门名称 VARCHAR(10) NOT NULL, 电话号码 CHAR(13) )
(3)删除唯一约束,其语法格式如下。 ALTER TABLE 表名 DROP CONSTRAINT 约束名
【例5.5】删除kc_new中的唯一约束ix_kcm1 。 USE xsgl (5-7) GO ALTER TABLE kc_new DROP CONSTRAINT ix_kcm1 GO
5.2.3 检查(CHECK)约束
(2)向已有表中添加主键约束 其语法格式如下。
ALTER TABLE 表名 ADD [CONSTRAINT 约束名] PRIMARY KEY(列名1[,…n]))
例:先用图形方式删除cj表中的主键,然后用命令方式添 加主键为学号和课程号,主键名为pk_xhkch。
实验四 实现SQL的数据完整性

实验四实现SQL的数据完整性姓名:林虹学号:20104510学时:4实验日期:2012年3月14日、2012年3月21日一、实验目的通过本次实验使学生掌握如何实现SQL的数据完整性二、实验内容1、约束的创建与删除。
2、规则的创建与删除。
3、使用默认。
三、实验环境1、Windows XP2、SQL Server 2005四、实验步骤利用教材数据库,文件名为“STUDENT”做如下操作。
1、在student数据库中创建一个民族表(民族代码,民族名称)将民族代码指定为主键。
操作步骤:方法1:菜单命令法(1)在对象资源管理器中展开student数据库,右击“表”项,在弹出的快捷菜单中选择“新建表”。
(2)在打开的表设计器中设置表结构。
在“列名”下输入“民族代码”、“民族名称”两个列名,并且不能勾选“允许空”下面的复选框。
(3)选定“民族代码”这一列,右击它,在弹出的快捷菜单中选择“设置主键”命令。
(4)关闭表设计器,保存表结构,表名为“民族”。
方法2:T-SQL语句法(1)在查询分析器中输入以下命令:use studentcreate table民族(民族代码char(10)not null primary key,民族名称char(20))(2)选定所有命令行,单击“执行”按钮。
2、在student数据库中的“课程注册”表,指定字段注册号为表的主键。
操作步骤:(1)在查询分析器中输入以下命令:use studentalter table课程注册add primary key(注册号)(2)选定所有命令行,单击“执行”按钮。
3、在student数据库中,对“民族”表中的民族名称字段创建一个惟一约束。
操作步骤:(1)在查询分析器中输入以下命令:use studentalter table民族add unique(民族名称)(2)选定所有命令行,单击“执行”按钮。
4、在student数据库中为“学生”表中出生日期字段创建一个检查约束,以保证输入的数据大于1980年1月1日而小于2000年1月1日。
六、SQL数据完整性

用户定义的完整性
用户定义的完整性就是针对某一具体应用的数据 必须满足的语义要求 RDBMS提供,而不必由应用程序承担
属性上的约束条件的定义
CREATE TABLE时定义
列值非空(NOT NULL)
列值唯一(UNIQUE)
检查列值是否满足一个布尔表达式(CHECK)
属性上的约束条件的定义(续)
*/
Location CHAR(10), PRIMARY KEY (Deptno)
);
属性上的约束条件的定义(续) 用CHECK短语指定列值应该满足的条件
[例7] Student表的Ssex只允许取“男”或“女”。
CREATE TABLE Student (Sno CHAR(9) PRIMARY KEY,
LOGO
第六章
数据完整性
教学目标
数据完整性概述
学会使用约束来实施数据完整性保护
掌握使用规则来实现数据完整性保护
重点和难点
重点:
PRIMARY KEY 、UNIQUE
规则的创建与使用 默认值的创建与使用 难点: 绑定与松绑
数据库完整性 数据库的完整性
数据的正确性和相容性 数据的完整性和安全性是两个不同概念
规则创建示例1
例1 创建雇佣日期规则hire_date_rule
create rule hire_date_rule
as @hire_date
>= '1980-01-01'
and @hire_date
<= getdate()
规则创建示例2
例2 创建工作级别规则job_level_rule
create rule job_level_rule
sql实验讲义—数据完整性试验、索引

实验四数据完整性试验一实验目的1理解实体完整性、参照完整性、用户自定义完整性的作用2 特别掌握外码的作用。
二实验要求记录试验中遇到的问题,并写出原因。
三实验内容1 实体完整性学号姓名性别年龄系科3001 赵达男20 SX3002 杨丽女21 JSJ3001 李寅女21 SX输入上述数据,记录出现的问题,说明原因。
在创建表的时候出现错误信息”将截断字符串和二进制代码”,因为一个汉字在UTF-8编码下占用字节是3 所以应该将属性sex改成char(3)select * from student 查看你输入了几行数据。
2 course 表数据的输入Cno Cname Cpno Ccredit1081 电子商务 43 SC 表数据的输入Sno Cno Grade3001 1081 903001 1081 79输入上述数据,记录出现的问题,说明原因。
错误信息”违反了PRIMARY KEY 约束“PK__sc__905C05335F5775AE”。
不能在对象“dbo.sc”中插入重复键。
重复键值为(3001, 1801)”因为主键是sno与cno的联合,而插入的数据重复,所以破坏了数据库实体完整性性的规则!2 用户自定义完整性约束表student 有用户自定义约束:性别不能为空且取值范围为{男,女}年龄大于16岁表course 的自定义约束:Ccredit 取值范围{ 0 ,1,2,3,4,5 }课程表的每一行的Cno 与cpno 不可相同1 student 表数据输入学号姓名性别年龄系科3005 赵达男14 SX3006 杨丽南21 JSJ输入上述数据,记录出现的问题,说明原因。
错误信息” INSERT 语句与CHECK 约束"CK__student__age__5165187F"冲突。
该冲突发生于数据库"school",表"dbo.student", column 'age'。
SQL 数据完整性

1、使用create table语句创建约束 create table table_name ( column_name data_type [ default constraint_expression ] [ <table_constraint>::= [ constraint constraint_name ] { [ null | not null ] | [ { primary key | unique } [ clustered | nonclustered ] ] | [ foreign key ] references ref_table [ (ref_column) ] | check [ not for replication ] }] [,…n] )
例:创建列级核查约束,无约束名。 use 学生管理数据库 go create table 成绩表1 ( 学号 varchar(9), 课程号 varchar(4), 成绩 tinyint check(成绩 between 0 and 100) )
2、使用查询分析器创建check约束
2、使用查询分析器创建check约束
LOGO
第六章
数据完整性 主讲:邹亚千
引入
数据完整性(Data Integrity)是指存储在数据库 中的数据,应该保持一致性和可靠性。在输入数据时, 由于不可避免的种种原因,会发生输入无效或错误信息。 如何保持输入的数据符合规定,是数据库系统,尤其是 多用户的关系数据库系统首要关注的问题。
学习目标
当用户没有为定义为default约束的字段输入数据时, 由default 约束提供 默认的值。
例: use 学生数据库 go create table 成绩表 (学号 varchar(9) constraint fk_学号 not null foreign key references 学生表(学号), 课程号 varchar(4) constraint fk_课程号 not null foreign key references 课程表(课程号), constraint pk_学号_课程号 primary key(学号,课程号), 成绩 tinyint constraint d_成绩 default '0' )
SQL Server实验4:数据完整性与视图

云南大学软件学院实验报告课程:数据库原理与实用技术任课教师:张艳实验指导教师(签名):姓名:学号:专业:日期:成绩:SQL Server 实验4 数据完整性与视图4-1 数据完整性一、实验目的(1)理解数据完整性的概念与分类(2)掌握规则、默认的使用方法。
(3)掌握用户自定义完整性的使用。
二、实验内容1、创建规则(用语句方法创建)(1)创建入学日期规则“Enter_University_date_rule”,假定该学校于1923年4月30日创建。
要求:入学日期必须大于等于学校创建日期,并且小于等于当前日期(2)创建学生年龄规则“Age_rule”。
要求:学生年龄必须在15~30岁之间(3)创建学生性别规则“Sex_rule”。
要求:性别只能为“男”或“女”(4)创建学生成绩规则“Score_rule”。
要求:学生成绩只能在0~100之间2、使用存储过程对规则进行绑定与解除绑定操作(1)修改“学生管理数据库”中的“学生情况表”,添加属性“入学日期”。
将规则Enter_University_date_rule与入学日期进行绑定(2)在该表中插入数据记录(3)解除绑定,再次插入该数据,查看执行结果。
3、用语句的方法查看规则4、删除规则Enter_University_date_rule5、创建默认(会用图形和语句方法创建)(1)创建默认时间“Time_default”为当前系统时间(2)创建默认入学年龄“Age_default”为18岁6、使用存储过程对默认进行绑定与解除绑定操作(1)将默认对象“Time_default”和“Age_default”与上表中的“入学日期”和“年龄”进行绑定,并插入数据(2)解除绑定,再次插入该数据,查看执行结果。
7、用图形和语句的方法查看默认8、删除默认9、创建声明式默认:在创建表的过程中创建声明式默认(1)创建表“default_example”,表中包含字段pid、name、sex、age。
SQLserver——基础篇之数据完整性

SQLserver——基础篇之数据完整性定义:保证数据库中的数据在逻辑上的⼀致性、正确性和可靠性。
作⽤:防⽌⽆效数据或错误数据进⼊数据库数据完整性包括:实体完整性、域完整性和参照完整性实体完整性规定表的每⼀⾏记录在表中是唯⼀的实体完整性的实现⽅式包括:主键约束、⾃增约束、唯⼀约束主键约束(Primary Key,PK)⽤于识别每⼀条记录,添加主键【右击>设置主键】或者【alter table表名 add constraint 约束名primary key(字段名)】;每个数据表只有⼀个主键,字段内容不能⼜重复值且不能为空⾃增约束(IDENTITIY):【列属性>标识规范】注意:有⼀定的增长规则只能对整形数据进⾏设置不能对⾃有增约束的字段内容进⾏输⼊删除通常在整型数据的主键上设置⾃增约束,每次报错都会有⼀次⾃增值唯⼀约束(Upique):【右击>索引/键>添加】或者【alter table 表名 add constraint 约束名 unique(字段名)】。
在⼀个字段或⼀组字段中的数据与表中的其他数据想⽐试唯⼀的。
注意:主键约束⼀定是唯⼀的,⽽唯⼀约束不⼀定是唯⼀的域完整性保证指定列的数据具有正确的数据类型喝有效的数据范围域完整性的实现⽅式包括:是否为空、CHECK约束、默认约束是否为空:not nullCHECK约束:限制字段值的范围【右击>CHECK约束>添加>表达式】或者【alter table 表名 add constraint 约束名 check(内容)】默认值约束:【列属性>常规>默认值或绑定】或者【alter table 表名 add constraint 约束名 default(默认值) for 字段名】参照完整性两表之间的约束,要求⼀张表的某些列受到另⼀张表的某列的限制主表:被参照的表 从表:参照表主键:主表中被参照的列 外键:从表中的参照列设置外键:【从表列>右击>关系>添加>表和列规范>设置主键表和外键表>确定】或者【alter table 表名 add constraint 约束名 foreignkey(外键字段名) referencese 主表(关联主键列)】主键表的列名可以和外键表的列名不同)。
SQL实验六索引和数据完整性的使用

SQL实验六索引和数据完整性的使用索引是一种特殊的数据结构,它能够提高数据库的查询和性能。
索引可以加快数据的检索速度,减少数据库的IO操作,提高系统的响应速度。
在实际的数据库操作中,索引的使用是非常重要的,可以大大提高数据库的查询效率。
索引的使用可以分为两种情况:一种是在数据库表中创建索引,比如在一些字段上创建索引;另一种是在查询语句中使用索引,比如通过WHERE子句中的条件来使用索引。
在创建索引的时候,我们需要考虑到几个因素:索引的字段选择、索引的类型、索引的存储方式等。
索引的字段选择是非常重要的,一般来说,我们应该选择那些经常被查询的字段作为索引字段,这样可以提高查询的速度。
同时,我们还需要考虑到索引的唯一性,如果一个字段的值是唯一的,那么我们可以将其作为主键索引来使用,这样可以加快查询速度。
索引的类型有很多种,常见的有B树索引、哈希索引、全文索引等。
不同的索引类型适用于不同的场景,我们需要根据具体的需求来选择合适的索引类型。
索引的存储方式也有很多种,一般来说,索引可以存储在内存中,也可以存储在磁盘中。
如果数据量比较大,我们可以将索引存储在磁盘中,这样可以节省内存资源。
但是需要注意的是,将索引存储在磁盘中会增加IO操作的时间,降低查询速度。
在查询语句中使用索引也是非常重要的。
通过在WHERE子句中增加索引字段的条件,可以加快查询速度。
同时,我们还可以通过ORDERBY子句来对查询结果进行排序,这样可以进一步提高查询效率。
除了索引之外,数据完整性也是数据库设计中非常重要的一部分。
数据完整性保证了数据库中数据的一致性和准确性,可以防止数据的丢失和损坏。
数据完整性的实现可以通过主键约束、外键约束、唯一约束和检查约束等手段来实现。
主键约束可以保证表中每一行的数据都是唯一的,可以防止数据的重复和错误。
外键约束可以保证表与表之间的关系的有效性,可以防止数据的错误和不一致。
唯一约束可以保证一些字段的值在表中是唯一的,可以防止数据的重复和错误。
使用SQL进行数据管理的注意事项

使用SQL进行数据管理的注意事项在当今信息时代,数据管理成为了企业和个人不可或缺的一部分。
而SQL (Structured Query Language)作为一种专门用于管理和操作关系型数据库的语言,被广泛应用于各个领域。
然而,要正确使用SQL进行数据管理,我们需要注意以下几个方面。
一、数据完整性的保证数据完整性是指数据库中数据的准确性和一致性。
在使用SQL进行数据管理时,我们需要遵循以下几点来保证数据的完整性。
1. 设定合适的数据类型和约束:在创建数据库表时,我们需要为每个字段选择合适的数据类型,并设置相应的约束条件。
例如,可以使用INT类型来存储整数,使用VARCHAR类型来存储字符串,并设置NOT NULL约束来确保字段不为空。
2. 使用外键关联表:通过使用外键关联表,我们可以保证数据在不同表之间的一致性。
外键可以用来建立表与表之间的关系,从而确保数据的完整性。
3. 使用事务管理:在进行复杂的数据操作时,我们可以使用事务来保证数据的一致性。
事务可以将一系列操作看作一个整体,要么全部执行成功,要么全部回滚,从而避免了数据不一致的情况。
二、性能优化的考虑在进行大规模数据管理时,性能优化是一个非常重要的问题。
以下是一些提高SQL性能的注意事项。
1. 创建合适的索引:索引可以加快数据库的查询速度。
在创建索引时,我们需要根据实际情况选择合适的字段,并避免创建过多的索引,以免影响写入性能。
2. 避免全表扫描:全表扫描是一种低效的查询方式,会消耗大量的系统资源。
我们可以通过合理设计查询条件和使用索引来避免全表扫描。
3. 合理分配存储空间:在创建数据库表时,我们需要根据数据量的大小来合理分配存储空间。
过小的存储空间会导致频繁的扩容操作,而过大的存储空间则会浪费资源。
三、数据安全的保护数据安全是数据管理中不可忽视的一部分。
以下是一些保护数据安全的注意事项。
1. 使用合适的权限管理:在数据库中,我们可以为不同的用户设置不同的权限。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
练习4 约束、默认和规则4.1上机目的1、练习使用企业管理器和T-SQL命令在查询分析器中创建表,管理表,熟悉并逐步掌握其中的步骤和对应语句。
2、在企业管理器和查询分析器中练习约束、规则、默认的设置,通过练习逐步掌握约束的种类,作用和创建方法3、了解数据库关系图的作用,掌握数据库关系图的建立方法。
4.2 上机练习预备知识点4.2.1 数据完整性1、数据完整性是指数据库中数据的正确性和一致性,是衡量数据库质量的一个重要标准。
2、数据完整性包括:实体完整性、区域完整性、参照完整性、自定义完整性。
①实体完整性:确保数据库中所有实体的唯一性,也就是不应有完全相同的数据记录。
实现方法:设定主键、设定唯一键、设定唯一索引、设置标识②区域完整性:要求数据表中的数据位于某一个特定的允许范围内。
实现方法:设定默认值、设定核查约束、设定外键约束、设定规则③参照完整性:用来维护相关数据表之间数据一致性的手段,避免因一个数据表的记录改变而造成另一个数据表内的数据变成无效的值。
实现方法:设定外键约束、核查约束、触发器和存储过程④用户自定义完整性:由用户根据实际应用中的需要自行定义。
实现方法:规则、触发器、存储过程等。
4.2.2 约束1、实现数据完整性最重要的方法,主要目的是限制输入到表中的数值的范围。
字段级约束:是数据表中字段定义的一个部分,只能应用于数据表中的一个字段。
如:为性别设置核查约束,只能输入“男”或者“女”,不能输入其他内容。
数据表级约束:独立于数据表的字段定义之外,它可以应用于数据表中的多个字段。
如将表中的几个字段组合设置为主键。
2、约束的种类:①主键(PRIMARY KEY)约束唯一标识表中的每一行的列或者列的组合,可以强制表的实体完整性。
主键不允许为空。
②外键(FOREIGN KEY)约束若列或者列的组合不是本表的关键字,而是另一个表的关键字,则称这些列或者列的组合是外键。
一般表与表之间通过主键和外键进行连接,通过它可以强制表与表之间实现参照完整性。
外键约束要求列中的每个值在被引用表对应的被引用列中都存在。
③唯一(UNIQUE)约束用于确保非主键字段中数据的唯一性。
③核查(CHECK)约束用于限制输入到一列或多列的值的范围,从逻辑表达式判断数据的有效性。
④默认(Default)约束向数据表中插入记录时,如果用户没有指定该列的值,而该列需要一个明确值的情况下,则插入默认约束定义的值。
⑥非空(Not null)约束该约束的列不允许使用空值。
4.2.3 实现主键约束1、企业管理器中:在表设计视图中实现。
如图4-1所示如果是多个字段设置主键的情况,安Ctrl 键同时选中几个字段,设置主键。
图4-1 设置主键2、定义的T-SQL 语句:[CONSTRAINT constraint_name] PRIMARY KEY [(CONSTRAINT :约束 constraint_name :约束名称 3、创建表时设置主键单个字段设置主键(字段级约束)例1 项目编号 int CONSTRAINT PK_pno PRIMARY KEY 或者 项目编号 int PRIMARY KEY 多个字段设置主键(表级约束) 例2 项目编号 int,项目名称 char(10),CONSTRAINT PK_pno_pname PRIMARY KEY(项目编号,项目名称) 注:以上两个例子,只是创建表语句的一部分,不是全部。
4、修改表时添加主键 ALTER TABLE table_nameADD [CONSTRAINT constraint_name] PRIMARY KEY [(5、修改表时删除主键 ALTER TABLE table_name DROP CONSTRAINT constraint_name注:所有删除约束的T-SQL 语句相同,后面不再赘述。
6、设置主键的注意点①修改表上已经存在的主键时,只能先删除原有主键再重新建立一个新的主键约束。
②当主键被别的表引用时,不允许删除主键约束,除非首先将引用主键的外键删除。
③区分字段级主键约束与表级主键约束。
④使用相关语句删除主键约束时,会用到约束名称。
*7、可以使用sp_pkeys table_name 查看定义好的主键约束。
4.2.4 实现唯一约束1、企业管理器中:打开表设计视图,选择“属性”按钮,如图4-2所示在索引/键选项页中新建唯一约束。
图4-2 在表设计视图属性对话框设置唯一约束2、定义的T-SQL语句:[CONSTRAINT constrain_name] UNIQUE [(字段名[,…n]) ]参数说明:UNIQUE:唯一3、创建表时设置唯一约束单个字段设置唯一约束(字段级约束)例3 部门名称char(18) null CONSTRAINT UN_dname UNIQUE 或者部门名称char(18) null UNIQUE多个字段设置唯一约束(表级约束)例4 部门名称char(10) ,部门负责人char(10) ,CONSTRAINT UN_dname_dm UNIQUE (部门名称,部门负责人)注:以上两个例子,只是创建表语句的一部分,不是全部。
4、修改表时添加唯一约束所用的语句和添加主键约束相似,只是关键字的不同ALTER TABLE table_nameADD [CONSTRAINT constraint_name] UNIQUE [(字段名[,…n])] 5、唯一约束和主键约束的区别..: ①UNIQUE 约束用于非主键的一列或列组合;②一个表可以定义多个UNIQUE 约束,而只能定义一个PRIMAYR KEY 约束;③UNIQUE 约束可以用于允许空值的列,而PRIMAYR KEY 约束则不能用于允许空值的列。
4.2.5 实现外键约束1、企业管理器中:打开表设计视图,选择“属性”按钮,打开“关系”选项页,如图4-3所示图4-3在表设计视图属性对话框设置外键约束2、定义的T-SQL 语句:[CONSTRAINT constrain_name] FOREIGN KEY [(字段名[,...n]) ] 从表的列名 REFERENCES ref_table (ref_column[...n]) 主表名和主表中对应的列名 [ ON DELETE {CASCADE|NO ACTION}] [ ON UPDATE {CASCADE|NO ACTION}] 参数说明:[ ON DELETE {CASCADE|NO ACTION}] :如果指定CASCADE ,执行级联删除相关记录;如果指定NO ACTION ,则在删除父表中的被引用到的记录时,SQL Server 将返回一个错误操作信息并拒绝删除操作。
[ ON UPDATE {CASCADE|NO ACTION}]:如果指定CASCADE ,执行级联更新相关记录;如果指定NO ACTION ,则在更新父表中的被引用到的记录时,SQL Server 将返回一个错误操作信息并拒绝更新操作。
[ NOT FOR PLICATION]:数据通过复制添加到数据表时,不执行外键约束。
3、创建表时设置外键约束例5 若已有员工表(员工编号,员工姓名)其中“员工编号”是主键,接下来定义项目表(项目编号,项目负责人),那么“项目负责人”就可以定义一个外键约束,它与“员工表”主键的“员工编号”进行关联。
项目负责人 char(6) null CONSTRAINT FK_dno FOREIGN KEY REFERENCES 员工表 (员工编号)或者 项目负责人 char(6) null FOREIGN KEY REFERENCES 员工表 (员工编号) 4、修改表时添加外键约束 ALTER TABLE 项目表ADD CONSTRAINT FK_pname FOREIGN KEY (项目负责人) REFERENCES 员工表 (员工编号) 5、说明①级联更新相关记录:当主键表中的主键值被修改后,系统将自动强制的修改外键表中所有外键值与主键表中被修改主键值相同的行,以保证表间的参照完整性。
②级联删除相关记录:当主键表中的主键值所在行被删除后,系统将自动强制的删除外键表中所有外键值与主键表中被删除主键值相同的行,以保证表间的参照完整性。
③一个表可以有多个外键约束。
④外键约束只能引用被引用表中为主键(PRIMARY KEY )或者唯一约束(UNIQUE )的列或者被引用表中在唯一索引(UNIQUE INDEX )内引用的列。
⑤主键和外键的数据类型和长度必须一致。
⑥定义表间参照关系:先定义主表的主键,再对从表定义外键约束。
4.2.6 实现核查约束1、企业管理器中:打开表设计视图,选择“属性”按钮,打开“CHECK 约束”选项页,如图4-4所示图4-4 在表设计视图属性对话框设置CHECK 约束2、定义的T-SQL 语句:[CONSTRAINT constraint_name] CHECK (logical_expression) 参数说明:logical_expression :逻辑表达式返回TRUE 或 FALSE 3、创建表时设置核查约束例 6 月薪 smallmaney nullCONSTRAINT CK_esa CHECK (月薪>=1000 AND 月薪<=2000)或者 月薪 smallmaney null CHECK (月薪>=1000 AND 月薪<=2000)4、修改表时添加核查约束例7 ALTER TABLE 员工表ADD CONSTRAINT CK_no CHECK (员工编号like ‘[A~Z][0~9][0~9][0~9]’)将员工编号限定为4位,其中第一位的取值范围是’A’~’Z’或者’a’~’z’,其他位为’0’~’9’,输入其他符号被认为无效。
5、注意①列可以有任意多个核查约束,并且约束条件中可以包含用AND和OR组合起来的多个逻辑表达式。
②约束条件必须取值为布尔表达式,并且不能引用其他表。
③使用T-SQL修改核查约束,必须先删除已有的核查约束,然后再重新定义。
4.2.7 实现默认约束1、在企业管理器中,在表设计视图中实现。
如图4-5所示图4-5 在表设计视图设置默认约束2、创建表时设置默认约束例7 性别char(2) notnull DEFAULT ‘男’3、修改表时添加默认约束例8 ALTER TABLE 员工表ADD CONSTRAINT Default_sex DEFAULT ‘男’FOR 性别4.2.8 默认对象1、默认是一种数据库对象,可以绑定到数据表的一列或多列上,产生与DEFAULT约束相同的作用。
2、默认和DEFAULT约束不同点:①DEFAULT约束在创建表或修改表时定义,嵌入到被定义的表的结构中,删除表时DEFAULT约束也被删除。