使用SQL对数据进行完整性控制
SQL Server数据库应用开发技术 第六章

6.2 使用约束
6.2.1 空约束(NULL)、非空约束(NOT NULL)
1. 用SQL Server Management Studio实现 【例6.1】设置学生表中字段学号、姓名、性别、入学 时间不允许为空。 1)打开SQL Server Management Studio,在对象资源管理 器中展开教务管理系统,展开“表”结点。 2)选择“学生表”,单击右键,选择“修改”进入表设计 器进行表结构设计,如图6.1所示,分别将学号、姓名 、性别、入学时间字段后的允许空复选框去掉对勾。 3)修改完毕后单击工具栏上的“保存”图标或选择菜单“ 文件”下的“保存”项,关闭窗口即可。
第6章 数据完整性实施
6.1 数据完整性实施方法 6.2 使用约束
6.3 使用默认
6.4 使用规则
6.5 使用标识列
小结
6.1 数据完整性实施方法
有两种方式可以实现数据完整性,即声明数据完 整性和过程数据完整性。 1.声明数据完整性 使用声明数据完整性就是通过在对象定义中来实 现,即定义数据必须满足的条件作为对象定义的一部 分。它包括使用各种约束、默认和规则。 实现数据完整性的首选方法是使用声明完整性。 2.过程完整性 过程数据完整性是通过在脚本语言中定义来实现 的。当执行这些脚本时,就可以强制完整性的实现。 过程数据完整性的方式包括使用触发器和存储过程。 也可以在客户机或服务器上使用其他的编程语言和工 具实现。
【例6.7】创建学生表,对字段身份证号设置唯一约束。
返回目录
6.2 使用约束
6.2.3 唯一约束(UNIQUE)
由于一个表只能定义一个主键,而实际应用中表中 不止一列希望值是唯一的,例如身份证号一般不会做主 键,但它的值也应确保是唯一的,这时就可使用唯一约 束来确保唯一性了。与主键不同的是一个表可以定义多 个 UNIQUE 约束,且定义 UNIQUE 约束列允许空值。不 过由于唯一性,空值也只能出现一次。
数据库实验4 索引、数据完整性与安全性

实验四索引、数据完整性与安全性一、实验目的(1) 掌握利用SQL Server Management Studio和SQL语言建立、删除索引的方法;(2) 掌握利用SQL Server Management Studio和SQL语言实现数据完整性的方法;(3) 掌握在SQL Server Management Studio中实现数据安全性管理的方法。
二、实验原理1.索引在关系型数据库中,索引是一种可以加快数据检索的数据库结构。
SQL Server系统中主要有两种类型的索引,即聚集索引、非聚集索引。
(1)聚集索引聚集索引定义了数据在表中存储的物理顺序。
一个表只能定义一个聚集索引。
(2)非聚集索引非聚集索引并不存储表数据本身。
相反,非聚集索引只存储指向表数据的指针,该指针作为索引键的一部分,因此,在一个表中同时可以存在多个非聚集索引。
(3)利用SQL命令建立索引简化语法格式:CREATE [UNIQUE] [CLUSTERED|NONCLUSTERED]INDEX index_name ON {table|view}(column|ASC|DESC][,…n])其中:UNIQUE。
可选。
该选项用于通知SQL Server索引中列出的列的值是每行唯一的。
如果试图插入重复的行,则该选项会强制SQL Server返回一个错误信息。
CLUSTERED或NONCLUSTERED。
可选。
如果这两个选项都没有被明确列出,则默认将索引创建为NONCLUSTERED(非聚集索引)。
(4)通过SQL命令删除索引语法格式:DROP INDEX ‘table.index|view.index’[,…n]2.表主键和UNIQUE约束表主键通过表数据中一个列或者多个列组合的数据来唯一标识表中的每一行数据。
即表主键就是用来约束数据表中不能存在相同的两行数据。
在SQL Server系统中,定义表的主键可以在创建表的同时定义,也可以给已有的表添加主键。
使用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子句
触发器。
数据库管理与开发项目教程(SQL Server 2019)第3版 项目八 实现数据完整性

