131
项项项 项项项项项项项 项项项项项项项 项项项 项项项项项项项 项项项项项项项 项项项项 项项项项项项项项项项项 项项项项项 项项项项项项项项项项项项项项项项项

项目三 公司管理数据系统的表的创建和修改

  • Upload
    sylvie

  • View
    58

  • Download
    9

Embed Size (px)

DESCRIPTION

项目三 公司管理数据系统的表的创建和修改. 终极目标:会创建公司管理数据库系统用户数据表,并能根据需要实现表的修改和删除操作. 工作任务. 在 SQL Server 2000 数据库管理系统下,在 companyinfo 数据库中完成公司管理数据库系统各数据表的创建,并能根据实际需要进行数据表的修改、删除及数据的相关操作。. 模块 1 公司管理数据系统数据表的建立. 教学目标: 1 .会用企业管理器和 Transact—SQL 语句创建数据表 2 .会用企业管理器和 Transact—SQL 语句创建外键约束以实现数据表间的关联. 工作任务( 1 ). - PowerPoint PPT Presentation

Citation preview

Page 1: 项目三  公司管理数据系统的表的创建和修改

项目三 公司管理数据系统的项目三 公司管理数据系统的表的创建和修改表的创建和修改

项目三 公司管理数据系统的项目三 公司管理数据系统的表的创建和修改表的创建和修改

终极目标:会创建公司管理数据库系统用户数据表,并能根据需要实现表的修改和删除操作

终极目标:会创建公司管理数据库系统用户数据表,并能根据需要实现表的修改和删除操作

Page 2: 项目三  公司管理数据系统的表的创建和修改

工作任务

在 SQL Server 2000 数据库管理系统下,在 companyinfo 数据库中完成公司管理数据库系统各数据表的创建,并能根据实际需要进行数据表的修改、删除及数据的相关操作。

Page 3: 项目三  公司管理数据系统的表的创建和修改

模块 1 公司管理数据系统数据表的建立

教学目标:1 .会用企业管理器和 Transact—SQL 语句创建数据表2 .会用企业管理器和 Transact—SQL 语句创建外键约束

以实现数据表间的关联

Page 4: 项目三  公司管理数据系统的表的创建和修改

工作任务( 1 )

1 、创建名称为“ product” 的产品信息表,该表结构如表 3-1 所示,要求利用企业管理器和 Transact—SQL语句两种方法实现。

表 3-1 product 表

字段名称 数据类型 预计长度 特殊限制产品 ID int 默认 主键产品名 int 默认类别 ID int 默认单价 money 默认库存量 int 默认

Page 5: 项目三  公司管理数据系统的表的创建和修改

一、 系统数据类型 1. 整型数据类型

2. 浮点数据类型

3. 字符数据类型

4. 日期和时间数据类型

5. 文本和图形数据类型

6. 货币数据类型

7. 位数据类型

8. 二进制数据类型

9. 特殊数据类型

10. 新增数据类型

数据类型就是定义每一列所能存放的数据值和数据格式。

Page 6: 项目三  公司管理数据系统的表的创建和修改

1. 整型数据类型

整型数据类型是最常用的数据类型之一,它主要用来存储数值,可以直接进行数据运算,而不必使用函数转换。

