已阅读5页,还剩47页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章索引与数据完整性 索引 数据完整性 综合应用训练 6 1索引 6 1 1索引的分类1 聚集索引聚集索引将数据行的键值在表内排序并存储对应的数据记录 使得数据表物理顺序与索引顺序一致 SQLServer2008是按B树 BTREE 方式组织聚集索引的 B树方式构建为包含了多个节点的一棵树 顶部的节点构成了索引的开始点 叫做根 每个节点中含有索引列的几个值 一个节点中的每个值又都指向另一个节点或者指向表中的一行 一个节点中的值必须是有序排列的 指向一行的一个节点叫做叶子页 叶子页本身也是相互连接的 一个叶子页有一个指针指向下一组 这样 表中的每一行都会在索引中有一个对应值 查询的时候就可以根据索引值直接找到所在的行 聚集索引中B树的叶节点存放数据页信息 聚集索引在索引的叶级保存数据 这意味着不论聚集索引里有表的哪个 或哪些 字段 这些字段都会按顺序被保存在表中 由于存在这种排序 所以每个表只会有一个聚集索引 6 1 1索引的分类 2 非聚集索引非聚集索引完全独立于数据行的结构 SQLServer2008也是按B树组织非聚集索引的 与聚集索引不同之处在于 非聚集索引B树的叶节点不存放数据页信息 而是存放非聚集索引的键值 并且每个键值项都有指针指向包含该键值的数据行 对于非聚集索引 表中的数据行不按非聚集键的次序存储 在非聚集索引内 从索引行指向数据行的指针称为行定位器 行定位器的结构取决于数据页的存储方式是堆集还是聚集 对于堆集 行定位器是指向行的指针 对于有聚集索引的表 行定位器是聚集索引键 只有在表上创建聚集索引时 表内的行才按特定顺序存储 这些行按聚集索引键顺序存储 如果一个表只有非聚集索引 它的数据行将按无序的堆集方式存储 6 1 2系统表sysindexes 在此 将介绍另一系统表sysindexes 当用户创建数据库时 系统将自动创建系统表sysindexes 用户创建的每个索引均将在系统表sysindexes中登记 当创建一个索引时 如果该索引已存在 则系统将报错 因此 创建一个索引前 应先查询sysindexes表 若待定义的索引已存在 则先删除之 然后再创建索引 当然 也可采用其它措施 如检测到待定义的索引已存在 则不创建该索引 系统表sysindexes的主要字段如表6 1所示 表6 1系统表sysindexes的主要字段 6 1 3索引的创建 1 界面方式创建索引下面以XS表中按借书证号建立主键索引及按姓名建立非惟一索引 索引组织方式为非聚集索引 为例 介绍索引的创建方法 启动 SQLServerManagementStudio 在 对象资源管理器 中展开 数据库XSBOOK 选择 表 中的 dbo XS 右击其中的 索引 项 在弹出的快捷菜单上选择 新建索引 N 菜单项 6 1 3索引的创建 这时 用户可以在弹出的 新建索引 窗口中输入索引名称 索引名在表中必须唯一 如PK XS 选择索引类型为 聚集 勾选 唯一 复选框 单击新建索引窗口的 添加 按钮 在弹出选择列窗口 如图6 1所示 中选择要添加的列 添加完毕后 单击 确定 按钮 在主界面中为索引键列设置相关的属性 单击 确定 按钮 即完成索引的创建工作 图6 1添加索引键列 6 1 3索引的创建 在表设计器窗口创建索引的方法如下 1 右击XSBOOK数据库中的 dbo XS 表 在弹出的快捷菜单中选择 设计 菜单项 打开 表设计器 窗口 2 在 表设计器 窗口中 选择 借书证号 属性列 右击鼠标 在弹出的快捷菜单中选择 索引 键 菜单项 在打开的 索引 键 窗口中单击 添加 按钮 并在右边的 标识 属性区域的 名称 一栏中确定新索引的名称 用系统缺省的名或重新取名 在右边的常规属性区域中的 列 一栏后面单击 按钮 可以修改要创建索引的列 如果将 是唯一的 一栏设定为 是 则表示索引是唯一索引 在 表设计器 栏下的 创建为聚集的 选项中 可以设置是否创建为聚集索引 由于XS表中已经存在聚集索引 所以这里的这个选项不可修改 如图6 2所示 图6 2 索引 键 窗口 6 1 3索引的创建 2 使用SQL命令创建索引使用CREATEINDEX语句可以为表创建索引 语法格式 CREATE UNIQUE 指定索引是否唯一 CLUSTERED NONCLUSTERED 索引的组织方式 INDEXindex name 索引名称 ON database name schema name schema name table or view name column ASC DESC n 索引定义的依据 INCLUDE column name n WITH n 索引选项 ON partition scheme name column name 指定分区方案 filegroup name 指定索引文件所在的文件组 default FILESTREAM ON filestream filegroup name partition scheme name NULL 指定FILESTREAM数据的位置 6 1 3索引的创建 其中 PAD INDEX ON OFF FILLFACTOR fillfactor SORT IN TEMPDB ON OFF IGNORE DUP KEY ON OFF STATISTICS NORECOMPUTE ON OFF DROP EXISTING ON OFF ONLINE ON OFF ALLOW ROW LOCKS ON OFF ALLOW PAGE LOCKS ON OFF MAXDOP max degree of parallelism 说明 6 1 3索引的创建 例6 1 对于JY表 按借书证号 ISBN创建索引 创建简单索引 USEXSBOOKGOIFEXISTS SELECTnameFROMsysindexesWHEREname JY num ind DROPINDEXJY JY num indGOCREATEINDEXJY num indONJY 借书证号 ISBN GO 例6 2 根据BOOK表的ISBN列创建惟一聚集索引 因为指定了CLUSTERED子句 所以该索引将对磁盘上的数据进行物理排序 创建唯一聚集索引 CREATEUNIQUECLUSTEREDINDEXbook id indONbook ISBN GO 6 1 3索引的创建 例6 3 根据XS表中的借书量字段创建索引 例中使用了FILLFACTOR子句 CREATENONCLUSTEREDINDEXnum indONXS 借书量 WITHFILLFACTOR 60 例6 4 根据XS表中借书证号字段创建惟一聚集索引 如果输入了重复键值 将忽略该INSERT或UPDATE语句 CREATEUNIQUECLUSTEREDINDEXxs indONXS 借书证号 WITHIGNORE DUP KEY 6 1 3索引的创建 创建索引有如下几点要说明 1 在计算列上创建索引 对于UNIQUE或PRIMARYKEY索引 只要满足索引条件 就可以包含计算列 但计算列必须具有确定性 必须精确 若计算列中带有函数时 使用该函数时有相同的参数输入 输出的结果也一定相同时该计算列是确定的 而有些函数如getdate 每次调用时都输出不同的结果 这时就不能在计算列上定义索引 计算列为text ntext或image列时也不能在该列上创建索引 2 在视图上创建索引 可以在视图上定义索引 索引视图能自动反映出创建索引后对基表数据所做的修改 6 1 3索引的创建 例6 5 创建一个视图 并为该视图创建索引 定义视图 如下例子中 由于使用了WITHSCHEMABINDING子句 因此 定义视图时 SELECT子句中表名必须为 架构名名 视图名的形式 CREATEVIEWVIEW1WITHSCHEMABINDINGASSELECT索书号 书名 姓名FROMdbo JY dbo BOOK dbo XSWHEREJY ISBN BOOK ISBNANDXS 借书证号 JY 借书证号GO 在视图VIEW1上定义索引 CREATEUNIQUECLUSTEREDINDEXInd1ONdbo VIEW1 索书号ASC GO 6 1 4索引的删除 1 通过界面方式删除索引通过界面方式删除索引的主要步骤如下 启动 SQLServerManagementStudio 在 对象资源管理器 中展开数据库 XSBOOK 表 dbo XS 索引 选择其中要删除的索引 单击鼠标右键 在弹出的快捷菜单上选择 删除 菜单项 在打开的 删除对象 窗口单击 确定 按钮即可 2 通过SQL命令删除索引语法格式 DROPINDEX index nameONtable or view name n table or view name index name n 例6 6 删除例6 1为XSBOOK数据库中表JY创建的索引JY num ind USEXSBOOKGOIFEXISTS SELECTnameFROMsysindexesWHEREname JY num ind DROPINDEXJY JY num indGO 6 2数据完整性 6 2 1数据完整性的分类1 域完整性域完整性又称为列完整性 指列数据输入的有效性 实现域完整性的方法有 限制类型 通过数据类型 格式 通过CHECK约束和规则 或可能的取值范围 通过CHECK约束 DEFALUT定义 NOTNULL定义和规则 等 CHECK约束通过显示输入到列中的值来实现域完整性 DEFAULT定义后 如果列中没有输入值则填充默认值来实现域完整性 通过定义列为NOTNULL限制输入的值不能为空也能实现域完整性 例如 对于数据库XSBOOK的XS表 如果允许读者当前的在借图书量最多为20本 为了对读者当前的在借图书量进行限制 可以在定义XS表时 规定 0 借书量 20 的约束条件达到目的 6 2 1数据完整性的分类 例6 7 定义表XS的同时定义借书量字段的约束条件 USEXSBOOKGOCREATETABLEXS 借书证号char 8 NOTNULLPRIMARYKEY 姓名char 8 NOTNULL 专业char 12 NOTNULL 性别bitNOTNULLDEFAULT1 出生时间dateNOTNULL 如下语句定义字段的同时定义约束条件 借书量intCHECK 借书量 0AND借书量 20 NOTNULL 照片varbinary MAX NULL GO 6 2 1数据完整性的分类 2 实体完整性实体完整性又称为行的完整性 要求表中有一个主键 其值不能为空且能惟一地标识对应的记录 通过索引 UNIQUE约束 PRIMARYKEY约束或IDENTITY属性等可实现数据的实体完整性 例如 对于XSBOOK数据库中XS表 借书证号作为主键 每一个读者的借书证号能惟一的标识该读者对应的行记录信息 那么在输入数据时 则不能有相同借书证号的行记录 通过对借书证号这一字段建立主键约束可实现表XS的实体完整性 3 参照完整性参照完整性又称为引用完整性 参照完整性保证主表中的数据与从表中数据的一致性 SQLServer2008中 参照完整性的实现是通过定义外键 外码 与主键 主码 之间或外键与惟一键之间的对应关系实现的 参照完整性确保键值在所有表中一致 6 2 1数据完整性的分类 XS和JY表的对应关系如表6 2 和表6 3所示 6 2 1数据完整性的分类 如果定义了两个表之间的参照完整性 则要求 1 从表不能引用不存在的键值 例如 对于JY表中行记录出现的借书证号必须是XS表中已存在的 2 如果主表中的键值更改了 那么在整个数据库中 对从表中该键值的所有引用要进行一致的更改 例如 如果对XS表中的某一借书证号修改 JY表中所有对应借书证号也要进行相应的修改 3 如果要删除主表中的某一记录 应先删除从表中与该记录匹配的相关记录 6 2 2域完整性的实现 1 CHECK约束的定义与删除对于timestamp和identity两种类型字段不能定义CHECK约束 1 通过界面方式创建与删除CHECK约束 对于XSBOOK数据库的XS表 若要求读者的借书证号必须由8个数字字符构成 并且不能为 00000000 通过企业管理器对借书证号字段定义这一约束可按如下步骤进行 启动 SQLServerManagementStudio 在 对象资源管理器 中展开 数据库 XSBOOK 表 选择 dbo XS 右击鼠标选择 设计 菜单项 在打开的 表设计器 窗口中选择 借书证号 属性列 右击鼠标选择 CHECK约束 菜单项 6 2 2域完整性的实现 在打开的 CHECK约束 窗口 如图6 3所示 中 单击 添加 按钮 添加一个 CHECK约束 在常规属性区域中的 表达式 一栏后面单击 按钮 或直接在文本框中输入内容 打开 CHECK约束表达式 窗口 并编辑相应的CHECK约束表达式为 借书证号LIKE 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 AND借书证号 00000000 图6 3CHECK选项卡属性窗口 6 2 2域完整性的实现 2 使用SQL语句在创建表时创建CHECK约束利用T SQL命令可以使用两种方式定义约束 作为列的约束或作为表的约束 语法格式 CREATETABLEtable name 指定表名 column namedatatype NOTNULL NULL 指定为空性 DEFAULTconstraint expression 指定默认值 CONSTRAINTconstraint name CHECK logical expression CHECK约束表达式 n CONSTRAINTconstraint name CHECK logical expression n 6 2 2域完整性的实现 例6 8 对于数据库XSBOOK中的表BOOK 要求书的最高限价为250元 请重新定义BOOK表 USEXSBOOKGOCREATETABLEBOOK ISBNchar 16 NOTNULLPRIMARYKEY 书名char 26 NOTNULL 作者char 8 NOTNULL 出版社char 20 NOTNULL 价格floatNOTNULLCHECK 价格 250 复本量intNOTNULL 库存量intNOTNULL 6 2 2域完整性的实现 例6 9 创建表student 有学号 最好成绩和平均成绩三列 要求最好成绩必须大于平均成绩 CREATETABLEstudent2 学号char 6 NOTNULL 最好成绩intNOTNULL 平均成绩intNOTNULL CHECK 最好成绩 平均成绩 6 2 2域完整性的实现 3 使用SQL语句在修改表时创建CHECK约束语法格式 ALTERTABLEtable nameADD CONSTRAINTconstraint name CHECK logical expression 例6 10 通过修改XSBOOK数据库的XS表 增加借书证号字段的CHECK约束 要求借书证号必须全由8个数字字符构成 并且不等于 00000000 ALTERTABLEXSADDCONSTRAINTcard constraintCHECK 借书证号LIKE 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 AND借书证号 00000000 GO 6 2 2域完整性的实现 4 使用SQL语句删除CHECK约束CHECK约束的删除可在对象资源管理器中通过界面删除 读者可以自己试一试 在此介绍如何利用SQL命令删除 使用ALTERTABLE语句的DROP子句可以删除CHECK约束 语法格式 ALTERTABLEtable nameDROPCONSTRAINTcheck name 例6 11 删除XSBOOK数据库中XS表借书证号字段的CHECK约束 IFEXISTS SELECTnameFROMsysobjectsWHEREname card constraint ANDtype C BEGINALTERTABLEXSDROPCONSTRAINTcard constraintEND 6 2 2域完整性的实现 2 规则对象的定义 使用与删除规则是一组使用T SQL语句组成的条件语句 规则提供了另外一种在数据库中实现域完整性与用户定义完整性的方法 规则对象的使用方法如下 定义规则对象 将规则对象绑定到列或用户自定义类型 在SQLServer2008中规则对象的定义可以利用CREATERULE语句来实现 1 规则对象的定义语法格式 CREATERULE schema name rule nameAScondition expression 6 2 2域完整性的实现 创建规则时 一般使用局部变量表示UPDATE或INSERT语句输入的值 另外有如下几点需说明 创建的规则对先前已存在于数据库中的数据无效 单个批处理中 CREATERULE语句不能与其它T SQL语句组合使用 规则表达式的类型必须与列的数据类型兼容 不能将规则绑定到text image或timestamp列 要用单引号 将字符和日期常量引起来 在十六进制常量前加0 x 对于用户定义数据类型 当在该类型的数据列中插入值 或更新该类型的数据列时 绑定到该类型的规则才会激活 规则不检验变量 所以在向用户定义数据类型的变量赋值时 不能与列绑定的规则冲突 如果列同时有默认值和规则与之关联 则默认值必须满足规则的定义 与规则冲突的默认值不能关联到列 6 2 2域完整性的实现 2 将规则对象绑定到自定义类型或列语法格式 sp bindrule rulename rule objname object name futureonly futureonly flag 说明 参数rule为CREATERULE语句创建的规则名 要用单引号括起来 参数object name为绑定到规则的列或用户定义的数据类型 如果object name采用表名 字段名格式 则认为绑定到表的列 否则绑定到用户定义数据类型 参数futureonly flag仅当将规则绑定到用户定义的数据类型时才使用 如果futureonly flag设置为futureonly 用户定义数据类型的现有列不继承新规则 如果futureonly flag为NULL 当被绑定的数据类型当前无规则时 新规则将绑定到用户定义数据类型的每一列 6 2 2域完整性的实现 3 应用举例 例6 12 如下程序创建一个规则 并绑定到XSBOOK数据库XS表的借书证号字段 USEXSBOOKGOCREATERULEnum ruleAS numlike 1 6 1 6 1 9 1 9 1 9 1 9 0 9 0 9 0 9 GOEXECsp bindrule num rule XS 借书证号 执行存储过程使用EXEC命令 GO 例6 13 创建一个规则 用以限制输入到该规则所绑定的列的值只能是该规则中列出的值 CREATERULElist ruleAS listIN 机械工业出版社 电子工业出版社 邮电出版社 高等教育出版社 科学出版社 清华大学出版社 GOEXECsp bindrule list rule BOOK 出版社 GO 6 2 2域完整性的实现 例6 14 定义一个用户数据类型telphone 及规则 tel rule 然后将规则 tel rule 绑定到用户数据类型telphone上 最后定义表XS3 其电话号码字段的数据类型为telphone CREATETYPEtelphoneFROMchar 12 NULL 创建用户定义数据类型 GOCREATERULEtel rule 创建规则 AS telLIKE 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 GOEXECsp bindrule tel rule telphone 将规则对象绑定到用户定义数据类型 GOCREATETABLEXS3 借书证号char 8 NOTNULL 姓名char 8 NOTNULL 专业char 12 NOTNULL 性别bitNOTNULL 出生时间dateNOTNULL 电话telphone 将电话定义为telphone类型 借书量tinyintCHECK 借书量 0AND借书量 20 NULL 照片varbinary MAX NULL GO 6 2 2域完整性的实现 4 规则对象的删除删除规则对象前 首先应使用系统存储过程sp unbindrule解除被绑定对象与规则对象之间的绑定关系 语法格式 sp unbindrule objname object name futureonly futureonly flag 在解除列或自定义类型与规则对象之间的绑定关系后 就可以删除规则对象了 语法格式 DROPRULE rule n 例6 15 解除规则对象list rule与XSBOOK数据库BOOK表的出版社字段的绑定关系 然后删除规则对象list rule IFEXISTS SELECTnameFROMsysobjectsWHEREname list rule ANDtype R BEGINEXECsp unbindrule BOOK 出版社 DROPRULElist ruleENDGO 6 2 3实体完整性的实现 1 使用界面方式创建和删除PRIMARYKEY约束 1 创建PRIMARYKEY约束如果要对XS表按借书证号建立PRIMARYKEY约束 可以按第3章中创建表的第3步中所介绍的设置主键的相关步骤进行 当创建主键时 系统将自动创建一个名称以 PK 为前缀 后跟表名的主键索引 系统自动按聚集索引方式组织主键索引 2 删除PRIMARYKEY约束如果要删除对表XS中对借书证号字段建立的PRIMARYKEY约束 按如下步骤进行 在 对象资源管理器 中选择dbo XS表图标 右击鼠标 在弹出的快捷菜单中选择 设计 菜单项 进入 表设计器 窗口 选中 XS表设计器 窗口中主键所对应的行 右击鼠标 在弹出的快捷菜单中选择 删除主键 菜单项即可 6 2 3实体完整性的实现 2 使用界面方式创建和删除UNIQUE约束 1 创建UNIQUE约束如果要对XS表中的 姓名 列创建UNIQUE约束 以保证该列取值的唯一性 可按以下步骤进行 进入XS表的 表设计器 窗口 选择 姓名 属性列并右击鼠标 在弹出的快捷菜单中选择 索引 键 菜单项 打开 索引 键 窗口 6 2 3实体完整性的实现 在窗口中单击 添加 按钮 并在右边的 标识 属性区域的 名称 一栏中输入唯一键的名称 用系统默认的名或重新取名 在常规属性区域的 类型 一栏中选择类型为 唯一键 如图6 4所示 图6 4创建唯一键 2 删除UNIQUE约束打开如图6 4所示的 索引 键 窗口 选择要删除的UNIQUE约束 单击左下方的 删除 按钮 单击 关闭 按钮 保存表的修改即可 6 2 3实体完整性的实现 3 使用SQL命令创建及删除PRIMARYKEY约束或UNIQUE约束 1 创建表的同时创建PRIMARYKEY约束或UNIQUE约束语法格式 CREATETABLEtable name 指定表名 column namedatatype 定义字段 CONSTRAINTconstraint name 约束名 PRIMARYKEY UNIQUE 定义约束类型 CLUSTERED NONCLUSTERED 定义约束的索引类型 n 说明 PRIMARYKEY UNIQUE 定义约束的关键字 PRIMARYKEY为主键 UNIQUE为唯一键 CLUSTERED NONCLUSTERED 定义约束的索引类型 CLUSTERED表示聚集索引 NONCLUSTERED表示非聚集索引 与CREATEINDEX语句中的选项相同 6 2 3实体完整性的实现 例6 16 创建XS4表 并对借书证号字段创建PRIMARYKEY约束 对姓名字段定义UNIQUE约束 USEXSBOOKGOCREATETABLEXS4 借书证号char 8 NOTNULLCONSTRAINTXS PKPRIMARYKEY 姓名char 8 NOTNULLCONSTRAINTXM UKUNIQUE 专业char 12 NOTNULL 性别bitNOTNULL 出生时间dateNOTNULL 借书量intCHECK 借书量 0AND借书量 20 NULL 照片varbinary MAX NULL GO 6 2 3实体完整性的实现 例6 17 创建借阅历史表JYLS2 由借书证号 索书号 借书时间作为联合主键 CREATETABLEJYLS2 借书证号char 8 NOTNULL ISBNchar 16 NOTNULL 索书号char 10 NOTNULL 借书时间dateNOTNULL 还书时间dateNOTNULL PRIMARYKEY 索书号 借书证号 借书时间 定义主键 6 2 3实体完整性的实现 2 修改表时创建PRIMARYKEY约束或UNIQUE约束创建PRIMARYKEY约束语法格式 ALTERTABLEtable nameADD CONSTRAINTconstraint name PRIMARYKEY UNIQUE CLUSTERED NONCLUSTERED column n 例6 18 修改XS4表 向其中添加一个 身份证号码 字段 对该字段定义UNIQUE约束 对 出生时间 字段定义UNIQUE约束 ALTERTABLEXS4ADD身份证号码char 18 CONSTRAINTSF UKUNIQUENONCLUSTERED 身份证号码 GOALTERTABLEXS4ADDCONSTRAINTCJSJ UKUNIQUENONCLUSTERED 出生时间 6 2 3实体完整性的实现 3 删除PRIMARYKEY约束或UNIQUE约束删除PRIMARYKEY约束或UNIQUE约束需要使用ALTERTABLE的DROP子句 语法格式 ALTERTABLEtable nameDROPCONSTRAINTconstraint name n 例6 19 删除前面例中在表XS4上创建的PRIMARYKEY约束和UNIQUE约束 ALTERTABLEXS4DROPCONSTRAINTXS PK XM UKGO 6 2 4参照完整性的实现 1 使用界面方式定义表间的参照关系例如 在数据库XSBOOK中要建立XS表与JY表之间的参照完整性 操作步骤如下 1 按照前面所介绍的方法定义主表的主键 由于之前在创建表的时候已经定义XS表中的借书证号字段为主键 所以这里就不需要再定义主表的主键了 2 启动 SQLServerManagementStudio 在 对象资源管理器 中展开 数据库 XSBOOK 选择 数据库关系图 右击鼠标 在出现的快捷菜单中选择 新建数据库关系图 菜单项 打开 添加表 窗口 3 在出现的 添加表 窗口中选择要添加的表 这里选择表XS和表JY 单击 添加 按钮完成表的添加 之后单击 关闭 按钮退出窗口 4 在 数据库关系图设计 窗口将鼠标指向主表的主键 并拖动到从表 即将XS表中的 借书证号 字段拖动到从表JY中的 借书证号 字段 6 2 4参照完整性的实现 5 在弹出的 表和列 窗口中输入关系名 设置主键表和列名 如图6 5所示 单击 表和列 窗口中的 确定 按钮 再单击 外键关系 窗口中的 确认 按钮 进入如图6 6所示的界面 图6 5设置参照完整性 6 2 4参照完整性的实现 图6 6主表和从表的参照关系图 6 2 4参照完整性的实现 2 使用界面方式删除表间的参照关系如果要删除前面建立的XS表与JY表之间的参照关系 可按以下步骤进行 1 在 XSBOOK 数据库的 数据库关系图 目录下选择要修改的 关系图 如Diagram 0 右击鼠标 在弹出的快捷菜单中选择 修改 菜单项 打开 数据库关系图设计 窗口 2 在 数据库关系图设计 窗口中 选择已经建立的 关系 单击鼠标右键 选择 从数据库中删除关系 如图6 7所示 在随后弹出的对话框中 单击 是 按钮 删除表之间的关系 图6 7删除关系 6 2 4参照完整性的实现 3 使用SQL命令定义表间的参照关系前面已介绍了创建主键 PRMARYKEY约束 及唯一键 UNIQUE约束 的方法 在此将介绍通过SQL命令创建外键的方法 1 创建表的同时定义外码约束语法格式 CREATETABLEtable name column namedatatype CONSTRAINTconstraint name FOREIGNKEY column n REFERENCESreferenced table name ref column n ONDELETE NOACTION CASCADE SETNULL SETDEFAULT ONUPDATE NOACTION CASCADE SETNULL SETDEFAULT NOTFORREPLICATION 6 2 4参照完整性的实现 例6 20 在XSBOOK数据库中创建主表XS1和BOOK1 借书证号为XS1表的主键 ISBN为BOOK1的主键 然后定义从表JY1 JY1 借书证号为外键 与XS1的主键对应 当对主表进行更新和删除操作时 对从表采用级联操作 JY1 ISBN为晚间 与BOOK1的主键对应 当对主表进行更新和删除时 对从表采用NOACTION方式 例6 21 创建point表 要求表中所有的索书号 借书证号和借书时间组合都必须出现在JYLS表中 CREATETABLEpoint 借书证号char 8 NOTNULL ISBNchar 16 NOTNULL 索书号char 10 NOTNULL 借书时间dateNOTNULL 还书时间dateNOTNULL CONSTRAINTFK pointFOREIGNKEY 索书号 借书证号 借书时间 REFERENCESJYLS 索书号 借书证号 借书时间 ONDELETENOACTION 6 2 4参照完整性的实现 2 通过修改表定义外键约束使用ALTERTABLE语句的ADD子句也可以定义外键约束 语法格式 ALTERTABLEtable nameADD CONSTRAINTconstraint name F
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- T/SDMTGM 0005-2019绿色制造 闭式伺服压力机绿色设计导则
- T/ZNZ 300-2024诸暨水稻绿色生产技术规范
- T/CWAN 0195-2026钛合金蜂窝构件钎缝缺欠评价规范
- T/CSSC 004-202412345政务服务便民热线数据资产评估指南
- T/CSBM 0034-2023溶胶-凝胶法制备的硼硅酸盐生物活性玻璃原料
- T/CPIA 0091-2024温室气体 产品碳足迹量化方法与要求 光伏硅片
- T/CNCA 165-2025掘进机用机载悬臂式液压钻机
- T/CSAE 349-2024轮胎接地印迹形状通用试验方法
- T/ZSA 62-2019餐厨废弃物资源化还田项目温室气体减排量核算技术规范
- T/CGSS 041-2024老年安宁疗护服务规范
- (2026秋新版)部编版道德与法治四年级上册全册教案
- (2026秋新版)青岛版五年级数学上册全册教案(五四制)
- 第19课《培养德智体美劳全面发展的社会主义建设者和接班人》教学设计-2026-2027学年统编版九年级语文上册
- 2026年重庆市公务员真题和答案
- 2026年4月自考00037美学试题及答案含评分参考
- (新教材)2026年部编人教版一年级上册语文 6 j q x 课件
- 挖掘机租赁合同标准范本下载
- 减震垫片施工方案
- 责任心和执行力培训课件
- 2025年山西省教师职称考试(思想政治/道德与法治)历年参考题库含答案详解(5卷)
- 桉树买卖合同(2025版)
评论
0/150
提交评论