/*定义列名、数据类型、
是否空值
[[CONSTRAINT check_name] CHECK (logical_expression)][,…n]) /*定义
CHECK约束
【例8-1】 在xs数据库中创建XSXX表,并定义CHECK约束。
10
项目8 实现数据完整性 ->任务1 实现域完整性
任务1-2 CHECK约束
项目8 实现数据完整性 ->任务1 实现域完整性
任务1-2 CHECK约束
CHECK约束实际上是字段输入内容的验证规则,表示一个字段的输入内容
必须满足CHECK约束的条件,如果不满足,数据就无法正常输入。
CHECK约束可以作为表定义的一部分在创建表时创建,也可以添加到现有表中。
表和列可以包含多个CHECK约束。允许修改或删除现有的CHECK约束。
【项目描述】
为xs数据库创建CHECK约束、规则、DEFAULT约束、默认值对象、索引、PRIMARY KEY约束、 UNIQUE约束、FOREIGN KEY约束实现数据完整性保护。
项目8 实现数据完整性
【项目分析】 项目4在数据库xs中建立了数据表,在向表中输入数据时,由于种种原因,有
时会输入无效或错误的信息。比如,对不同的学生输入了相同的学号,“性别” 字段的值输入了非法数据,相同的数据行被多次输入,学生成绩表中出现了学生 档案表中不存在的学号等。之所以会出现这些错误信息,是因为没有实现数据完 整性。为避免此类情况发生,本项目主要介绍如何通过实施数据完整性来解决上 述问题,以此保证数据输入的正确性、一致性和可靠性。
《SQL SERVER2019项目开发教程 》
项目8 实现数据完整性
项目8 实现数据完整性
131-server2000数据完整性

1) 在企业管理器中展开服务器组,然后展开一个服务器。 2) 展开“数据库”文件夹,然后展开目标数据库。 3)单击“默认”节点,然后在详细信息窗格中右击默认对 象名称并选择“属性”命令。 4) 在如图8所示的“默认属性”对话框中执行下列操作之 一:若要将该默认对象绑定到表字段上,单击“绑定列” 按钮;若要将该默认对象绑定到用户定义数据类型上(如 此设置以后,默认对象对所有使用该数据类型的字段都起 作用),单击“绑定UDT”按钮。
1)在企业管理器中展开服务器组,然后展开一个服务器。 2)展开“数据库”文件夹,然后展开规则所属的数据库。 3)在目标数据库下方单击“规则”,然后右击要绑定的 规则并选择“属性”命令。 4)在如图12所示的“规则属性”对话框中执行下列操 作之一:如果要将规则绑定到表中的一个字段上,可 以单击“绑定列”按钮:如果要将规则绑定到一个用 户定义数据类型上,可以单击“绑定UDT”按钮。 5)返回规则属性对话框以后单击“确定”按钮,完成绑 定操作。
2.2 绑定默认对象
在数据库中建立一个默认对象以后,还 必须把该默认对象绑定到字段或用户定 义数据类型上才能让他发挥作用。这个 任务可以使用企业管理器或系统存储过 程sp_bindefault来完成。
使用企业管理器绑定默认对象
如果要在企业管理器中绑定默认对象,执行下面的操 作步骤:
图11、 “规则属性”对话框
使用CREATE RULE语句建立规则
CREATE RULE语句用于在当前数据库 中建立一个规则,该语句的语法格式如 下:
CREATE RULE 规则名称 AS 条件表达式。
其中规则名称必须符合标识规则,可以 选择是否指定规则所有者的名称。条件 表达式是定义规则的条件。
数据库实验报告

学生学号实验课成绩武汉理工大学学生实验报告书课程名称数据库系统概论开课学院计算机科学与技术学院指导老师学生姓名专业班级2011 —2012 学年第二学期实验课程名称:数据库系统概论实验项目名称关系代数、ALPHA语言、QBE语言查询实验成绩实验者专业班级组别同组者实验日期年月日第一部分:实验分析与设计(可加页)一、实验内容描述(问题域描述)设有一个SPJ数据库,包括S,P,J,SPJ 4个关系模式:S(SNO,SNAME,STATUS,CITY)P(PNO,PNAME,COLOR,WEIGHT)J(JNO,JNAME,CITY)SPJ(SNO,PNO,JNO,QTY)试着用关系代数、ALPHA语言、QBE语言完成如下查询:1 求供应工程J1零件的供应商号码SNO;2 求供应工程J1零件P1的供应商号码SNO;3 求供应工程J1零件为红色的供应商号码SNO;4 求没有使用天津供应商生产的红色零件的工程号JNO;5 求至少用了供应商S1所供应的全部零件的工程号JNO。
二、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述)一般关系运算:1.选择:它是在关系R中选择满足给定条件的诸元组,记作σF(R)={t|t∈R∧F(t)=’真’}2.投影:是从R中选择出若干属性列组成新的关系,记作πA(R){t【A】| t∈R}3.连接 :是从两个关系的笛卡尔积中选取属性间满足一定条件的元组。
4.除运算:R与S的除运算得到一个新的关系P(X),P是R中满足下列条件的元组在X属性列上得投影:元组在X上分量值X的象集Ys包含S在Y上得投影的集合。
三、主要仪器设备及耗材本次实验为理论性实验,只需要对关系代数有一定了解并能写出查询语句集合,不需要什么试验设备。
第二部分:实验调试与结果分析(可加页)一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)查询资料,对自己写的查询语句进行验证,仔细检查是否正确。
实验八 数据的安全性、完整性及权限控制

实验八数据的安全性、完整性及权限控制一、实验目的加深对数据库安全性和完整性知识的理解,了解SQL Server的数据库安全性和完整性控制机制,掌握SQL Server中用户、角色及操作权限的创建和管理方法。
二、实验内容及步骤1.通过系统管理平台,将图书-读者数据库和学生-课程数据库附加进来。
操作方法:启动SQL Server2005系统后,在“对象资源管理器”中,选中“数据库”,鼠标右键,选择“附加”分别将图书-读者数据库和学生-课程数据库附加到当前数据库中。
2.将SQL服务器设置为“SQL Server和Windows身份验证模式”。
操作方法:在“对象资源管理器”中,选择SQL服务器,鼠标右键,选择“属性”,在打开的“服务器属性”窗口中,左侧的“选择页”中选择“安全性”,将“服务器身份验证”模式改为“SQL Server和Windows身份验证模式”。
3.新建登录用户名为“login1”,使用SQL Server身份验证。
操作方法:在“对象资源管理器”中,选择“安全性——登录名”,鼠标右键,选择“新建登录名”,在打开的“登录名——新建”窗口中,进行如下操作:左侧的“选择页”中选择“常规”时在右侧,输入登录名为“login1”,选择“SQL Server 身份验证”,输入“密码”及“确认密码”,如将密码设置为“123”,将下面的三个复选框全部取消。
单击“确定”按钮,完成新建登录用户的操作。
退出SQL Server 2005系统。
重新启动SQL Server,在“连接到服务器”对话框中,在“身份验证”中选择“SQL Server身份验证”,在“登录名”中输入“login1”,密码中输入“123”,点击“连接”进行登录。
4.在学生-课程数据库中,新建数据库用户名为“user1”(登录用户名为“login1”),新建数据库角色名为“rose1”。
操作方法:打开SQL Server管理平台,在其“对象资源管理器”面板中依次展开结点“服务器——数据库——安全性——用户”,右击“用户”,在打开的菜单中选择“新建用户”命令,在“用户名”中输入“user1”,单击“登录名”右侧的“”按钮,搜索登录用户名或直接输入用户的登录名“login1”。
sql语句对数据库表进行加锁和解锁

sql语句对数据库表进⾏加锁和解锁锁是数据库中的⼀个⾮常重要的概念,它主要⽤于多⽤户环境下保证数据库完整性和⼀致性。
我们知道,多个⽤户能够同时操纵同⼀个数据库中的数据,会发⽣数据不⼀致现象。
即如果没有锁定且多个⽤户同时访问⼀个数据库,则当他们的事务同时使⽤相同的数据时可能会发⽣问题。
这些问题包括:丢失更新、脏读、不可重复读和幻觉读:1.丢失更新:当两个或多个事务选择同⼀⾏,然后基于最初选定的值更新该⾏时,会发⽣丢失更新问题。
每个事务都不知道其它事务的存在。
最后的更新将重写由其它事务所做的更新,这将导致数据丢失。
例如,两个编辑⼈员制作了同⼀⽂档的电⼦复本。
每个编辑⼈员独⽴地更改其复本,然后保存更改后的复本,这样就覆盖了原始⽂档。
最后保存其更改复本的编辑⼈员覆盖了第⼀个编辑⼈员所做的更改。
如果在第⼀个编辑⼈员完成之后第⼆个编辑⼈员才能进⾏更改,则可以避免该问题。
2.脏读脏读就是指当⼀个事务正在访问数据,并且对数据进⾏了修改,⽽这种修改还没有提交到数据库中,这时,另外⼀个事务也访问这个数据,然后使⽤了这个数据。
因为这个数据是还没有提交的数据,那么另外⼀个事务读到的这个数据是脏数据,依据脏数据所做的操作可能是不正确的。
例如,⼀个编辑⼈员正在更改电⼦⽂档。
在更改过程中,另⼀个编辑⼈员复制了该⽂档(该复本包含到⽬前为⽌所做的全部更改)并将其分发给预期的⽤户。
此后,第⼀个编辑⼈员认为⽬前所做的更改是错误的,于是删除了所做的编辑并保存了⽂档。
分发给⽤户的⽂档包含不再存在的编辑内容,并且这些编辑内容应认为从未存在过。
如果在第⼀个编辑⼈员确定最终更改前任何⼈都不能读取更改的⽂档,则可以避免该问题。
3.不可重复读不可重复读是指在⼀个事务内,多次读同⼀数据。
在这个事务还没有结束时,另外⼀个事务也访问该同⼀数据。
那么,在第⼀个事务中的两次读数据之间,由于第⼆个事务的修改,那么第⼀个事务两次读到的的数据可能是不⼀样的。
这样就发⽣了在⼀个事务内两次读到的数据是不⼀样的,因此称为是不可重复读。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
使用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子句
触发器。