int ( integer ):可以存储从 -231 ~ 231-1 ( -2147483648~( 2147483647 )范围之间的所有正负整数。

Smallint :可以存储从 -213 ~ 213-1 ( -32768~32767 )范围之间的所有正负整数 。 2 个字节

Tinyint :可以存储从 0 到 255 范围之间的所有正整数。 Bigint :存放从 -263 到 263-1 范围内的整型数据。以 bigint 数

据类型存储的每个值占用 8 个字节,共 64 位,其中 63 位用于存储数字, 1 位用于表示正负。

Page 7: 项目三  公司管理数据系统的表的创建和修改

2. 浮点数据类型 浮点数据包括按二进制技术系统所能提供的

最大精度保留的数据。浮点数值的数据在 SQL Server 中采用只入不舍的方式进行存储 。

Real :精确到第 7 位精确位数,范围从 -3.40E-38~ 3.40E+38 ,占用 4 个字节的存储空间。

Float :可以精确到第 15 位小数,其范围从 -1.79E-308 到 1.79E+308 ,占用 8 个字节的存储空间。

语法: float[n] ,n 为数据精度 1~7 定义 real,8~15 为 float

Page 8: 项目三  公司管理数据系统的表的创建和修改

小数数据类型

Decimal 和 numeric : Decimal 数据类型和numeric 数据类型完全相同,它们可以提供小数所需要的实际存储空间,但也有一定的限制,可以用 2 到 17 个字节来存储从 -1038-1 到 1038-1 之间的数值。

Page 9: 项目三  公司管理数据系统的表的创建和修改

例: 存储数值 1829.3455 比存储 5.20 需要更加多字节。声明格式 :

numeric(p,[s]) | decimal(p,[s])

其中 p 为精度, s 为小数位数, s 的默认值为 0.

例: decimal(6,3) 若向该列赋值 65.4542345 则实际存储的是65.454

Page 10: 项目三  公司管理数据系统的表的创建和修改

3. 字符数据类型

SQL Server 提供了 3 类字符数据类型,分别是 Char 、 Varchar 和 Text 。在这 3类数据类型中,最常用的 Char 和 Varchar两类。字符数据类型可以用来存储各种字母、数字符号和特殊符号。

Page 11: 项目三  公司管理数据系统的表的创建和修改

Char

利用 Char 数据类型存储数据时,每个字符占用一个字节的存储空间。 Char 数据类型使用固定长度来存储字符,最长可以容纳 8000 个字符。

格式: char[(n)] n 表示所有字符所占的空间,默认值为 1 。如果实际数据的字符长度短于给定的最大长度,则

多余的字节会用空格填充。如果实际数据的字符长度超过了给定的最大长度,

则超过的字符将会被截断。 在使用字符型常量为字符数据类型赋值时,必须

使用单引号(‘’)将字符型常量括起来。

Page 12: 项目三  公司管理数据系统的表的创建和修改

Varchar Varchar 数据类型来存储最长可以达到 8000 字符

的变长字符。与 Char 数据类型不同, Varchar 数据类型的存储空间随存储在表列中的每一个数据的字符数的不同而变化。

格式: Varchar[(n)] n 表示所有字符所占的空间, 1~8000 。例 : 定义表列为 Varchar(20) ,那么存储在该列的数据最

多可以长达 20 个字节。但是在数据没有达到 20 个字节时并不会在多余的字节上填充空格。

当存储在列中的数据的值大小经常变化时,使用 Varchar 数据类型可以有效地节省空间。 但是 char 比 Varchar 的处理速度快。

Page 13: 项目三  公司管理数据系统的表的创建和修改

Text

当要存储的字符型数据非常庞大以至于 8000字节完全不够用时, Char 和 Varchar 数据类型都失去了作用。这时应该选择 Text 数据类型。

Text :用于存储大量文本数据,其容量理论上为1 到 231-1 ( 21 , 4748 , 3647 )个字节,但实际应用时要根据硬盘的存储空间而定。

Ntext :与 text 数据类型类似,存储在其中的数据通常是直接能输出到显示设备上的字符,显示设备可以是显示器、窗口或者打印机。

Page 14: 项目三  公司管理数据系统的表的创建和修改

4. 日期和时间数据类型 代表日期和一天内的时间的日期和时间数据类型。 Datetime :用于存储日期和时间的结合体 。从 1753 年 1

月 1 日到 9999 年 12 月 31 日的日期和时间数据,精确度为百分之三秒(等于 3.33 毫秒或 0.00333 秒)。

Smalldatetime :从 1900 年 1 月 1 日到 2079 年 6 月 6 日的日期和时间数据精确到分钟。

SQL Server 在用户没有指定小时以上精度的数据时,会自动设置 Datetime 和 Smalldatetime 数据的时间为 00:00:0

0 。

Page 15: 项目三  公司管理数据系统的表的创建和修改

输入日期和时间数据

常用的日期表示格式: 月 / 日 /年: 5/1//2003 、 05/01/03

月 - 日 -年: 5-1-2003 、 05-01-03

月 . 日 .年: 5.1.2003 、 05.01.03

常用的时间表示格式: 时:分 08 : 05

时:分:秒 08 : 05 : 25

时:分 :秒:毫秒 08 : 05 : 25 : 23

时:分 AM | PM 08 : 05 AM

Page 16: 项目三  公司管理数据系统的表的创建和修改

5. 货币数据类型

Money :用于存储货币值,存储在 money 数据类型中的数值以一个正数部分和一个小数部分存储在两个 4 字节的整型值中,存储范围为 -922337

213683477.3808 到 922337213683477.3808 ,精度为货币单位的万分之一。

Smallmoney :与 money 数据类型类似,但其存储的货币值范围比 money 数据类型小,其存储范围为 -214748.3468 到 214748.3467 。

Page 17: 项目三  公司管理数据系统的表的创建和修改

7. 位数据类型

Bit 数据相当于其他语言的逻辑型数据。他存储 0 和 1, 长度为 1 字节。

Page 18: 项目三  公司管理数据系统的表的创建和修改

8. 二进制数据类型binary [ ( n ) ] :固定长度的 n 个字节二进制数据。

N 必须从 1 到 8,000 。存储空间大小为 n+4 字节。

varbinary [ ( n ) ] : n 个字节变长二进制数据。 n 必须从 1 到 8,000 。存储空间大小为实际输入数据长度 +4 个字节,而不是 n 个字节。输入的数据长度可能为 0 字节。

Page 19: 项目三  公司管理数据系统的表的创建和修改

9. 特殊数据类型 Timestamp :亦称时间戳数据类型,数据库范

围的唯一数字,每次更新行时也进行更新。 ti

mestamp 这种数据类型表现自动生成的二进制数,确保这些数在数据库中是唯一的。存储大小为 8 字节。

一个表只能有一个 timestamp 列。每次插入或更新包含 timestamp 列的行时, timesta

mp 列中的值均会更新。

Page 20: 项目三  公司管理数据系统的表的创建和修改

10. 新增数据类型 ( 1 )

Bigint :用于存储从 -263 ( -9 , 223 , 372 , 036 , 834 ,773 , 807 )到 263-1 ( 9 , 223 , 372 , 036 , 834 ,773 , 807 )之间的所有正负整数。

sql_variant :用于存储除文本、图形数据和 timestamp类型数据外的其它任何合法的 SQL Server 数据。 sql_variant 类型的列可以包含不同数据类型的行。例如,定义为 sql_variant 的列可以存储 int 、 binary 和 char 值。不能使用 sql_variant 存储的值类型只有 text 、 ntext 、 image 、 timestamp 和 sql_variant 。

sql_variant 的最大长度可达 8016 字节。

Page 21: 项目三  公司管理数据系统的表的创建和修改

10. 新增数据类型 ( 2 )

table :用于存储对表或者视图处理后的结果集。这种新的数据类型使得变量可以存储一个表,从而使函数或过程返回查询结果更加方便、快捷。

Page 22: 项目三  公司管理数据系统的表的创建和修改

11. 用户自定义数据类型( 1 )

用户定义的数据类型基于在 Microsoft SQL Server 中提供的数据类型。当几个表中必须存储同一种数据类型时,并且为保证这些列有相同的数据类型、长度和可空性时,可以使用用户定义的数据类型。

例: SQL Server 实例包括一个名为 sysname 的用户定义数据类型。 sysname 在功能上与 nvarchar(128) 等效。

Page 23: 项目三  公司管理数据系统的表的创建和修改

创建用户定义的数据类型时提供参数:

名称 新数据类型所依据的系统数据类型 为空性(数据类型是否允许空值) 如果为空性未 明确定义,系统将依据数据库或连接的 ANSI Null 默认设置进行指派。

Page 24: 项目三  公司管理数据系统的表的创建和修改

创建数据类型的方法:

1. 使用企业管理器( Enterprise Manager )创建用户自定义数据类型。

2. 利用系统存储过程创建用户自定义数据类型 。系统存储过程 sp_addtype 为用户提供了 T_SQL 语句

创建自定义数据类型的途径。语法: sp_addtype [@typename=] type,

[@phystype=] system_data_type

[, [@nulltype=] ‘null_type’]

Page 25: 项目三  公司管理数据系统的表的创建和修改

【例 1】创建一个用户定义的数据类型 ssn ,其基于的系统数据类型是变长为 11 的字符,不允许空。 命令如下:

Exec sp_addtype ssn, 'varchar(11)', 'Not Null'

【例 2】创建一个用户定义的数据类型 birthday ,其基于的系统数据类型是 datetime ,允许空。命令如下:

Exec sp_addtype birthday,datetime,'Null'

Page 26: 项目三  公司管理数据系统的表的创建和修改

删除用户自定义的数据类型

1. 使用企业管理器( Enterprise Manager )删除用户自定义数据类型。

2. 利用 T-SQL 删除用户自定义数据类型 。系统存储过程 sp_droptype 为用户提供了 T_SQ

L 语句创建自定义数据类型的途径。语法:sp_droptype [@typename=] type

Page 27: 项目三  公司管理数据系统的表的创建和修改

【例 3】删除自定义的生日数据类型。

exec sp_droptype birthday

其运行结果如下:( 1 row(s) affected )( 0 row(s) affected )Type has been dropped.

Page 28: 项目三  公司管理数据系统的表的创建和修改

【例 4】假定用户已定义了一个数据类型ssn ,则删除该数据类型的命令为:

Exec sp_droptype 'ssn'

注意:当表中的列还正在使用用户定义的数据类型时,或者在其上面还绑定有默认或者规则时,这种用户定义的数据类型不能删除。

Page 29: 项目三  公司管理数据系统的表的创建和修改

( 二 ) 表的概念( 1 )

表是数据存储的地方,在 SQL Server 中所有的数据存储都基于表,表是数据库中最重要的部分。表由行和列组成。表中的一行称为一条记录,表中的一列称为一个字段。

Page 30: 项目三  公司管理数据系统的表的创建和修改

(二 ) 表的概念( 2 )

每个 SQL Server 数据库可容纳多达 20亿个表,每个表中至多可以有 1024 列,每一行最多允许有 8086 个字节。行数和表的大小只受服务器中可用存储空间的限制。

Page 31: 项目三  公司管理数据系统的表的创建和修改

(二 ) 表的概念( 3 ) SQL Server 2000 的数据表可分为用户表

和系统表两种类型。用户表是数据库用户根据自己的设计创建的表,用于存放用户的数据,系统表则是 SQL Server 2000 为实现数据库维护而创建的表,任何用户都不应该直接修改系统表,否则会导致数据库无法使用。

Page 32: 项目三  公司管理数据系统的表的创建和修改

(三)数据表的创建1. 利用企业管理器创建表 步骤如下:( 1 )在树形目录中找到要建表的数据库,展开该数据库。( 2)选择表,单击鼠标右键,在弹出的快捷菜单中选择

“新建表”命令,表设计器如图所示。( 3)表设计器的上半部分有一个表格,在这个表格中输入

列的属性,表格的每一行对应一列。对每一列都需要进行以下设置,其中前三项是必须在建表时给出的,它们是: 列名、数据类型、长度。

( 4)定义好所有列后,单击工具栏上的保存按扭,表就创建完成了。

Page 33: 项目三  公司管理数据系统的表的创建和修改

表设计器 3-1

Page 34: 项目三  公司管理数据系统的表的创建和修改

数据类型:数据类型是一个下拉列表框,其中包括了所有的系统数据类型和数据库中的用户自定义数据类型。

长度:如果选择的数据类型需要长度,则指定长度。

允许空:单击鼠标,可以切换是否允许为空值的状态,勾选说明允许为空值,空白说明不允许为空值,默认状态下是允许为空值的。

表设计器 3-2

Page 35: 项目三  公司管理数据系统的表的创建和修改

表设计器 3-3表设计器的下半部分是特定列的详细属性,包括是否是标识列、是否使用默认值等。

描述:定义字段的说明信息。 默认值:定义字段的默认值。如果在输入记录时没有指定该字段

的值,便将该字段设置为默认值。 标识:定义是否允许字段自动编号,其值可以为“否”、或“是

(不用于复制)”。都表示允许字段自动编号,只是后者在通过复制方法添加数据时不自动编号。

标识种子:定义字段自动编号的初值,默认值为 1 。 标识递增量:定义字段自动编号的递增量,默认值为 1 。 公式:定义计算字段的表达式。在定义表达式时,字段名称应使

用 [ ] 括起来,例如, [a] + [b] + 10 ,其中 a , b 分别为字段名称。 排序规则:定义字段的排序规则。

Page 36: 项目三  公司管理数据系统的表的创建和修改

工作任务( 1 )

1 、创建名称为“ product”的产品信息表,该表结构如表 3-1 所示,要求利用企业管理器和 Transact—SQL语句两种方法实现。 表 3-1 product表

字段名称 数据类型 预计长度 特殊限制产品 ID int 默认 主键产品名 int 默认类别 ID int 默认单价 money 默认库存量 int 默认

Page 37: 项目三  公司管理数据系统的表的创建和修改

方法一、利用企业管理器实现步骤如下:1.打开 SQL Server 企业管理器。2.展开 companyinfo 数据库节点,用鼠标右击

“表”对象,在打开的快捷菜单中执行【新建表】命令。

3. 在打开的“表设计器”对话框中。定义完成各字段后。

说明:当创建表时,必须指定表名、列名以及数据类型。同一个表中,列名不能重复,但是,同一个数据库中不同表的列名称可以相同。并必须为每个列都指定数据类型。

Page 38: 项目三  公司管理数据系统的表的创建和修改

方法二 利用 create命令创建表

CREATE TABLE table_name ( { < column_definition > /* 列的定义 */| column_name AS computed_column_expression /* 定义计算

列 */ | < table_constraint > } /* 指定表的约束 */ [ ON { filegroup | DEFAULT } ] /* 指定存储表的文件组 */[ TEXTIMAGE_ON { filegroup | DEFAULT }] /* 指定存储 text,ntext 和 image 类型数据的文件组 */

用“ CREATE TABLE表名”来创建表,表中列的定义必须有括号括起来。一个表最多有 1024列。 语法:

Page 39: 项目三  公司管理数据系统的表的创建和修改

说明:

< column_definition > ::= { column_name data_type } /* 指定列明、类型 */[[DEFAULT constant_expression ] /* 指定默认值 */|[IDENTITY [(seed,increment) NOT FOR REPLICATIO

N ] ] ] ] /* 指定默认值 */ [ < column_constraint > ] [ ...n ] /* 指定列的约束 */

Page 40: 项目三  公司管理数据系统的表的创建和修改

各参数说明 2-1 : database_name :用于指定在其中创建表的数据库名称。 owner :用于指定新建表的所有者的用户名 。table_name :用于指定新建的表的名称。 column_name :用于指定新建表的列的名称。 computed_column_expression :用于指定计算列的列值的表达式。 ON {filegroup | DEFAULT} :用于指定存储表的文件组名。 TEXTIMAGE_ON :用于指定 text 、 ntext 和 image 列的数据存储的文件组。 data_type :用于指定列的数据类型 。DEFAULT :用于指定列的缺省值。

Page 41: 项目三  公司管理数据系统的表的创建和修改

constant_expression :用于指定列的缺省值的常量表达式 。IDENTITY :用于指定列为标识列。 Seed :用于指定标识列的初始值。Increment :用于指定标识列的增量值。 NOT FOR REPLICATION :用于指定列的 IDENTITY

属性在把从其它表中复制的数据插入到表中时不发生作用,即不足的生成列值,使得复制的数据行保持原来的列值。column_constraint 和 table_constraint :用于指定列约束和表约束。

各参数说明 2-2 :

Page 42: 项目三  公司管理数据系统的表的创建和修改

方法二: 利用 Transact-SQL语句创建实现

操作步骤: 1 .在打开 “查询分析器”窗口。2 .连接数据库:在“查询分析器”窗口的工具栏的下拉

列表中,选中 companyinfo 数据库。3 .在查询分析器的查询窗口中输入如下: CREATE TABLE product( 产品 ID int primary key , 产品名 char(10) not null , 类别 ID int , 单价 money, 库存量 int )

Page 43: 项目三  公司管理数据系统的表的创建和修改

(二)按照任务 2要求创建 companyinfo数据库的其它数据表。1 .创建表名为“ p_order” 的产品订单表的命令如下:CREATE TABLE p_order(

订单 ID int primary key,

产品 ID int,

数量 int,

雇员 ID int,

客户 ID int,

订货日期 datetime

)

GO

Page 44: 项目三  公司管理数据系统的表的创建和修改

2 .创建表名为“ employee” 的产品信息表的命令如下:CREATE TABLE employee( 雇员 ID int primary key, 姓名 varchar(8), 性别 char(2), 出生日期 datetime, 雇佣日期 datetime, 特长 varchar(20), 薪水 money )GO

Page 45: 项目三  公司管理数据系统的表的创建和修改

3 .创建名为“ customer” 的客户表和名为“ category” 的类别表的命令如下:

CREATE TABLE customer ( /* 创建客户表 customer*/ 客户 ID int primary key, 公司名称 varchar(30) , 联系人姓名 varchar(8), 联系方式 varchar(12), 地址 varchar(30), 邮编 char(6))GO

Page 46: 项目三  公司管理数据系统的表的创建和修改

创建类别表

CREATE TABLE category ( /*创建类别表 category*/ 类别 ID int primary key, 类别名 varchar(10) , 说明 varchar(16))GO

Page 47: 项目三  公司管理数据系统的表的创建和修改

(三)按照任务 3的要求,创建名称为DIAGRAM_p_order_product的数据库关系图,从而实现 p-order 表和 product表间的关联。

Page 48: 项目三  公司管理数据系统的表的创建和修改

  

数据约束

约束是在创建表时,可以对某一列或多个列的组合设置限制条件,让 SQL Server帮助检查该列的输入值是否符合要求。当用户从客户端传送数据到 SQL Server服务器,系统也会检查数据是否符合要求,如果不符合要求将拒绝接受。

Page 49: 项目三  公司管理数据系统的表的创建和修改

约束的实现: 设置主键( PRIMARY KEY )约束、唯一

( UNIQUE )约束、外键( FOREIGN KEY )约束、缺省( DEFAULT )约束和检查( CHECK )约束等。

注意: 对于 BYTE 和 TEXT 列不可以指定主键约束、唯一约束和外键约束,但可以用检查约束来检查其值是否为 NULL 。

Page 50: 项目三  公司管理数据系统的表的创建和修改

约束的创建 约束作为表的一部分,可以在创建表的同时

创建约束,也可以在建立表之后追加定义或删除定义。在一个表中可以定义多个约束,甚至可以在一个列上定义多个约束。

Page 51: 项目三  公司管理数据系统的表的创建和修改

约束分类1 、列级约束 定义在一个列上的约束,是列定义的一部分,

与列名、数据类型、唯一标识号、默认值和排序规则等一样,都是列的属性。严格地说列的数据类型也是一种列约束,它限定了列的取值的域。

2 、表级约束 在列定义外单独定义的,它是多列之间的约束,

用 CONSTRAINT 关键字定义。 注意:如果要对一个表中的多个列定义约束,必须首先定义每个列,然后在末尾追加表约束。

Page 52: 项目三  公司管理数据系统的表的创建和修改

1. 主关键字( PRIMARY KEY )约束

一个表中,存在这样的字段,它在每个记录中的值都是惟一的,因此可以用来标识表中的各个不同的纪录。这样的字段被称为关键字。在这些列上创建主关键字约束,确保数据表的一列或几列的组合的值在表中具有惟一性。

Page 53: 项目三  公司管理数据系统的表的创建和修改

( 1 )在企业管理器中定义主键约束 “ 表设计器”对话框中,选择要设置为主键的

列,可以选择一个列,也可以选择多个列。在所选的字段左端的选择按钮上右击鼠标,在弹出的菜单中选择“设置主键”或点击工具栏上的图标 按钮 。

说明:如果主关键字包含多个字段,则在定义时,首先按住【Ctrl 】键或【Shift 】键,再选择字段。按【 Ctrl 】键可选择不连续的多个字段,按【Shift 】键则只能选择连续的多个字段。

Page 54: 项目三  公司管理数据系统的表的创建和修改

( 2)使用 Transact-SQL语句定义主关键字约束的语法如下 :CONSTRAINT constraint_name PRIMARY KEY [CLUSTERED|NONCLUSTERED]

(column_namel[,column_name2,..., column_namel6])

Page 55: 项目三  公司管理数据系统的表的创建和修改

各参数说明 :

constraint_name: 指定约束的名称。约束的名称在数据库中应是惟一的。如果不指定,则系统会自动生成一个约束名。

CLUSTERED|NONCLUSTERED:指定索引类别, CLUSTERED为缺省值。其具体信息请参见索引章节。

Column_name:指定组成主关键字的列名。主关键字最多由 16个列组成。

说明:每个表只允许存在一个主键约束( PRIMARY KEY)。

Page 56: 项目三  公司管理数据系统的表的创建和修改

【例 6 】创建一个产品信息表( product_info),以产品编号和名称为主关键字。

CREATE TABLE product_info(

产品 ID int , 产品名称 char(10) not null , 单价 money default 10 , 库存量 int null , 总价值 as 单价 * 库存量, /* 产品总价值 = 单价 * 库存量 */

CONSTRAINT P_KP_ID PRIMARY KEY ( 产品 ID, 产品名称 )

)

Page 57: 项目三  公司管理数据系统的表的创建和修改

2. 外键( FOREIGN KEY)约束 外键约束定义了表之间的关系。当一个表中

的一个列或多个列的组合和其它表中的主关键字属性相同时,就可以将这些列或列的组合定义为外关键字,并设定已适合哪个表中哪些列相关联。

作用:当在定义主关键字约束的表中更新列值时,其

它与之相关联的外关键字约束的表中的外关键字字段的值也将被自动更新。

当向含有外关键字的表插入数据时,如果与之相关联的表的字段中无与插入的外关键字字段值相同的值时,系统会拒绝插入数据。

Page 58: 项目三  公司管理数据系统的表的创建和修改

【例 7】数据库 pubs 中的 titl

es 表与 publishers 表有链接,因为在书名和出版商之间存在逻辑联系。 titles 表中的 pub_id 列与 publisher

s 表中的主键列相对应。 titl

es 表中的 pub_id 列是到 p

ublishers 表的外键。

Primary Key

Page 59: 项目三  公司管理数据系统的表的创建和修改

( 1 )在企业管理器中创建外键约束操作步骤如下:

1 .打开 companyinfo数据库2. 执行【新建数据库关系图】命令 .3.打开创建数据库关系图向导,进入数据库关系图创建窗口。4.在数据库关系图创建窗口的工具拦中,单击“在关系图上添加表”按钮。将打开“添加表”对话框。

5.在“添加表”对话框中,选择主键表 product表,并单击“添加”按钮,再选择外键表 p_oreder 表,并单击“添加”按钮。然后关闭“添加表”对话框。

6.将鼠标移动到 product表中的“产品 ID”左边的选择栏,单击左键,并将鼠标指针拖动到 p_oreder 表中的“产品 ID”字段上。

Page 60: 项目三  公司管理数据系统的表的创建和修改

( 2)使用 Transact-SQL语句定义外关键字约束语法如下 : CONSTRAINT constraint_name FOREIGN

KEY (column_namel[,column_name2,..., column_namel6])

REFERENCES ref_table [(ref_columnl[, ref_column2,..., ref_columnl6])]

[ ON DELETE{CASCADE|NO ACTION}] [ ON UPDATE{CASCADE|NO ACTION}]] [NOT FOR REPLICATION]

