540 likes | 650 Views
数据库原理与应用 锦州师范高等专科学校 计算机系. 第七章 索引与数据完整性的实现. 7.1 索引. 7.1.1 索引的创建. 7.1.2 索引的删除. 7.2 约束和默认. 7.2.1 约束的定义和删除. 7.2.2 默认值对象的定义、使用和删除. 7.3 数据完整性. 7.3.1 域完整性的实现. 7.3.2 实体完整性的实现. 7.3.3 参照完整性的实现. 第七章 索引与数据完整性的实现. ● 索引: ★ 数据库中的索引是一个列表(包含了某个表中一列或若干列值的集合,以及这些值的记录在数据库表的存储位置的物理地址)。
E N D
数据库原理与应用锦州师范高等专科学校计算机系数据库原理与应用锦州师范高等专科学校计算机系
第七章 索引与数据完整性的实现 7.1 索引 7.1.1 索引的创建 7.1.2索引的删除 7.2 约束和默认 7.2.1 约束的定义和删除 7.2.2默认值对象的定义、使用和删除 7.3 数据完整性 7.3.1域完整性的实现 7.3.2实体完整性的实现 7.3.3参照完整性的实现
第七章 索引与数据完整性的实现 ●索引: ★ 数据库中的索引是一个列表(包含了某个表中一列或若干列值的集合,以及这些值的记录在数据库表的存储位置的物理地址)。 ★ 在数据库中,如果想在某个表中快速查找满足条件的记录,可以创建索引。 ★ 索引使数据库程序无须对整个表进行扫描,就可以在其中找到所需数据。 ★ 当SQL Server进行数据查询时,查询优化器会自动计算现有的几种执行查询方案,看哪种方案的开销最小,速度最快,SQL Server就会按照该方案查询。
第七章 索引与数据完整性的实现 ★ 如果未建立索引,系统将会从第一条记录开始,对表中的所有记录进行扫描。 扫描整个表:从存储表格的地址开始,依次比较记录,直到找到位置。 ★ 如果建立索引,就可以通过索引快速地找到查询结果。 通过索引查找时:因为索引是有序排列的,所以,可以通过高效的有序查找算法(如折半查找等)找到索引项,在根据索引项中记录的物理地址,找到查询结果的存储位置。
第七章 索引与数据完整性的实现 7.1 索引 一、基本概念 页---- SQL Server系统所管理的最小空间(8K的物理空间)。 存储数据时:按照输入的时间顺序被放置在数据页上。 堆----数据存放的顺序与数据本身没有任何联系,是一种无序的存储方式。 页分解----一个页堆满后,数据就堆放到另一个页上。 二、索引优点:(如同书的目录,是表中数据和相应存储位置的列表,是树状结构) 第一,通过表的惟一性索引,可以保证每一行数据的惟一性 第二,加速数据页的定位,提高数据的检索速度,这是使用索引最主要的原因。 第三,加速多表之间的连接,这有利于实现数据的参照完整性。
第七章 索引与数据完整性的实现 第四,通过使用索引,可以在查询时使用系统提供的查询优化器,提高系统性能。 三、索引缺点: 第一,索引也要占用物理空间。 第二,当对表中数据进行了添加、删除和修改操作后,系统需要对索引进行动态维护,这就降低了数据的维护速度。 四、创建索引的列时,必须基于的准则: ① 在主关键字列中创建索引。 ② 在经常要查询的列中创建索引。 ③ 在经常用于连接的列,如外关键字列中创建索引。 ④ 在经常出现在WHERE子句和ORDER BY子句中的列中创建索引。 ⑤ 不能在text、image和长度较大的char、varchar、binary等数据类型的列中创建索引。因为,一个索引最大只能为900B。
第七章 索引与数据完整性的实现 ⑥ 当UPDATE的性能需求远大于SELECT的性能需求时,不应该创建索引。 五、簇索引与非簇索引(根据索引的顺序与数据表的物理存储顺序是否一致) (聚集索引或非聚集索引) 1、簇索引:索引的顺序与数据表的物理存储顺序一致。 2、非簇索引:索引的顺序与数据表的物理存储顺序不一致。 说明:(1)、每个表只能有一个簇索引,但可以有多个非簇索引; (2)、簇索引:★一列或多列(惟一标识一行)主键(不能为空)。 ★确定表中数据的物理顺序,可多列(例如:电话簿中“姓+名”的排列) ★如果表中未建簇索引,且创建PRIMARY KEY约束时未指定非簇索引,PRIMARY KEY约束会自动创建簇索引。 ★可将常用列簇索引(物理排序),避免每次查该列时都进行排序,节省成本。
第七章 索引与数据完整性的实现 (3)、非簇索引:★(如课本)数据在一个地方,索引在一个地方,索引带 指针指向数据的存储位置。 ★索引中的项目按索引键值的顺序存储。 通俗名称索引 ★可以有多个非簇索引,例如园艺书中: 植物学名 7.1.1 索引的创建 ★ SQL Server 2000中,索引可以由系统自动创建,也可以由用户手工创建。 ★ 系统在创建表中的其他对象时可以附带地创建新索引, 例如:新建表时,可以创建主键或惟一性约束,同时就创建了索引。 簇索引或非簇索引 系统自动创建的索引名也会因为创建主键的场所和方法不同而有所不同。
第七章 索引与数据完整性的实现 ★例:①、在企业管理器中:设置主键,系统会自动创建一个惟一的非簇索引,索引名为“PK_表名”。 ②、在查询分析器中:使用语句添加主键约束,也会创建一个惟一索引,但索引名称为“PK_表名_********”,其中*是系统自动生成的数字或英文字母。 这个索引可以是簇索引或非簇索引,取决于在Primary Key后面使用的关键字,如使用NONCLUSTERED关键字,会生成非簇索引;如使用CLUSTERED关键字,会生成簇索引的惟一索引。 不使用关键字时,如果此表存在簇索引,由生成非簇索引的惟一索引,否则,生成簇索引的惟一索引。
第七章 索引与数据完整性的实现 7.1.1 索引的创建 ★三种方法:①、使用T-SQL语言 ②、使用SQL Server的企业管理器 ③、使用SQL Server的索引管理器 (④、使用索引向导创建索引 ) (⑤、利用索引优化向导创建索引 ) ★创建索引时,要注意:P139 ① 到 ④ ① 当在表中创建主关键字约束或惟一性约束时,SQL Server自动创建一个惟一性索引。 ② 如果表中已有数据,在创建索引时,SQL Server会检查数据的合法性,当有不合法的数据存在时,创建索引失败。 ③ 当有多个列作为关键字时,应创建复合索引,即索引包含有两个或多个。 ④ 基于相同列但列次序不同的复合索引也是不同的。如基于学号、课程号列的复合索引与基于课程号、学号列的复合索引是不同的。
第七章 索引与数据完整性的实现 一、使用CREATE INDEX命令创建索引 1、语法形式: CREATE [UNIQUE][CLUSTERED|NONCLUSTERED] INDEX 索引名 ON{表名|视图名} (列名1[ASC|DESC][,… n]) [WITH<索引选项>[,… n]] [ON 文件组名] 其中<索引选项>中,包括: {PAD_INDEX| FILLFACTOR=填充因子| IGNORE_DUP_KEY| DROP_EXISTING| STATISTICS_NORECOMPUTE| SORT_IN_TEMPDB}
第七章 索引与数据完整性的实现 1、参数说明: (1)、UNIQUE:创建惟一索引。 不允许有重复值。如有,则不能创建惟一索引;创建后,如有INSERT或UPDATE操作,并导致出现重复值,则操作失败。 (2)、CLUSTERED:创建簇索引。 它的顺序和数据行的物理存储顺序一致。 簇索引的最低一级(叶级)包含了表中实际的数据行。 一个表或视图只能有一个簇索引。 具有簇索引的视图称为索引视图。 必须先为视图创建惟一簇索引,然后才能为该视图定义其他索引。
第七章 索引与数据完整性的实现 ★创建簇索引:☆ 表中数据行会按照簇索引指定的物理顺序重排,所以最好在创建表时创建簇索引; ☆ 为簇索引指定文件组时,也会导致数据的移动,所以在文件组上创建表或索引前,应确认哪些文件组可用并有足够的空间供索引使用; ☆ 必须在创建任何非簇索引之前创建簇索引,否则创建簇索引时将重建表上现有的非簇索引; ☆ 如在CREATE INDEX命令中没有指定CLUSTERED选项,则默认使用NONCLUSTERED选项,创建一个非簇索引; ☆ 用簇索引查找数据快,但由于簇索引需要将表的所有数据完全重新排列,所需要的空间也就特别大,文件组的大小必须至少是整个表所需空间的1.2倍(120%);
第七章 索引与数据完整性的实现 ☆簇索引一般创建在表中经常搜索的列或按顺序访问的列上。 ※ ※ ※ ※ ※ ※ ※ ※ ※ ※ ※ ※ ●必须使用SCHEMABINDING选项定义视图,才能在视图上创建索引。 ● ASC|DESC:用于指定某个具体索引列的升序或降序排列方向。默认值为升序( ASC ) ● column:√用于指定被索引的列。 √指定多列(创建组合索引)时,在table后圆括号中列出组合索引要包括的列(按排序优先级排列),即复合索引。 √一个索引中最多可以指定16个列,但列的数据类型的长度之和不能超过900个字节,且复合索引中的所有字段必须在同一个表中。 ※ ※ ※ ※ ※ ※ ※ ※ ※ ※ ※ ※
第七章 索引与数据完整性的实现 (3)、NONCLUSTERED:创建非簇索引。行的物理排序独立于索引排序。 ★非簇索引具有完全独立于数据行的结构,使用非簇索引不会影响数据表中记录的实际存储顺序。 ★非簇索引的叶级包含索引行,每个索引行均包含非簇索引键值和一个或多个指向包含该值的数据行的行定位器。 ★如表没有簇索引,行定位器就是行的磁盘地址。 ★如表有簇索引,行定位器就是该行的簇索引键值。 ★索引行:
第七章 索引与数据完整性的实现 ★每个表最多可以有249个非簇索引,每个索引均可以提供对数据的不同排列次序的访问。 ★对于索引视图,只能为已经定义了簇索引的视图创建非簇索引。 ★由于非簇索引使用索引页存储,因此它比簇索引需要较少的存储空间,但检索效率比簇索引低。 ★下列情况,可以考虑使用非簇索引: ①、含有大量惟一值的字段。 ②、返回很小的或者单行结果级的检索。 ③、使用ORDER BY子句的查询。
第七章 索引与数据完整性的实现 (4)、FILLFACTOR:指定各索引页叶级的填满程度(百分比)。 ★如果某个索引页填满,SQL Server必须花时间拆分该索引页,以便为新行腾出空间,这需要很大的开销。 ★所以要指定合适的填充因子。 ★填充因子的原始值将在系统表sysindexes中与索引一起存储。 ★指定了填充因子后,SQL Server会向上舍入每页要放置的行数。 例如:填充因子=40 的簇索引,如果SQL Server计算出每页空间的40%为 6.3行,向上舍入后,每页就放置7行。 ★填充因子可以设置为:0 到 100。 默认值为0,只填满叶级页。可以执行系统存储过程sp_configure更改默认的填充因子设置。
第七章 索引与数据完整性的实现 ★填充因子为1到99时,则SQL Server在创建叶级页时不完全填充新索引,只填充到1%到99%。 例如: ①、对于频繁进行大量数据插入或删除的表: 在建立索引时应为将来生成的索引数据预留较大的空间,即将fillfactor设得较小。否则,索引页会因数据的插入而很快填满,并产生分页,而分页会大大增加系统的开销。如果设得过小,又会浪费大量的磁盘空间,降低查询性能。 所以,对于此类表通常设一个大约为10的fillfactor。 ②、对数据不更改、高并发、只读的表:fillfactor可以设到50以上,甚至100。 ★注意:用某个填充因子创建蔟索引时会影响数据占用存储空间的数量,因为SQL Server在创建蔟索引时会重新分布数据。
第七章 索引与数据完整性的实现 (5)、PAD_INDEX:指定维护索引用的中间级中每个索引页上保留的可用空间。 ★ PAD_INDEX选项只有在指定了FILLFACTOR时才有用,因为PAD_INDEX使用由 FILLFACTOR所指定的百分比。 ★中间级索引页上的行数无论FILLFACTOR的值有多小,永远都不会小于两行。 ★默认:给定中间级页上的键集,SQL Server将确保每个索引页上的可用空间至少可以容纳一个索引允许的最大行。 ★如果FILLFACTOR指定的百分比不够大,无法容纳一行, SQL Server将在内部使用允许的最小值替代该百分比。
第七章 索引与数据完整性的实现 (6)、IGNORE_DUP_KEY:用于控制当尝试向属于惟一索引(包括惟一簇索引和惟一非簇索引)的列插入重复的键值时所发生的情况。 例如:当执行创建重复键的INSERT语句时。 ★没指定选项:发出一条警告信息,并回滚; ★指定后选项:只发出一条警告信息,并忽略重复的行。
第七章 索引与数据完整性的实现 (7)、DROP_EXISTING:用于在创建索引时删除并重建指定的已存在的索引,如果指定的索引不存在,系统会给出警告信息。 ★由于非簇索引中包含簇索引的键值,所以如果删除簇索引,必须重建非簇索引(系统自动)。 ★ DROP_EXISTING可以提高性能,因为它代替了DROP INDEX 和CREATE INDEX。 ★非簇索引只需重建一次,而且只是在簇索引键不同的情况下才需要。P141 ★不能使用它将簇索引转换成非簇索引。但是,可以将惟一簇索引更改为非惟一索引,反之亦然。
第七章 索引与数据完整性的实现 (8)、STATISTICS_NORECOMPUTE:指定过期的索引统计不进行自动重新计算。 ★若要恢复自动更新统计,可执行没有NORECOMPUTE选项的UPDATE STATISTICS命令。 ★注意:如果禁用分布统计的自动重新计算,可能会防碍SQL Server查询优化器为涉及该表的查询选取最佳执行计划。 (9)、SORT_IN_TEMPDB:指定用于生成索引的中间排序结果将存储在tempdb数据库中。 ★如果tempdb数据库与用户数据库不在同一磁盘集上,则使用此选项可能会减少创建索引所需的时间,但会增加创建索引时使用的磁盘空间。
第七章 索引与数据完整性的实现 2、例题: (1)、【例7-1】:为XS_KC表创建一个简单索引IX_学号,该索引只包含一个索引列即学号列,且按升序排序。 (P141) CREATE INDEX IX_学号 ON XS_KC (学号) (2)、 【例7-2 】 :对【例7-1】作修改,将索引列由学号一列改为学号和课程号两列。(P142) CREATE INDEX IX_学号 ON XS_KC (学号,课程号) WITH DROP_EXISTING
第七章 索引与数据完整性的实现 (3)、【例7-3】:对【例7-2】修改,是该索引变为了惟一簇索引。 CREATE UNIQUE CLUSTERED INDEX IX_学号 ON XS_KC (学号,课程号) WITH DROP_EXSTING (4)、【例7-4】:对【例7-3】修改,设置页面的填充因子。 CREATE UNIQUE CLUSTERED INDEX IX_学号 ON XS_KC (学号,课程号) WITH PAD_INDEX FILLFACTOR=50 DROP_EXISTING
第七章 索引与数据完整性的实现 (5)、【例7-5】:显示了为视图创建索引的方法。首先创建一个基于XSQK表和XS_KC表的视图v_XSQK_KC,它包含了XS_KC,它包含了XS_KC表中成绩及格的所有学生信息。 --创建基于XSQK表和XS_KC表的架构绑定的视图 CREATE VIEW v_XSQK_KC WITH SCHEMABINDING AS SELECT XSQK.学号,XSQK.姓名,XS_KC.课程号, XS_KC.成绩 FROM dbo.XSQK,dbo. WHERE XS_KC.学号=XSQK.学号 AND XS_KC.成绩>=60 --为架构绑定的视图v_XSQK_KC创建惟一簇索引 CREATE UNIQUE CLUSTERED INDEX IVX_学号 ON v_XSQK_KC (学号,课程号) WITH PAD_INDEX,FILLFACTOR=50
第七章 索引与数据完整性的实现 二、使用SQL Server的企业管理器创建索引 填充索引----PAD_INDEX选项 三、使用SQL Server的索引管理器创建索引 1、操作: 企业管理器选择“数据库文件夹”(如:a)选择表(如:XS_KC) 操作所有任务管理索引 或 打开“索引管理器”所有表和视图新建 右击所有任务管理索引 2、例:为KC表创建一个基于“授课教师”列的索引IX_授课教师,并按升序排列。 (P144—P145)
第七章 索引与数据完整性的实现 3、使用索引管理器,可以方便地查看数据库中表和视图所拥有的全部索引。 4、通常,SQL Server在查询时会根据查询优化器的优化自动选择合适的索引; 我们也可以在查询时,强制使用指定的索引。 5、强制使用索引:(两种方法) (1)、SELECT 列名1[,… n] FROM 表名1[,… n] WITH(INDEX(索引名)) WHERE 逻辑表达式 (2)、SELECT 列名1[,… n] FROM 表名1[,… n] WITH(INDEX=索引号) WHERE 逻辑表达式
第七章 索引与数据完整性的实现 6、说明:★索引号:表示第几个索引。 0:以堆方式扫描表,即不使用任何索引; ★索引号= 1:表示使用簇索引; 2—-251:表示使用指定的非簇索引。 (从系统表sysindexes中可以查出各索引号所代表的具体索引) 【例7-6】:使用强制索引的第一种语法形式强制使用指定的索引进行查询。P146 SELECT 学号,课程号,成绩 FROM XS_KC WITH(INDEX(IX_学号)) WHERE 成绩>=60
第七章 索引与数据完整性的实现 【例7-7】:使用强制索引的第二种语法形式强制使用指定的索引进行查询。P146 SELECT 学号,课程号,成绩 FROM XS_KC WITH(INDEX=1) WHERE 成绩>=60 7、系统表sysindexes(联机丛书) ★ name列:表示索引名。 ★ indid列:表示索引号。 ★ id列:表示索引所在对象的标识号,该标识号与它代表的对象名存储在系统表sysobjects中
第七章 索引与数据完整性的实现 四、使用索引向导创建索引 企业管理器选择数据库工具菜单“向导”“创建索引向导” 五、利用索引优化向导创建索引 ●索引优化向导是创建索引工具,使用查询优化器分析工作中的查询任务,向有大量工作负荷的数据库推荐最佳的索引创建方式,以加快数据库的查询速度,优化整个查询语句的性能。 ●索引优化向导允许为SQL Server数据库选择和创建一种理想的索引组合和统计,而不要求用户深入了解数据库结构或SQL Server内部的工作情况。
第七章 索引与数据完整性的实现 1、索引优化向导可以完成以下几方面的工作: (1)、根据给定的工作负荷,通过使用查询优化器分析该工作负荷中的查询,为数据库推荐最佳索引组合。 (2)、分析所建议的更改将会产生的影响,包括索引的使用、查询的表之间的分布以及查询在工作负荷中的性能。 (3)、推荐为执行一个小型的问题查询集而对数据库进行优化的方法。 (4)、通过设定高级选项,如磁盘空间约束、最大查询语句数和每个索引最多对应字段数等,允许定制推荐方式。
第七章 索引与数据完整性的实现 2、利用索引优化向导创建和优化索引,步骤: (1)、开始程序Microsoft SQL ServerSQL 事件探测器 文件 跟踪。 (2)、连接到SQL Server Windows身份验证(W)确定。 (3)、跟踪属性系统自动给出跟踪名,默认“无标题-1” 修改跟踪名为“index_student” 选中“另存为文件(S):”复选框 输入要创建的跟踪文件名称“index_student.trc”。 (4)、单击“运行”按钮 在窗口下部的状态拦中出现提示信息:“跟踪正在运行” (5)、在企业管理器中,选中数据库a 工具菜单中的“向导”选项 管理索引优化向导 单击“确定”或双击“索引优化向导 ”
第七章 索引与数据完整性的实现 (6)、下一步 选择服务器和数据库: ★服务器:可以选择服务器(这里使用默认)。 ★数据库:选择要进行索引优化的数据库(这里选择a)。 ★保留所有现有索引(K):表示保存已经存在的索引,如果不选择此项,在进行索引优化时可能会删除一些索引(这里选择)。 ★选择适中
第七章 索引与数据完整性的实现 (7)、下一步 指定工作负荷:可以选择要进行索引优化的数据库的工作负荷记录文件。 ★我的工作负荷文件:指定工作负荷文件(这里选用)。 ★SQL Server跟踪表:选择用于优化索引的数据库和SQL Server表。 在弹出的“打开跟踪文件”中,找到前面建立的文件(index_student.trc)所在的文件夹,并选种index_student.trc文件 打开 ★高级选项:查看或更改默认索引优化参数(这里接受默认设置)。 (8)、下一步 选择要优化的表(这里选xsqk)正在优化 (9)、索引建议:显示了经过分析后对创建索引的建议。 (10)、单击“分析”按钮:查看分析的详细信息。 (11)、下一步 完成
第七章 索引与数据完整性的实现 7.1.2 索引的删除 一、使用DROP INDEX命令删除索引 1、从当前的数据库中删除一个或多个索引,必须为每个要删除的索引指定其所在的对象名(即表名或视图名)。 2、语法形式: DROP INDEX {表名.|视图名.} 索引名 [,… n] ★注意:①、不能对系统表的索引使用该命令; ②、不能使用DROP INDEX命令删除通过定义主关键字(PRIMARY KEY)约束或惟一性(UNIQUE)约束创建的索引, 如果要删除这类为实现PRIMARY KEY或UNIQUE约束而创建的索引,必须删除相应的约束; ③、如果删除簇索引,系统将重建所有非簇索引以便使用行指针替换簇索引键集;(删除索引视图的簇索引时,将自动删除同一视图上的所有非簇索引)。
第七章 索引与数据完整性的实现 ④、如在大容量装载之后,应用新的填充因子或重新组织数据:P147 使用CREATE INDEX命令和DROP_EXISTING选项>>先用DROP INDEX命 令再使用CREATE INDEX命令 (更有效)(特别对于簇索引) (可以对重建进行优化,以避免重建两次非簇索引的开销。) ⑤、DBCC DBREINDEX命令:具有不需要知道索引结构的优点。重建指定数据库中表的一个或多个索引(具体操作见:联机丛书)。
第七章 索引与数据完整性的实现 3、例6-8:删除分别基于XS_KC表的索引IX_学号和基于v_XSQK_KC视图的索引IVX_学号。(P147) DROP INDEX XS_KC.IX_学号, v_XSQK_KC. IVX_学号
第七章 索引与数据完整性的实现 二、使用SQL Server的企业管理器删除索引 企业管理器选择“数据库文件夹”(如:a)选择表(如: 操作设计表 XS_KC) 或 点击 打开“索引/键” 右击设计表 从索引下拉列表 中,选择要删除的索引删除。
第七章 索引与数据完整性的实现 三、使用SQL Server的索引管理器删除索引 企业管理器选择“数据库文件夹”(如:a)选择表(如: 操作所有任务管理索引 XS_KC) 或 右击所有任务管理索引 打开“索引管理器”所有表和视图选择要删除的索引删除。 7.1.2 全文索引的建立 要安装Microsoft Search服务,启动SQL Server全文搜索服务。
第七章 索引与数据完整性的实现 7.2 约束和默认 ●保证数据完整性:约束、默认、规则、触发器等来保证。 ●约束包括:①、PRIMARY KEY:主关键字约束。(代码:P62;界面:P75) ②、FOREIGN KEY:外关键字约束。 ③、UNIQUE:惟一性约束。 ④、CHECK:检查约束。 ⑤、NOT NULL:非空值约束。 ⑥、DEFAULT:默认值约束。 ●约束、默认值约束在CREATE TABLE或ALTER TABLE命令时定义的,与表存储在一起,删除表时,将一起删除。 ●默认(默认值对象)使用CREATE DEFAULT命令定义,作为一种数据库对象单独存储,可被多次应用于不同列,所以删除表时不会删除默认对象。
第七章 索引与数据完整性的实现 7.2.1约束的定义和删除 1、约束的定义:P156、P60 (1)、命令方式 (2)、企业管理器(界面方式) 2、约束的删除: (1)、命令方式 (2)、企业管理器(界面方式)
第七章 索引与数据完整性的实现 7.2.2默认值对象的定义、使用和删除 1、默认值对象的定义 (1)、语法形式:CREATE DEFALUT 默认值对象名 AS 常量表达式 说明:★常量表达式:常量、算术表达式和SQL Server函数等组成(不包含任何列名或其他数据库对象)。 ★字符和日期数据:用单引号(‘)括起来。 ★ 二进制数据:以0x作前导符。 ★ 货币型数据:以美元符号($)开头。 ★ 其他数据类型:不需要任何定界符。
第七章 索引与数据完整性的实现 (2)、【例7-14】:定义字符、日期、二进制、货币和整数类型的默认值对象。(P156) CREATE DEFAULT DFO_char AS ‘计算机’ GO CREATE DEFAULT DFO_date AS ‘2003-1-1 10:00:00’ GO CREATE DEFAULT DFO_binary AS 0xFFFF GO CREATE DEFAULT DFO_money AS $100 GO CREATE DEFAULT DFO_int AS 100 GO (3)、使用企业管理器:P157
第七章 索引与数据完整性的实现 2、默认值对象的使用 ●定义了默认值对象后,还必须将其绑定到表中的列或者用户自定义数据类型上。 ●如果默认值对象的值和要绑定的列或或者用户自定义数据类型不兼容,那么在试图插入默认值时(不是在绑定时),将返回错误信息。 (1)、使用系统存储过程sp_bindefault: ①、语法形式:sp_bindefault[@defname= ]默认值对象名, [@objname= ]’object_name’ [,[@futureonly= ]’futureonly_flag’] ②、参数说明:★object_name:为绑定对象的名称。“表名.列名”;否则表示用户自定义数据类型。P157 ★ futureonly_flag:P157
第七章 索引与数据完整性的实现 ③、【例7-15】:将【例7-14】中定义的默认值对象DFO_char绑定到XSQK表的所在系列。(P158) sp_bindefault DFO_char,’XSQK.所在系’ (2)、取消对表中的列或者用户自定义数据类型的绑定。 ①、使用系统存储过程sp_unbindefault,语法: ②、参数说明: ③、【例7-16 】 :取消【例7-15】中默认值对象DFO_char的绑定。(P158) sp_unbindefault ‘XSQK.所在系’ (3)、使用企业管理器进行默认值对象的绑定和取消操作。P158
第七章 索引与数据完整性的实现 3、默认值对象的删除 (1)、使用命令方式 ①、语法形式: ②、参数说明: ③、【例7-17】:删除【例7-14】中定义的默认值对象。 (P159) DROP DEFAULT DFO_char,DFO_date,DFO_binary, DFO_money,DFO_int (2)、使用企业管理器删除默认值对象。
第七章 索引与数据完整性的实现 7.3 数据完整性 ●数据完整性:是SQL Server系统为了保证数据的完整性、一致性和安全性而提供的一种重要技术,它包括域完整性、实体完整性和参照完整性。 7.3.1域完整性(列完整性)的实现:限制用户往列中输入内容,保证给定列的输入有效性。 一、实现域完整性的方法(三种) (1)、限制列值的数据类型。
第七章 索引与数据完整性的实现 (2)、限制列值的格式,可以通过使用检查约束和规则来实现。 例7-18:创建一个检查约束,限制联系电话的格式“区号-电话号码” ALTER TABLE XSQK ADD CONSTRAINT CH_联系电话格式 CHECK(联系电话 LIKE ‘_ _ _ _-_ _ _ _ _ _ _ %’) 如执行“(0517)12345678”时,系统会提示出错。 外关键字约束 检查约束 (3)、限制列值的取值范围,可以通过: 默认值约束 来实现。 默认值对象 非空约束 规则 例(P161):“性别=1 OR 性别=0”
第七章 索引与数据完整性的实现 二、检查约束和规则的区别: 三、规则的定义、使用和删除操作 1、规则的定义 (1)、语法形式: CREATE RULE 规则对象名 AS 逻辑表达式 参数说明:逻辑表达式 P161
第七章 索引与数据完整性的实现 【例7-19】:定义一个规则对象,限制联系电话的格式为“区号-电话号码”(P161) CREATE RULE RO_联系电话格式 AS @联系电话 LIKE‘____-______%’ (2)、使用企业管理器方式: “规则”对象“操作” “新建规则” 输入内容