SQL第06章表的创建与管理.ppt_第1页
SQL第06章表的创建与管理.ppt_第2页
SQL第06章表的创建与管理.ppt_第3页
SQL第06章表的创建与管理.ppt_第4页
SQL第06章表的创建与管理.ppt_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第6章 表的创建和管理,6.1 创建表 6.2 表结构的修改 6.3 表的重命名与删除 6.4 向表中添加、更新、删除数据 6.5 数据完整性的概念与实施方法 练习,返回目录,2,6.1 创建表,表是包含数据库中所有数据的数据库对象,用来存储各种各样的信息。 在SQL Server 2000中,一个数据库中最多可以创建200万个表,用户创建数据库表时,最多可以定义1024列,每行最多8060字节。在同一数据库的不同表中,可以有相同的字段,但在同一个表中不允许有相同的字段,而且每个字段都要求数据类型相同。 6.1.1 设计表的结构 在创建表之前,需要定义表中的列(字段)的名称,同时还需要定义每列的数据类型和宽度。数据类型指定了在每列中存储的数据的类型,例如文本、数字、日期等等。宽度指定了可以向列中输入多少个字符或数字,也可以使用用户自定义型数据。除此之外,还需要设定表中列是否允许为空,是否有缺省值,是否设置为标识列。,3,1. 几个与表结构设计相关的概念 NULL与 NOT NULL 在数据库中NULL是一个特殊值,表示数值未知。 NULL不同于空字符或数字0,也不同于零长度字符串。 比较两个空值或将空值与任何其它数值相比均返回未知,这是因为每个空值均为未知。空值通常表示未知、不可用或以后添加数据。 如果某个列上的空值属性为NULL,表示接受空值;空值属性为NOT NULL,表示拒绝空值。 在程序代码中,要检查空值以便只在具有有效(或非空)数据的行上进行某些计算。执行计算时消除空值很重要,因为如果包含空值列,某些计算(如平均值)会不准确。若要测试数据列中的空值,可在WHERE子句中使用IS NULL 或 IS NOT NULL。 注意:为了减少对已有查询或报表的维护和可能的影响,建议尽量少使用空值。,4, 缺省值(DEFAULT) 缺省值表示在用户未输入数据时列的取值。 计算列(CALCULATED COLUMN) 一个表的某些列的取值是由基于定义该列的表达式计算得到的。该列不是存储数据的列,是表的虚拟列,该列中的值并未存储在表中,而是在运行时经过计算而得到的。 标识列(IDENTITY) IDENTITY属性使得某一列的取值是基于上一行的列值和为该列定义的步长自动生成的。IDENTITY列的值可以唯一地标识表中的一行。 定义一个IDENTITY列,必须给出一个种子值(初始值),一个步长值(增量)。在一个IDENTITY列定义后,每当向表中插入一行数据时,IDENTITY列就会自动产生下一个值。在插入数据行的语句中,不应包含IDENTITY列的值,该列的值由系统自动给出。,5,定义IDENTITY列时,应注意如下几点: 每张表只允许有一个IDENTITY列。 IDENTITY列不能被更新。 IDENTITY列不允许有NULL值。 IDENTITY列只能用于具有下列数据类型之一的列:INT、SMALLINT、TINYINT、NUMERIC(小数部分为0)、DECIMAL(小数部分为0)。 通过函数ident_seed (table_name) 可获得seed值,通过ident_incr(table_name)可获得步长值,使用全局变量identity可以返回标识列的数据。 2. 表结构设计示例 以 teacher 表结构设计为例,teacher表有9个列,其中,teacher_id 为主键,性别采用BIT数据类型,0表示女教师,1表示男教师,默认值为1,邮政编码使用前面第三章定义过的用户自定义的数据类型postalcode。整个表的列性质如表6-1:(P91),6,6.1.2 利用Transact-SQL语言创建表 语法格式如下: CREATE TABLE table_name (column_name data_type null|not null,n) 在上述语法形式中: table_name:为新创建的表指定的名字。 column_name:列名。 data_type :列的数据类型和宽度。 null|not null :指定该列是否允许为空。 ,n:允许创建多个字段。,7,【例6-1】用CREATE TABLE语句创建表department。该表有三个字段:系号(department_id)、系名(department_name)、系主任(department_header)。 use jwgl go CREATE TABLE department ( department_id char(6) NOT NULL , department_name nvarchar(20) NOT NULL , department_header nvarchar(8) NOT NULL ) 表创建完成后,如要查看表的属性,可执行系统存储过程sp_help 。,8,6.1.3 利用企业管理器创建表 以创建数据库JWGL中表teacher为例,下面进行使用企业管理器创建表的介绍。 进入企业管理器,分别点击“数据库”、“JWGL”、“表”,再点击菜单“操作”、“新建表”(或右击“表”,在弹出的快捷菜单上点击“新建表”); 依次输入字段名teacher_id、teacher_name、sex、birth、department_id、profession、telephone、home_addr、postal_code及相应的数据类型、字段长度等设置值。注意,postal_code字段的数据类型使用用户自定义的数据类型postal_code ;,9, 设置计算列与标识列 : 计算列的设置:选择要设为计算列的字段,在公式对应的输入栏输入公式 标识列的设置:在表的任意地方按右键,点击“属性”,进入表的“属性”窗口,如图6-2,选择“表”选项卡,在“表的标识列”栏选择要设为标识列的字段,点击“关闭”回到创建新表的窗口6-1,分别输入“标识种子”和“标识递增量”即可 最后点击工具栏上的存盘按钮“”即可。 表创建完成后,如要查看表的属性,可在企业管理器中右击要查看的表,点击“属性”即可。,本章首页,10,6.2 表结构的修改,在表创建之后,由于某些原因,比如客户需求的变化,或对用户需求分析的不恰当,可能需要对表的结构进行修改。有关表的修改操作包括:增加和删除列、改变列的名称、宽度、数据类型、改变表的名称等。 修改表的结构有两种方法: 1. 使用企业管理器修改 2. 使用ALTER TABLE命令,11,6.2.1 使用ALTER TABLE语句修改表结构 使用ALTER TABLE语句可以为表添加或删除列,也可以修改列性质。 1. ALTER TABLE语句的语法形式: ALTER TABLE table ALTER COLUMN column_name new_data_type ( precision , scale ) NULL | NOT NULL | ADD ,.n | DROP COLUMN drop_colum_name ,.n ,12,在以上语法形式中: column_name:要修改的列名。 new_data_type :要修改列的新数据类型。 precision:是指定数据类型的精度。 scale:是指定数据类型的小数位数。 add_column_name :要添加到表中的列名。 add_data_type :要添加到表中的列的数据类型。 drop_colum_name :要从表中删除的列名 ,.n :可以有多个列。,13,2. ALTER TABLE语句使用示例 【例6-2】将表book的book_name字段的长度先改为32,再改回30。 use jwgl alter table book alter column book_name varchar(32) not null alter table book alter column book_name varchar(30) not null 【例6-3】将表book增加两个字段:book_copy_no,publish_date use jwgl go add book_copy_no varchar(10),publish_date smalldatetime,14,【例6-4】将表book的新增加的两个字段book_copy_no,publish_date删除 use jwgl go drop column book_copy_no,public_date 6.2.2 使用企业管理器修改表的结构 使用企业管理器修改表结构的步骤如下: 启动企业管理器。 分别点击“数据库”、“JWGL”、“表”,企业管理器右边区域显示数据库JWGL中所有的表。 右击要修改的表(假设要修改的表为teacher),在系统弹出的快捷菜单点击“设计表”,系统将弹出如图6-3的窗口。,15, 如要增加一列,先选择新增加列的新位置,然后右击鼠标,在系统弹出的快捷菜单点击“插入列”,这时,窗口会在选定列的前面出现一个空行,你只要在空行里输入相应的列信息就可以了。 如要删除一列,可右击要删除的列,在系统弹出的快捷菜单点击“删除列”。 如要更改列的名称、数据类型、宽度可以在此窗口上直接修改。 修改完成后,点击工具栏上的保存按钮“”即可。,本章首页,16,6.3 表的重命名与删除,使用企业管理器或T-SQL语句可以对数据库中的不再使用的表进行删除,也可以对表进行重新命名。但要注意,对于要删除的表必须确认是没用的表,而重命名一个表将会导致引用该表的存储过程、视图、触发器无效。所以,对于表的重命名与删除要慎重。 1. 使用T-SQL 语言进行 重命名表使用系统存储过程sp_rename。语法形式如下: sp_rename table_old_name , table_new_name 删除表使用DROP TABLE命令。DROP TABLE命令的语法形式如下: DROP TABLE table_name 2. 使用企业管理器进行 进入企业管理器、分别点击“数据库”、“JWGL”、“表”,右击要删除或重命名的表,在系统弹出的快捷菜单上,分别点击“重命名表”或“删除表”即可。,本章首页,17,6.4 向表中添加、更新、删除数据,管理表中的数据有两种方式:T-SQL语句和企业管理器。 6.4.1 使用T-SQL 语言进行 1. 插入数据 向表中插入数据使用的是INSERT INTO语句。INSERT INTO语句的语法形式是: INSERT INTO table_name |view_name column_list) VALUES (values_list) |select_statement 其中: table_name |view_name :要插入数据的表名及视图名。 column_list :要插入数据的字段名。 values_list :与column_list 相对应的字段的值。 select_statement :通过查询向表插入数据的条件语句。,18,在使用INSERT INTO语句向表插入数据时要注意以下几点: 当向表中所有列都插入新数据时,可以省略列名表,但是必须保证VALUES后的各数据项位置同表定义时顺序一致。 要保证表定义时的非空列必须有值,即使这个非空列没有出现在插入语句中,也必须如此。 字符型和日期型值插入时要加入单引号。 没有列出的数据类型应该具有以下属性之一:IDENTITY属性、Timestamp数据 类型、具有null属性或者有一个缺省值。对于具有IDENTITY属性的列,其值由系统给出,用户不必往表中插入数据。,19,【例6-5】向teacher表中插入一行数据,具体数据如下: 教师标识:dep04_006,姓名:李微,性别:女(0),出生年月:5-31-1965, 系号:dep_04,职位:讲师,联系电话:8802976,家庭住址:南京古平岗35号,邮政编码:210008 USE jwgl GO INSERT INTO teacher (teacher_id,teacher_name,sex,birth,department_id,profession,telephone,home_addr,postalcode) VALUES (dep04_006,李微,0,5-31-1965,dep_04,讲师,8802976,南京古平岗35号,210008),20,在用INSERT INTO插入数据时,也可以省略字段名列表,但使用时一定要小心,因为在INSERT INTO语句中省略了字段名列表,所以,VALUES后数值的顺序一定要与表中定义列的顺序相同,否则,要么插入数据不成功,要么插入数据成功但结果不正确。一行数据所造成的问题很难发现,但危害很大。因此,建议插入数据时要写上字段名表。 使用INSERT语句一次只能插入一行数据,而在INSERT语句中加入查询子句SELECT,通过SELECT子句从其他表或视图中选出数据,再将其插入到指定的表中,可以一次插入多行数据。 使用SELECT子句插入数据时应该注意以下几点: 使用SELECT子句插入数据时,table_name和table_1ist可以是相同的表,也可以是不同的表 要插入的数据表table_name必须已经存在,也就是说,不能向不存在的表中插入数据 要插入数据的表的列和SELECT子句中列的数量和顺序必须相同,列的数据类型也要相同,如果不相同,SQL Server也要能自动转化。,21,2. 更新数据 SQL Server中,对数据的修改是通过UPDTAE语句实现的。使用UPDATE语句可以一次修改一行数据,也可以一次修改多行数据,甚至整张表的数据。无论哪种修改,都要求修改前后的数据类型和数据个数相同。 它的一般语法是: UPDATE table_name | view_name SET column_list |variable_list =expression WHERE search_conditions 在这个语法形式中: table_name | view_name :要更新数据的表名或视图名。 column_list |variable_list :要更新数据的字段列表或变量列表。,22,expression :更新后新的数据值。 WHERE search_conditions 更新数据所应满足的条件。 应该指出的是,UPDATE只能在一张表上操作,并且更新后的数据必须满足表原先的约束条件,否则,数据更新将不会成功。 【例6-6】将示例5插入的一行数据中李微的职位由“讲师”改为“副教授”。 USE jwgl GO UPDATE teacher SET profession=副教授 WHERE teacher_id=dep04_006,23,3. 删除数据 如果表中的数据不再需要时,可以将其删除,以释放存储空间。对表中数据的删除是用DELETE语句实现的。 DELETE语句的语法形式是: DELETE FROM table_name WHERE search_conditions 若不加WHERE子句,将会删除表中的所有的记录,所以使用时应特别小心。 【例6-7】将示例5插入的数据从teacher表中删除掉。 USE jwgl GO DELETE FROM teacher WHERE teacher_id = dep04_006,24,6.4.2 使用企业管理器进行 进入企业管理器、分别点击“数据库”、“JWGL”、“表”,右击要添加数据的表,在系统弹出的快捷菜单上,分别点击“打开表”、返回“所有行”,系统将弹出如图6-4的窗口。P98 可以把鼠标定位在窗口任一行的任一列上,对此单元格的数据进行修改,也可以右击单元格,在系统弹出的快捷菜单上选择“删除”将某条记录删除掉。如果把光标定位在一个新的空行上,就可以添加新的数据了。但要注意,表中的列经常是带有约束的,比如数据类型、空值约束、CHECK约束(如取值范围)等,无论修改数据,还是插入新数据,都必须遵循约束的限制,否则,修改或插入数据就可能不成功。,本章首页,25,6.5 数据完整性的概念与实验方法,6.5.1 数据完整性概念 数据完整性是指数据的正确性、完备性和一致性,是衡量数据库质量好坏的重要标准。 在用INSERT、DELETE、UPDATE语句修改数据库内容时,数据的完整性可能会遭到破坏。可能会存在下列情况:无效的数据被添加到数据库的表中。如:将学生考试成绩输入成负数; SQL Server提供了对数据库中表、列实施数据完整性的方法。对表进行设计数据完整性有两个重要内容:标识列的有效值和确定如何强制列中的数据完整性。,26,1. 域完整性 域完整性是指一个列的输入有效性,是否允许空值。强制域完整性的方法有:限制类型(通过设定列的数据类型)、格式(通过CHECK约束和规则)或可能值的范围(通过 FOREIGN KEY 约束、CHECK 约束、DEFAULT定义、NOT NULL定义和规则)。 2. 实体完整性 实体完整性是指保证表中所有的行唯一。实体完整性要求表中的所有行都有一个唯一标识符。这个唯一标识符可能是一列,也可能是几列的组合,称之为主键。也就是说,表中主键在所有行上必须取值唯一。强制实体完整性的方法有:索引、UNIQUE约束、PRIMARY KEY约束或 IDENTITY属性 。 3. 参照完整性 参照完整性也叫引用完整性。参照完整性总是保证主关键字(被引用表)和外部关键字(引用表)之间的参照关系。它涉及两个或两个以上表数据的一致性维护。,27,6.5.2 数据完整性实施方法 1. 声明型数据完整性 声明型数据完整性一般在对象创建时定义,由SQL Server强制实施,通常使用约束、缺省值和规则来实现。实现基本数据完整性的首选方法是使用声明型数据完整性。 声明型数据完整性作为数据库对象说明的一部分在语法中实现,在CREATE TABLE和ALTER TABLE定义中使用CONSTRAINT、DEFAULT等语句限制表中的值。使用这种方法实现数据完整性简单且不易出错,系统直接将实现数据完整性的要求定义在表和列上。 2. 过程型数据完整性 过程型数据完整性是指由某个过程引发而实施的数据完整性。一般先写出实施数据完整性的条件,再写出强制该条件所执行的用于保证数据完整性的脚本。通常由触发器和存储过程实现。过程型数据完整性也可以在客户机和服务器上使用其它编程语言和工具实现。,28,6.5.3 约束 1.约束的定义和类型 约束是SQL Server提供的自动保持数据库完整性的一种方法 。 列级约束:列级约束是行定义的一部分,只能够应用在一列上。 表级约束:表级约束的定义独立于列的定义,可以应用在一个表中的多列上。 约束有六种类型:非空约束、缺省约束、检查约束、主键约束、唯一约束、外键约束(参照约束)。 非空约束(NOT NULL):表中的某些列必须存在有效值,不允许有空值出现。这是最简单的数据完整性约束,可在建表时将该列声明为NOT NULL即可。 缺省约束(DEFALUT CONSTRAINTS):当向数据库中的表插入数据时,如果用户没有明确给出某列的值,SQL Server自动为该列输入指定值。,29,检查约束(CHECK CONSTRAINTS):限制插入列中的值的范围。 主键约束(PRIMARY KEY CONSTRAINTS):要求主键的列上没有两行具有相同值,也没有空值。 唯一约束(UNIQUE CONSTRAINTS):要求表中所有行在指定的列上没有完全相同的列值。 外键约束(FROEIGN KEY CONSTRAINTS):要求正被插入或更新的列(外键)的新值,必须在被参照表(主表)的相应列(主键)中已经存在。,30,不同的约束强制不同类型的数据完整性。表6-2 给出了两者的对应关系。P10,31,2.使用T-SQL语言创建、管理约束 (1)使用CREATE TABLE语句创建约束 使用CREATE TABLE语句创建约束的一般语法如下: CREATE TABLE table_name (column_name data_type CONSTRAINT constraint_name PRIMARY KEY CLUSTERED | NONCLUSTERED | UNIQUE CLUSTERED | NONCLUSTERED | FOREIGN KEY REFERENCES ref_table (ref_column) | DEFAULT constant_expression | CHECK(logical_expression) ,.n ),32,其中: table_name:创建约束所在的表的名称。 column_name:列名。 data_type:数据类型。 constraint_name:约束名。 在创建、修改、实现约束时注意以下几点: 可以在已有的表上创建、修改、删除约束,而不必删除并重建表。 可以在应用程序中创建错误检查逻辑,测试是否违反约束。 在给表添加约束时,SQL将验证表中已有数据是否满足正在添加的约束。,33, 缺省约束 缺省约束是指当向数据库中的表插入数据时,如果用户没有明确给出某列的值时,SQL Server自动为该列输入的值,缺省约束用于实现域的完整性。 创建DEFAULT约束时应考虑以下因素: DEFAULT约束只能用于INSERT语句 不能用于具有IDENTITY属性的列 每列只能有一个DEFAULT约束 【例6-8】 为数据库JWGL中表teacher的SEX(性别)字段创建一个缺省约束,缺省值为1(男) USE JWGL GO ALTER TABLE teacher ADD CONSTRAINT default_sex DEFAULT 1 FOR SEX,34, 检查约束 检查约束用来指定某列可取值的清单、可取值的集合或可取值的范围。检查约束主要用于实现域完整性。 创建CHECK约束时应考虑以下因素: 当向数据库中的表执行插入或更新操作时,检查插入的新列值是否满足CHECK约束条件 不能在具有IDENTITY属性,或具有timestamp或uniqueidentifier数据类型的列上放置CHECK约束 CHECK条件不能含有子查询 【例6-9】 为数据库JWGL中表student_course 的GRADE(成绩)字段创建一个检查约束,使得GRADE的值在0-100之间。 USE JWGL GO ALTER TABLE student_course ADD CONSTRAINT check_grade CHECK (grade=0 and grade=100),35, 主键约束 主键约束保证某一列或一组列值的组合相对于表中的每一行都是唯一的,主键约束创建在表的主键列上,它对实现实体完整性更加有用。主键约束的作用就是为表创建主键。 创建PRIMARY KEY约束时应考虑以下因素: 每个表只能有一个主键,并且必须有一个主键 ; 不允许有空值; 参照约束使用它作为维护参照完整性的参考点; 创建主键时,在创建主键的列上创建了一个唯一索引,可以是聚簇索引,也可以是非聚簇索引,默认是聚簇索引。 【例6-10】 将数据库JWGL中teacher表的teacher_id(教师号)字段设为主键。 USE JWGL GO ALTER TABLE teacher ADD CONSTRAINT PK_teacher_id PRIMARY KEY clustered (teacher_id),36, 唯一约束 唯一约束限制表中指定列上所有的非空值必须唯一,即表中任意两行在指定列上都不允许有相同的值。 创建UNIQUE约束时应考虑以下因素: 一个表可以放置多个UNIQUE约束 允许有空值 创建唯一索引时强制UNIQUE约束 【例6-11】 将数据库JWGL中teacher表的teacher_id(教师号)字段设为唯一约束。 USE JWGL GO ALTER TABLE department ADD CONSTRAINT unique_department_name UNIQUE nonclustered (department_name),37,唯一约束和主键约束的区别: 唯一约束与主键约束都为指定的列建立唯一索引,即不允许唯一索引的列上有相同的值。主键约束限制更严格,不但不允许有重复值,而且也不允许有空值。 唯一约束与主键约束产生的索引可以是聚簇索引也可以是非聚簇索引,但在缺省情况下唯一约束产生非聚簇索引,主键约束产生聚簇索引。 外键约束 通过外键约束强制参照完整性。SQL Server提供了外键/主键值约束。即满足以下两点: 存在外键时,被参照表中这一行不能删除。 向子表插入记录或更新子表中外键值的前提是,必须保证这个外键值与主表中主键的某个值相等或者该外键值为空,否则不允许插入或修改外键值。,38,创建FOREIGN KEY约束时应考虑以下因素: 它提供一列或多列数据的参照完整性。 FOREIGN KEY约束不自动创建索引。但如果考虑数据库的多表连接,建议为外键创建一个索引,以提高连接性能 主键与外键的数据类型和长度必须一致,或系统可转换 【例6-12】为表teacher创建外键department_id,外键department_id参考表department中的主键department_id。 USE JWGL GO ALTER TABLE teacher ADD CONSTRAINT FK_department_id FOREIGN KEY (department_id) REFERENCES department(department_id) GO,39,3. 使用企业管理器管理约束 使用企业管理器创建缺省约束 使用企业管理器创建缺省约束的具体步骤如下: 启动企业管理器。 分别点击“数据库”、“JWGL”、“表”,企业管理器右边区域显示数据库JWGL中所有的表。 右击要设置缺省的表(假设要设置缺省的表为teacher),在系统弹出的快捷菜单上点击“设计表”, 点击设置缺省的列,在下面列属性设置栏的默认值输入框中,输入对应缺省值即可。 使用企业管理器创建检查约束 使用企业管理器创建主键约束 使用企业管理器创建唯一性约束 使用企业管理器创建外键约束,40,6.5.4 使用默认值 1. 默认值的定义 默认值是数据库对象之一,它指定在向数据库中的表插入数据时,如果用户没有明确给出某列的值,SQL Server自动为该列使用此默认值。 它是实现数据完整性的方法之一。在关系数据库中,每个列都必须包含有值,即使这个值是个空值。对于不接受空值的列,就必须为该列输入某个非空值,要么由用户明确输入,要么由SQL Server输入默认值。 默认值可用于表中的列和用户定义数据类型。请注意,缺省约束中使用的缺省值可以由用户创建时输入,也可以通过绑定已创建的默认值来指定。 在创建默认值时,请考虑以下几点: 默认值需和它要绑定的列或用户定义数据类型具有相同的数据类型。 默认值需符合该列的所有规则。 默认值缺省还需符合所有CHECK约束。 创建、管理默认值可以用T-SQL语言也可以用企业管理器。,41,2. 使用T-SQL语言创建默认值: 创建默认值的语法 CREATE DEFAULT default_name AS constant_expression 这里: default_name:新建默认值的名称,它必须遵循SQL Server标识符的命名规则。 constant_expression:默认值default_name的值,是一个常数表达式,在这个表达式中不能含有任何列名或其他数据库对象名,但可使用不涉及数据库对象的SQL Server内部函数。 默认值创建后,可以使用系统存储过程sp_helptext可以查看用于定义一个默认值的SQL脚本。其语法是: sp_helptext default_name,42, 默认值的绑定 默认值创建之后,只有将其绑定到某个列或用户自定义数据类型才能有效。 使用系统存储过程sp_bindefault可实现与表中的列及用户自定义数据类型的绑定。 一个默认值可以绑定到多个列或用户自定义数据类型。 绑定默认值的语法是: sp_bindefault default_name, object_name 其中: default_name :由CREATE DEFAULT 语句创建的默认值名字,它将与指定的列或用户定义数据类型相绑定。 object_name :要与该默认值相绑定的列名或用户自定义数据类型名。如果指定的是表中的列,其格式为table_name.column;否则被认为是用户自定义数据类型名。,43,默认值绑定的几点考虑: 绑定的默认值只适用于受INSERT语句影响的行。 不能将默认值绑定到系统数据类型或timestamp列。 若绑定了一个默认值到一用户定义数据类型,又给使用该数据类型的列绑定了一个不同的默认值或规则,则绑定到列的默认值和规则有效。 默认值绑定的解除 一个默认值被绑定到表中的列或用户自定义的数据类型之后,可使用系统存储过程sp_unbinddefault解除其绑定。绑定解除后,作为数据库对象的默认值仍然存在于数据库中。 解除默认值绑定的语法是: sp_unbindefault object_name 其中: object_name :要解除和默认值绑定的表的列名或用户自定义数据类型名。如果指定的是表中的列,其格式为“table_name.column”,否则被认为是用户定义数据类型名。,44, 默认值绑定的删除 如果一个默认值不再使用了,可以用DROP语句将其删除。删除默认值的语法是: DROP DEFAULT default_name 其中: default_name :要删除默认值的名称。 在删除默认值时,应注意以下几点: DROP将默认值从数据库中删除。 如果要删除一个默认值,必须解除这个默认值的所有绑定,否则该默认值就不能被删除掉。 在一个批中不能既定义默认值又同时使用默认值。 只有默认值的创建者可以删除默认值。,45,【例6-13】 为数据库JWGL创建一个名为profession_default ,值为“讲师”的默认值,并绑定到表teacher的profession列,然后解除这个绑定,绑定解除后将此默认值删除。 USE JWGL GO CREATE DEFAULT profession_default AS 讲师 GO sp_bindefault profession_default , fession GO sp_unbindefault fession DROP DEFAULT profession_default GO,46,3. 使用企业管理器管理默认值 使用企业管理器可以创建、绑定默认值,也可以解除绑定并删除默认值。使用企业管理器创建默认值的具体步骤如下: 定义默认值 假设创建一个默认的邮政编码,名称:default_postalcode,值:210000。具体步骤如下: 启动企业管理器。 分别点击“数据库”、“JWGL”。 右击“默认”,在系统弹出的快捷菜单上点击“新建默认”,系统将弹出如图6-12的“默认属性”窗口。 在“名称”对应的输入框中输入默认值的名称default_postalcode,在“值”对应的输入框中输入默认值的值:210000。 点击“确定”,即可完成默认值default_postalcode的创建。,47, 绑定与解除默认值 假设将默认值default_postalcode绑定到teacher表的postalcode列。具体步骤如下: 启动企业管理器。 分别点击“数据库”、“JWGL”。 点击“默认”,右击右边窗格里的默认值default_postalcode,在系统弹出的快捷菜单上点击“属性”,系统将弹出类似图6-12的窗口。 点击“绑定UDT”可将默认值default_postalcode绑定到用户自定义数据类型,点击“绑定列”可将默认值default_postalcode绑定指定表的列。这里,点击“绑定列”,系统将弹出如图6-13的窗口。 在图6-13 绑定默认值的窗口中“表”对应的下拉框上选择表teacher,在“未绑定的列窗格”上选择列postalcode ,点击“添加”。 点击“确定”,即可完成默认值的绑定。 如需解除某个绑定,只需点击图6-13右边的窗格里的某个绑定,点击“删除”、“确定”即可。,48, 默认值的删除 删除默认值前必须解除该默认值的所有绑定。具体步骤如下: 启动企业管理器。 分别点击“数据库”、展开JWGL文件夹。 点击“默认”,再右击右边窗格里的某个默认值,在系统弹出的快捷菜单上点击“删除”即可。,49,6.5.5 规则 1. 规则的定义 规则是数据库对象之一。它指定向表的某列(或使用与该规则绑定的用户定义数据类型的所有列)插入或更新数据时,限制输入新值的取值范围。 一个规则可以是: 值的清单或值的集合; 值的范围; 必须满足的单值条件; 用like子句定义的编辑掩码; 规则是实现域完整性的方法之一。规则用来验证一个数据库中的数据是否处于一个指定的值域范围内,是否与特定的格式相匹配。当数据库中数据值被更新或被插入时,就要检查新值是否遵循规则,如果不符合规则就拒绝执行此更新或插入的操作。,50,规则可用于表中列或用户定义数据类型。规则在实现功能上等同于CHECK约束。用CREATE RULE语句创建规则,然后用sp_bindrule把它绑定至一列或用户定义的数据类型。 使用系统存储过程sp_helptext查看用于定义一个规则或缺省的SQL脚本。其语法是: sp_helptext rule_name 在创建规则时,应考虑以下几点: 缺省情况下,规则将检查创建和绑定规则之前输入的数据。 规则可以绑定到一列、多列或数据库中的用户定义数据类型。 规则要求一个值在一定范围内,并与特定格式相匹配。 在一个列上至多有一个规则起作用,如果有多个规则与一列相绑定,那么只有最后绑定到该列的规则才是有效的。,51,2. 使用T-SQL语言创建、管理规则 创建规则的语法是: CREATE RULE rule_name AS condition_expression rule_name:创建规则的名称,应遵循SQL Server标识符的命名规范。 condition_expression:指明定义规则的条件,在这个条件表达式中不能包含列名或其他数据库对象名,但它带有一个为前缀的参数(即参数的名字必须以为第一个字符),也称空间标志符( spaceholder)。意即这个规则被附加到这个空间标志符,它只在规则定义中引用,为数据项值在内存中保留空间,以便与规则作比较。 规则的绑定 规则创建之后,只有将其绑定到某个列或用户自定义数据类型才能有效。使用系统存储过程sp_binderule可实现与表中的列及用户自定义数据类型的绑定。 绑定规则的语法是: sp_bindrule rule_name, object_name,52,其中: rule_name :由CREATE RULE语句创建的规则名字,它将与指定的列或用户定义数据类型相捆绑。 object_name :指定要与该规则相绑定的列名或用户定义数据类型名。如果指定的是表中的列,其格式为“table.column”,否则被认为是用户定义数据类型名。 绑定时应注意如下几点: 绑定的缺省只适用于受INSERT语句影响的行。 绑定的规则只适用于受INSERT和UPDATE语句影响的行。 不能将缺省或规则绑定到系统数据类型或timestamp列。,53, 解除规则 使用系统存储过程sp_unbindrule可以解除由sp_unbindrule绑定到列或用户定义数据类型的规则。但被解除的规则仍然存在于数据库中。 解除规则的语法如下: sp_unbindrule rule_name , object_name 其中: rule_name:由CREATE RULE语句创建的规则名字,它将与指定的列或用户定义数据类型相捆绑。 object_name:指定要解除与该规则相绑定的列名或用户定义数据类型名。如果指定的是表中的列,其格式为table.column;否则被认为是用户定义数据类型名。,54, 删除规则 使用DROP RULE可删除由CREATE RULE命令创建的规则。 删除规则的语法如下: DROP RULE owner. rule_name 其中: rule_name:要解除的规则。 在删除规则时,应注意以下几点: 使用DROP可将规则从数据库中删除。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论