Page 61: 项目三  公司管理数据系统的表的创建和修改

各参数说明 : REFERENCES :指定要建立关联的表的信息。 ref_table :指定要建立关联的表的名称。 ref_column :指定要建立关联的表中的相关列的名称。 ON DELETE{CASCADE|NO ACTION} :指定在删除表

中数据时,对关联表所做的相关操作。在子表中有数据行与父表中的对应数据行相关联的情况下,如果指定了值 CASCADE,则在删除父表数据行时会将子表中对应的数据行删除;如果指定的是 NO ACTION,则 SQL Server 会产生一个错误,并将父表中的删除操作回滚。 NO ACTION是缺省值。

ON UPDATE{CASCADE|NO ACTION} :指定在更新表中数据时,对关联表所做的相关操作。

NOT FOR REPLICATION :指定列的外关键字约束在把从其它表中复制的数据插入到表中时不发生作用。

Page 62: 项目三  公司管理数据系统的表的创建和修改

【例 8】 创建一个课程表,然后创建一个成绩表与前面创建的学生表和课程的关联。脚本文件 3-1 :use studentsgoCREATE TABLE 学生 ( 学号 char(6) NOT NULL, 性别 char(2) NOT NULL , 姓名 char(10) NOT NULL, 学分 int constraint pk_student_id primary key ( 学号 )) go

Page 63: 项目三  公司管理数据系统的表的创建和修改

脚本文件 3-2

CREATE TABLE 课程 (课程号 char(12) NOT NULL ,

课程名 char(12) NOT NULL ,

学时 char(10) NOT NULL ,

学分 char(10) NOT NULL

constraint pk_course_id primary key (课程号 )

)

Go

Page 64: 项目三  公司管理数据系统的表的创建和修改

CREATE TABLE 成绩 (学号 char(6) NOT NULL , 课程号 char(12) NOT NULL, 课程名 char(12) NOT NULL , 成绩 int NOT NULL , 补考成绩 int NOT NULL constraint pk_grade_id primary key( 学号 ,课程号 ), constraint fr_student_id foreign key( 学号 ) references 学生 ( 学号 ),

constraint fr_course_id foreign key(课程号 ) references 课程 (课程号 )

)

脚本文件 3-3

Page 65: 项目三  公司管理数据系统的表的创建和修改

3.唯一性 (UNIQUE) 约束

唯一性约束指定一个或多个列的组合的值具有唯一性,以防止在列中输入重复的值。唯一性约束指定的列可以有 NULL属性。由于主关键字值是具有唯一性的,因此主关键字列不能再设定唯一性约束。唯一性约束最多由 16个列组成。

Page 66: 项目三  公司管理数据系统的表的创建和修改

( 1 )在企业管理器中定义惟一性键

【例 9】将“ product” 表中的产品 ID 列设定为唯一性约束。

在“ product” 表上右击鼠标,在弹出的菜单上点击 “设计表”,进入表的设计窗口。

在设计面板的空白处右击鼠标,在弹出的菜单中选择“属性”。选择“索引 / 键”选项卡

单击“新建”按钮,系统分配的名称将出现在“索引名”文本框中。

Page 67: 项目三  公司管理数据系统的表的创建和修改

( 2 )使用 Transact-SQL 语句定义惟一性约束

语法 :

CONSTRAINT constraint_name UNIQUE [CLUSTERED | NONCLUSTERED] (column_ namel[, column_ name2,...,

column_ name16])

Page 68: 项目三  公司管理数据系统的表的创建和修改

【例 10】定义一个员工信息表,其中员工的身份证号具有惟一性。

CREATE TABLE employee_info(

雇员 ID char(8),

姓名 char(10) , 身份证号 char(18)

constraint pk_emp_id primary key (雇员 ID) , constraint uk_emp_cardid unique (身份证

号 )

)

Page 69: 项目三  公司管理数据系统的表的创建和修改

例:CREATE TABLE jsy_temp3

( 驾照号  char(8)) PRIMARY KEY ,

 姓名  varchar(8) NOT NULL,

 身份证号 char(18) NOT NULL UNIQUE   NONCLUSTERED )

Page 70: 项目三  公司管理数据系统的表的创建和修改
Page 71: 项目三  公司管理数据系统的表的创建和修改
Page 72: 项目三  公司管理数据系统的表的创建和修改

4.检查( CHECK )约束

检查约束对输入列或整个表中的值设置检查条件,以限制输入值,保证数据库的数据完整性。可以对每个列设置符合检查。

Page 73: 项目三  公司管理数据系统的表的创建和修改

( 1 )在企业管理器中设定 CHECK 约束的方法【例 11】“ product” 表中的库存量列设定 CHECK 约束,使此列的

值限制在 100 到 1000 之间。 启动企业管理器,展开数据库,在“ product” 表上右击鼠标,在弹出的菜单上点击 “设计表”,进入表的设计窗口。

在设计面板的空白处右击鼠标,在弹出的菜单中选择“属性”。选择“ CHECK 约束”选项卡,将弹出对话框。

对话框中“ CHECK 约束”选项卡 单击“新建”按钮,“选定的约束”列表框显示了由系统分配的新约束名。系统分配的名称以 CK开始,后跟表名

在“约束表达式”框中,为 CHECK 约束键入 SQL 表达式,如将“ product” 表中的“库存量”列的数据限制在 100 到 1000 之间,即输入:“库存量 >=100 and 库存量 <=1000” ,

关闭设计表“ product” 的设计器,系统将提示是否保存对表产品的更改,点击“是”按钮,保存所创建的 CHECK 约束。

Page 74: 项目三  公司管理数据系统的表的创建和修改

( 2 )使用 Transact-SQL 语句定义检查约束的语法如下 :

CONSTRAINT constraint_name

CHECK [NOT FOR REPLICATION]

(logical expression)

参数 :NOT FOR REPLICATION :指定检查约束在把从其它表中复制的数据插入到表中时不发生作用。

logical_expression :指定逻辑条件表达式,返回值为 TRUE或 FALSE 。

Page 75: 项目三  公司管理数据系统的表的创建和修改

【例 12】创建一个订货表,其中订货量必须不小于 10 。create table order_tab2(

订单 ID char(8),

产品 ID char(8),

产品名 varchar(10) , 数量 smallint,

constraint pk_order_id primary key (订单 ID),

constraint chk_quantity check( 数量 >=10)

)

注意:对计算列不能作除检查约束外的任何约束。

Page 76: 项目三  公司管理数据系统的表的创建和修改

5.缺省( DEFAULT )约束

缺省约束通过定义列的缺省值或使用数据库的缺省值对象绑定表的列,来指定列的缺省值。 SQL Server推荐使用缺省约束,而不使用定义缺省值的方式来指定列的缺省值。

语法 :

CONSTRAINT constraint_name

DEFAULT constant_expression [FOR column_ name]

Page 77: 项目三  公司管理数据系统的表的创建和修改

例:创建一个司机表脚本文件 1 :Create table driver(

姓名 varchar(8) NOT NULL,

是否见习 char(1) DEFAULT(‘ 是’ ),

身份证号 char(18) NOT NULL UNIQUE ,

电话 char(8) )

Constraint jianxi_de default (‘ 是’ )

Page 78: 项目三  公司管理数据系统的表的创建和修改

6 、 NOT NULL 约束

NOT NULL 约束又称非空约束,表示使用该约束的列不允许使用空值。若该列是主键,则系统强制主键列为非空约束,而其他列的非空约束必须根据需要加以设置。

Page 79: 项目三  公司管理数据系统的表的创建和修改

模块 2 公司管理数据库系统数据表的修改和删除

教学目标1 .会用企业管理器和 Transact-SQL语句修

改数据表的结构2.会用企业管理器和 Transact-SQL语句删

除数据表3.能采用各种约束实现数据完整性

Page 80: 项目三  公司管理数据系统的表的创建和修改

工作任务

修改 companyinfo数据库中的数据表,具体要求如下:1 .修改前面创建的 employee表,将“特长”字段的数据

类型改为 varchar,长度为 100 。2.先创建一个名为 order_tab2的表,然后再删除。3.将 employee表中的姓名字段强制非空约束。4.将 employee表中性别字段创建一个 DEFAULT约束,

默认值为 ' 男 '。

Page 81: 项目三  公司管理数据系统的表的创建和修改

一、修改表 利用企业管理器增加、删除和修改字段 。 在企业管理器中,打开指定的服务器中要修改表的

数据库,用右键单击要进行修改的表,从弹出的快捷菜单中选择设计表选项,则会出现设计表对话框,在该对话框中,可以利用图形化工具完成增加、删除和修改字段的操作。

利用 Transact-SQL 语言中的 alter table命令增加、删除和修改字段。

通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义 。

Page 82: 项目三  公司管理数据系统的表的创建和修改

1 、利用企业管理器方法

工作任务(一)修改前面创建的 employee表,将“特长”字段的数据类型改为 varchar,长度为 100 。

( 1 )展开 SQL Server服务器和相应的数据库。点击“表”节点,在 employe 表上右击鼠标,在打开的快捷菜单中执行【设计表】命令。

( 2)在打开的设计表结构的表设计器中修改列的数据类型改为 varchar ,长度修改为 100 。

Page 83: 项目三  公司管理数据系统的表的创建和修改

2、利用 Transact-SQL语句的方法 ALTER TABLE 命令( 1 )

ALTER TABLE 命令可以添加或删除表的列、约束。语法 :ALTER TABLE table_name {ALTER COLUMN column_name /* 修改已有列的属性 */ new_data_type[(precision[,scale])] [COLLATE<collation_name>] [NULL | NOT NULL] |{ADD | DROP }ROWGUIDCOL }}

Page 84: 项目三  公司管理数据系统的表的创建和修改

ALTER TABLE 命令( 2)

/* 增加新列| ADD {[< column_definition > ] | column_name AS column_expression } [

,...n ] | [ WITH CHECK | WITH NOCHECK ] ADD { < table_constraint > } [ ,...n ]

Page 85: 项目三  公司管理数据系统的表的创建和修改

ALTER TABLE 命令( 3)

/* 删除列| DROP { [ CONSTRAINT ] constraint_name | COLUMN column } [ ,...n ] | { CHECK | NOCHECK } CONSTRAIN { ALL | constraint_name [ ,...n ] } | { ENABLE | DISABLE } TRIGGER { ALL | trigger_name [ ,...n ] } }

Page 86: 项目三  公司管理数据系统的表的创建和修改

参数说明 : table_name :指定要修改的表的名称。 column_name :指定列的名称。 new_data_type :指定要更改的列的新数据类型。 ADD|DROPS ROWGUIDCOL:加或删除列的 ROWGUIDCOL 属性。

ADD :添加一个或多个列、计算列或表约束的定义。 computed_column expression :计算列的计算表达式。 DROP{[CONSTRAINT] constraint name|COLUMN colum

n_name} :指定要删除的约束或列的名称。 CONSTRAINT :删除数据库中的约束。 COLUMN column_name :指定删除数据库中的列。

Page 87: 项目三  公司管理数据系统的表的创建和修改

( 1 )更改表以添加新列【例 13 】 添加一个允许空值的列,各行的新列中的值

将为 NULL 。CREATE TABLE doc_exa ( column_a INT) GO ALTER TABLE doc_exa ADD column_b VARCHAR(20) NULL GO EXEC sp_help doc_exa GO DROP TABLE doc_exa GO

Page 88: 项目三  公司管理数据系统的表的创建和修改

(2) 更改表以除去列【例 14 】 修改表以删除一列。CREATE TABLE doc_exb ( column_a INT, column_b VARCHAR(20) NUL

L) GO ALTER TABLE doc_exb DROP COLUMN column_b GO EXEC sp_help doc_exb GO DROP TABLE doc_exb GO

Page 89: 项目三  公司管理数据系统的表的创建和修改

(3)添加具有默认值的可为空的列【例 15】添加可为空的、具有 DEFAULT 定义

的列,并使用 WITH VALUES 为表中的各现有行提供值。如果没有使用 WITH VALUES ,那么每一行的新列中都将具有 NULL 值。程序清单:ALTER TABLE MyTable

ADD AddDate smalldatetime NULL

CONSTRAINT AddDateDflt

DEFAULT getdate() WITH VALUES

Page 90: 项目三  公司管理数据系统的表的创建和修改

( 4 )更改表以添加具有约束的列【例 16 】向表中添加具有 UNIQUE 约束的新列。 CREATE TABLE doc_exc ( column_a INT)

GO

ALTER TABLE doc_exc

ADD column_b VARCHAR(20) NULL

CONSTRAINT exb_unique UNIQUE (column_b)

GO

EXEC sp_help doc_exc

GO

DROP TABLE doc_exc

Page 91: 项目三  公司管理数据系统的表的创建和修改

工作任务 : 利用 Transact-SQL语句的方法

1)打开查询分析器。2)输入如下 Transact-SQL语句并执行。USE COMPANYINFOGOALTER TABLE employeeALTER COLUMN 特长 varchar(100) nullGO

Page 92: 项目三  公司管理数据系统的表的创建和修改

二、删除表 删除表时,表的结构定义、数据、全文索

引、约束和索引都永久地从数据库中删除,原来存放表及其索引的存储空间可用来存放其它表。

1 、使用企业管理器删除表2 、使用 T-SQL 的 DROP TABLE 语句删除表 语句格式: DROP TABLE TABLE_name

Page 93: 项目三  公司管理数据系统的表的创建和修改

A 、除去当前数据库内的表【例 17】从当前数据库中删除 titles1 表及其数

据和索引。DROP TABLE titles1

B 、除去另外一个数据库内的表【例 18】除去 pubs 数据库内的 authors2 表。

可以在任何数据库内执行此操作。DROP TABLE pubs.dbo.authors2

Page 94: 项目三  公司管理数据系统的表的创建和修改

三、查看表的信息 在数据库中创建表之后,可能需要查看有关表属性

的一些信息(如列名、列的数据类型及其索引的特性等等)。而最重要的是需要查看表中的数据。

1 、使用企业管理器查看表2 、使用系统存储过程 sp_help查看表信息 语句格式: sp_help [ [ @objname = ] name ]

参数 :[@objname =] name 是 sysobjects 中的任意对象的名称,或者是在 systypes 表中任何用户定义数据类型的名称。

Page 95: 项目三  公司管理数据系统的表的创建和修改

【例 19】显示有关 publishers 表的信息。USE pubs EXEC sp_help publishers

Page 96: 项目三  公司管理数据系统的表的创建和修改
Page 97: 项目三  公司管理数据系统的表的创建和修改

模块 3 公司管理数据系统表数据的操作

教学目标1.会用企业管理器和 Transact—SQL 语句插入记录2.会用企业管理器和 Transact—SQL 语句修改记录3.会用企业管理器和 Transact—SQL 语句删除记录

Page 98: 项目三  公司管理数据系统的表的创建和修改

工作任务( 1 )

1 、利用企业管理器和 Transact—SQL 语句,在 COMPANYINFO 数据库中的 product 表中插入如下记录,如表所示。

产品 ID 产品名 类别 ID 单价 库存量(件)

1000 电风扇 001 240 234

1001 冰箱 001 1850 600

1002 电视机 001 4560 1000

1003 牙膏 002 2.5 100

1004 牙刷 002 3 600

Page 99: 项目三  公司管理数据系统的表的创建和修改

工作任务( 2 )

2 、目前,市场出现一种新产品“电动牙刷”,它的产品代号为“ 1005” ,单价为 30元,类别代号为“ 002” ,库存量为 0 ,请将该产品的记录插入到 product 表中。

3 、由于国家政策的调价,将所有产品的单价上调 10% 。

4 、由于市场急速变化,产品信息表中数据不能准确反映信息,现删除所有的记录。

Page 100: 项目三  公司管理数据系统的表的创建和修改

一、插入数据

使用企业管理器方法:选择“打开表”项,单击“返回所有行”命令项。

使用 Transact-SQL 语句方法 : INSERT 语句向表中插入数据

语法: INSERT [INTO] table_name [(column_list)]

Values(Values_list )

Page 101: 项目三  公司管理数据系统的表的创建和修改

参数说明:

table_name :指定要插入数据的表名。column_list :是任选参数。如果在表中插入部

分数据时,或要插入的列以不同的顺序被定义时,可使用它。

VALUES :指出要插入的表的列应取的值。Values_list :要作为表的行插入的列的值列表。

Page 102: 项目三  公司管理数据系统的表的创建和修改

【例 20】向类别信息表( category )中,插入数据“ 3” 、“文具类”和“所有文具”。

USE COMPANYINFO

GO

INSERT category (类别 ID ,类别名,说明) VALUES (3 , ' 文具类 ' , ' 所有文具 ')

Page 103: 项目三  公司管理数据系统的表的创建和修改

需要注意的是:( 1 )输入的顺序和数据类型必须与表中列的顺序和数据类型

一致。( 2 )可以不给全部列赋值,但没有赋值的列必须是可以为空

的列。 ( 3 )标识列,不必输入数据。( 3 )字符型和日期型值插入时要用单引号扩起来。

Page 104: 项目三  公司管理数据系统的表的创建和修改

1 、插入与列顺序不同的数据【例 21】使用 column_list 及 VALUES 列表显式地指

定将被插入每个列的值。

CREATE TABLE T1 ( readerID int, readerName varch

ar(30))

INSERT T1 (readerName , readerID ) VALUES ('Rower',

1)

Page 105: 项目三  公司管理数据系统的表的创建和修改

2 、插入值少于列个数的数据【例 22】创建一个带有四个列的表。 INSERT 语句插入

一些行,这些行只有部分列包含值。CREATE TABLE T1 ( col1 int, col2 varchar(30) DEFAULT 'column default', col3 int, col4 varchar(40) ) go INSERT INTO T1 (col4) VALUES ('Explicit value') INSERT INTO T1 (col2,col4) VALUES ('Explicit value', 'E

xplicit value') INSERT INTO T1 (col2,col3,col4) VALUES ('Explicit valu

e',-44,'Explicit value')

Page 106: 项目三  公司管理数据系统的表的创建和修改
Page 107: 项目三  公司管理数据系统的表的创建和修改

二、 UPDATE 语句修改表中的数据 在表修改数据时,可以用 UPDATE 语句来

实现。 语法: UPDATE 表名 SET 列名 = 表达式 [WHERE 条件 ]

Page 108: 项目三  公司管理数据系统的表的创建和修改

【例 23】在产品信息表中,将所有库产量小于 200 的产品的库存量置为 0 。

程序USE COMPANYINFO

GO

UPDATE product

SET 库存量 =0

WHERE 库存量 <=200

GO

Page 109: 项目三  公司管理数据系统的表的创建和修改

1 、更新一列

Page 110: 项目三  公司管理数据系统的表的创建和修改

2 、更新多列 还可以通过省略 WHERE 子句或在 WHERE 子句中

包含一个可以影响多行的条件来更新表中的多行数据。

Page 111: 项目三  公司管理数据系统的表的创建和修改

三、 DELETE 语句删除表中数据

可以用的 DELETE 语句来实现。语法:DELETE [FROM] table_name

[WHERE condition]

参数说明:table_name :要删除的行的表名。tables :是用于设定删除条件所需的表名。condition :指定删除行的条件。

Page 112: 项目三  公司管理数据系统的表的创建和修改

【例 24】在产品信息表中,删除所有库产量小于 200 的产品信息。

USE COMPANYINFO

GO

DELETE product

WHERE 库存量 <=200

GO

Page 113: 项目三  公司管理数据系统的表的创建和修改

1 、删除一行数据

DELETE FROM <Table_name> [WHERE <Search_Condition>]

Page 114: 项目三  公司管理数据系统的表的创建和修改

2 、删除多行数据 可以通过省略 DELETE 语句中的 WHERE 子句或

在 WHERE 子句中包含一个将删除多行的条件来删除多行数据。

Page 115: 项目三  公司管理数据系统的表的创建和修改

四、 TRUNCATE TABLE 语句删除表中数据

可以使用 TRUNCATE TABLE 语句删除表中所有行。 TRUNCATE TABLE 语句与 DELETE 语句类似。但是, TRUNCATE TABLE 语句执行更快。

语法: TRUNCATE TABLE table_name

注意: TRUNCATE TABLE 语句删除表中的所有行,所以此语句不能包含 WHERE 字句。

Page 116: 项目三  公司管理数据系统的表的创建和修改

拓展知识一、默认定义:当用户未指定时由系统自动指派的数据值、选项设置、排序规则或名称。当用户未指定某些事件发生后要采取的操作时所自动采取的操作。

创建称为默认值的对象。当绑定到列或用户定义数据类型时,如果插入时没有明确提供值,默认值便指定一个值,并将其插入到对象所绑定的列中(或者,在用户定义数据类型的情况下,插入到所有列中)。

Page 117: 项目三  公司管理数据系统的表的创建和修改

在 CREATE TABLE 中使用 DEFAULT 关键字创建默认定义,将常量表达式指派为列的默认值。

使用 CREATE DEFAULT 语句创建默认对象,然后使用 sp_bindefault 系统存储过程将它绑定到列上。

语法: CREATE DEFAULT default_name

     AS 表达式

1 、有两种使用默认值的方法:

Page 118: 项目三  公司管理数据系统的表的创建和修改

【例 25】创建简单的字符默认值”男”。

USE pubs GO CREATE DEFAULT Sexdlf AS ‘男 '

Page 119: 项目三  公司管理数据系统的表的创建和修改

系统存储过程 sp_bindefault ,将默认值绑定到列或用户定义的数据类型。

语法: sp_bindefault [ @defname = ] 'default' ,

    [ @objname = ] 'object_name‘

参数: [@defname =] 'default' :由 CREATE DEFAULT 语句

创建的默认名称。 [@objname =] 'object_name' :要绑定默认值的和列名

称或用户定义数据类型。默认情况下,用户定义数据类型的现有列继承 default ,除非默认值直接绑定到列中。

2 、默认值绑定

Page 120: 项目三  公司管理数据系统的表的创建和修改

1 、绑定默认对象

Page 121: 项目三  公司管理数据系统的表的创建和修改

3 、使用 T_sQL 语句删除绑定语法: exec sp_unbindefault ‘绑定列的名称’

Page 122: 项目三  公司管理数据系统的表的创建和修改

规则是一种数据库对象,可以被绑定到一个或多个列上,还可以被绑定到用户自己定义的数据类型上。用于执行一些与 CHECK 约束相同的功能。 CHECK 约束是用来限制列值的首选标准方法。 CHECK 约束比规则更简明,一个列只能应用一个规则,但是却可以应用多个 CHECK 约束。

二、 规则

Page 123: 项目三  公司管理数据系统的表的创建和修改

创建称为规则的对象。当绑定到列或用户定义数据类型时,规则将指定可以插入到列中的可接受的值。

语法 :

CREATE RULE rule_name

AS condition_expression

参数 condition_expression :是定义规则的条件。

规则分类:范围规则、列表规则、模式规则

1 、创建规则

Page 124: 项目三  公司管理数据系统的表的创建和修改

1 )范围规则

【例 26 】创建一个规则,用以限制插入该规则所绑定的列中的整数范围。

CREATE RULE range_rule

AS

@range >= $1000 AND

@range < $20000

Page 125: 项目三  公司管理数据系统的表的创建和修改

【例 27】创建一个规则,用以将输入到该规则所绑定的列中的实际值限制为只能是该规则中列出的值。

CREATE RULE list_rule AS @list IN ('1389', '0736', '0877')

2 )列表规则

Page 126: 项目三  公司管理数据系统的表的创建和修改

3 )模式规则【例 28】创建一个遵循这种模式的规则:任意

两个字符的后面跟一个连字符和任意多个字符(或没有字符),并以 0 到 9 之间的整数结尾。

CREATE RULE pattern_rule AS@value LIKE '_ _-%[0-9]'

Page 127: 项目三  公司管理数据系统的表的创建和修改

系统存储过程 sp_bindrule将规则绑定到列或用户定义的数据类型。

语法 : sp_bindrule [ @rulename = ] 'rule' ,

[ @objname = ] 'object_name‘参数: [@rulename =] 'rule': 由 CREATE RULE 语句创建

的规则名称。 [@objname =] 'object_name': 绑定了规则的表和列

或用户定义的数据类型。如果 object_name 没有采取 table.column 格式,则认为它属于用户定义数据类型。

2 、绑定规则

Page 128: 项目三  公司管理数据系统的表的创建和修改

1 )将规则绑定到列【例 28】 假设已经用 CREATE RULE 语句在当前数据库中创建名为 today 的规则,将规则绑定到 employees 表的 hire date 列。将行添加到 employees 时,按照 today 规则检查 hire date 列的数据。

Use companyinfo

go

EXEC sp_bindrule 'today', employees.[hiredate]'

Page 129: 项目三  公司管理数据系统的表的创建和修改

2 )将规则绑定到用户定义的数据类型

【例 29】假设存在名为 rule_ssn 的规则和名为 ssn 的用户定义数据类型,将 rule_ssn 绑定到 ssn 。

EXEC sp_bindrule 'rule_ssn', 'ssn'

Page 130: 项目三  公司管理数据系统的表的创建和修改

3 、删除规则

从当前数据库中删除一个或多个用户定义的规则。

语法: DROP RULE { rule } [ ,...n ]

参数 Rule :是要删除的规则。规则名称必须符合标识

符规则。 N :是表示可以指定多个规则的占位符。

Page 131: 项目三  公司管理数据系统的表的创建和修改

【例 30】解除绑定名为 pub_id_rule 的规则并将其除去。

USE pubs

IF EXISTS (SELECT name FROM sysobjects WHERE name = 'pub_id_rule' AND type = 'R')

BEGIN

EXEC sp_unbindrule 'publishers.pub_id'

DROP RULE pub_id_rule

END

GO