资源预览内容
第1页 / 共110页
第2页 / 共110页
第3页 / 共110页
第4页 / 共110页
第5页 / 共110页
第6页 / 共110页
第7页 / 共110页
第8页 / 共110页
第9页 / 共110页
第10页 / 共110页
亲,该文档总共110页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
数据库原理与应用数据库原理与应用第第1010章章 数据库表数据库表学习目的学习目的v掌握利用企业管理器(Enterprise Manager)创建表;v掌握利用Transact-SQL语句中的create命令创建表重点重点&难点难点v重点利用Transact-SQL语句中的create命令创建表v难点无第第10章章 数据库表数据库表v数据库最重要的功能之一是存储数据。数据库最重要的功能之一是存储数据。v关系型数据库中,数据保存在表中。关系型数据库中,数据保存在表中。v数据库逻辑结构设计后,得到了一系列的数据库逻辑结构设计后,得到了一系列的关系模式,进入数据库实施阶段,将把关关系模式,进入数据库实施阶段,将把关系模式转换为系模式转换为DBMSDBMS的数据库表。的数据库表。v数据库表是数据的最基本构成元素,对数数据库表是数据的最基本构成元素,对数据库的操作大多基于数据库表。据库的操作大多基于数据库表。第第10章章 数据库表数据库表10.110.1创建数据库表创建数据库表10.2 10.2 修改数据库表修改数据库表10.3 10.3 使用约束使用约束10.410.4 建立索引建立索引10.510.5 删除数据库表删除数据库表10.1 创建数据库表创建数据库表v创建表创建表:就是将逻辑设计阶段得到的关系模式用DBMS所支持的形式表达出来。每一个关系模式就是一张数据(库)表。可看作定义这张表的“表头”如何命名每一列及每一列的属性特点是什么。在SQL Server 2000中,每个数据库中最多可以创建200万个表,用户创建数据库表时,最多可以定义1024列,也就是可以定义1024个字段。10.1 创建数据库表创建数据库表vSQL Server 2000提供了两种方法创建数据库表利用企业管理器(Enterprise Manager)创建表利用Transact-SQL语句中的create命令创建表10.1 创建数据库表创建数据库表v利用企业管理器(Enterprise Manager)创建表步骤如下:(1)在树形目录中找到要建表的数据库,展开该数据库。(2)选择表,单击鼠标右键,在弹出的快捷菜单中选择“新建表”命令,表设计器如图所示。10.1 创建数据库表创建数据库表v利用企业管理器(Enterprise Manager)创建表步骤如下:(1)在树形目录中找到要建表的数据库,展开该数据库。(2)选择表,单击鼠标右键,在弹出的快捷菜单中选择“新建表”命令,表设计器如图所示。(3)表设计器的上半部分有一个表格,在这个表格中输入列的属性,表格的每一行对应一列。对每一列都需要进行以下设置,其中前三项是必须在建表时给出的,它们是:列名:即字段名。数据类型:数据类型是一个下拉列表框,其中包括了所有的系统数据类型长度:如果选择的数据类型需要长度,则指定长度。允许空:单击鼠标,可以切换是否允许为空值的状态,勾选说明允许为空值,空白说明不允许为空值,默认状态下是允许为空值的。10.1 创建数据库表创建数据库表v利用企业管理器(Enterprise Manager)创建表步骤如下:(3)表设计器的上半部分有一个表格,在这个表格中输入列的属性,表格的每一行对应一列。对每一列都需要进行以下设置,其中前三项必须在建表时给出,它们是:列名:即字段名。数据类型:数据类型是一个下拉列表框,其中包括了所有的系统数据类型长度:如果选择的数据类型需要长度,则指定长度。允许空:单击鼠标,可以切换是否允许为空值的状态,勾选说明允许为空值,空白说明不允许为空值,默认状态下是允许为空值的。10.1 创建数据库表创建数据库表v利用企业管理器(Enterprise Manager)创建表步骤如下:(3)表设计器的上半部分有一个表格,在这个表格中输入列的属性,表格的每一行对应一列。 表设计器的下半部分是特定列的详细属性,包括是否是标识列、是否使用默认值等。(4)定义好所有列后,单击工具栏上的保存按扭,表就创建完成了。10.1 创建数据库表创建数据库表v利用Transact-SQL语句中的create命令创建表v其语法形式如下:CREATE TABLE 表名(列名1 数据类型 identity|not null|null, 列名2 数据类型 identity|not null|null,)注意:在创建表之前,要先使用use命令打开需要创建表的数据库10.1 创建数据库表创建数据库表v三个参数的含义:null:表示该列的值可以为空值,即没有存储任何数据,此为默认参数(不能将空值理解为该列的值是0或空字符串等值)not null:表示该列的值不能为空。identify:计数器,表示该列的值是一组递增的整数数据。初始值默认为1,增长步长默认为1。也可自己指定初始值和增长步长。(课本 表10-1)10.1 创建数据库表创建数据库表v例:在Company数据库中创建一个雇员信息表v该表记录了雇员的号码、姓名、性别、出生日期、雇佣日期、职工种类、工资信息。其中:职工号码:整型,不能为空 姓名:可变长度字符型,允许为空 出生日期:日期型,允许为空 雇佣日期:日期型,不能为空 职工种类:可变长度字符型,允许为空 工资:货币型,允许为空10.1 创建数据库表创建数据库表v其SQL语句的程序清单如下: use CompanygoCREATE TABLE employee ( number int not null, name varchar(10) NULL, birthday datetime null, hire_date datetime NOT NULL, professional_title varchar(10) null, salary money null)10.1 创建数据库表创建数据库表v表名在同一数据库内,数据库表的名称是惟一的 可以使用中文,也可以使用西文符号最多64个字符(一个汉字占两个字符)建立临时表 临时表的表名必须以#打头 仍然使用CREATE TABLE命令例:Create table #demotable (user_id numeric(10,0) identity, Name varchar(30) not NULL) 10.1 创建数据库表创建数据库表例例10-1 确定期刊采编系统数据库中各数据表的表名确定期刊采编系统数据库中各数据表的表名 关系模式名数据库表名部门mag_dept人员mag_emp期刊mag_info稿件mag_doc10.1 创建数据库表创建数据库表v列名表中的每一列也称为字段,所以列名也叫字段名字段名的命名方式基本同数据表名的命名字段名在数据表中要求是惟一的,但在整个数据库中可以重名 10.1 创建数据库表创建数据库表v数据类型定义数据表中的每一个字段必须声明其数据类型,DBMS才能实现对数据的存储管理。为每一个字段选择合适的数据类型和数据长度将直接影响着数据库系统存储空间的利用和系统的性能。在建立数据库表时,要慎重决定每个字段的数据类型。 10.1 创建数据库表创建数据库表v数据类型T-SQL中支持的、常用的数据类型 字符型 日期时间类型 数值类型 二进制型 位型 文本型 图像型 时间戳型 10.1 创建数据库表创建数据库表v数据类型数据类型(1 1)字符型字符型 字符型变量应定义长度字符型变量应定义长度允许定义的最大长度是允许定义的最大长度是255 255 有两种有两种固定长度的固定长度的char( )char( )类型类型可变长度的可变长度的varchar(varchar( ) )类型类型 输入字符型数据时必须用输入字符型数据时必须用单引号单引号将数据括起来将数据括起来 10.1 创建数据库表创建数据库表v数据类型数据类型(2 2)日期时间型日期时间型datetimedatetime和和smalldatetimesmalldatetime是用来存储日期和时间数据是用来存储日期和时间数据 比较内容 Datetime Smalldatetime 最小值 Jan 1,1753 Jan 1,1900 最大值 Dec 31,9999 Jun 6,2079 占用存储空间 8byte 4byte 精度 3.33毫秒 1分钟 10.1 创建数据库表创建数据库表v数据类型数据类型(3 3)整数类型整数类型多用于处理数值类型数据多用于处理数值类型数据 比较内容 int smallint tinyint 最小值 -231 -215 0 最大值 231-1 215-1 255 占用存储空间 4byte 2byte 1byte 10.1 创建数据库表创建数据库表v数据类型数据类型(4 4)浮点数类型浮点数类型多用于处理取值范围很大的数字量多用于处理取值范围很大的数字量 ,使用时有一定的精确度,使用时有一定的精确度比较内容FloatReal最小值-1.79E+308-3.40E+38最大值1.79E+3083.40E+38占用存储空间8Byte4Byte精度最多15位最多7位10.1 创建数据库表创建数据库表v数据类型数据类型(5 5)精确数类型精确数类型精确数类型有两种形式精确数类型有两种形式DecimalDecimalNumeric Numeric 与浮点类型数据的区别与浮点类型数据的区别 可自定义精度的位数可自定义精度的位数例例 num_col(5,2) num_col(5,2)可以表示的最大值是可以表示的最大值是999.99999.9910.1 创建数据库表创建数据库表v数据类型数据类型(6 6)货币型货币型¥、¥、比较内容MoneySmallmoney最小值-922,337,203,685,477.5808-214,748.3648最大值922,337,203,685,477.5807214,748.3647占用存储空间8Byte4Byte精度小数点后4位小数点后4位10.1 创建数据库表创建数据库表v数据类型数据类型(7 7)位数据类型位数据类型位数据类型位数据类型bitbit是一种逻辑数据类型是一种逻辑数据类型 只有只有1 1和和0 0两种数值两种数值一般常用作一般常用作true/falsetrue/false使用使用 定义定义bitbit列时,不允许为列时,不允许为NULLNULL,也不能建立索引,也不能建立索引 多个多个bitbit列可占用一个字节列可占用一个字节10.1 创建数据库表创建数据库表v数据类型数据类型(8 8)文本型和图像型)文本型和图像型文本类型文本类型texttext 图像类型图像类型image image 每行可以存储每行可以存储2GB2GB的二进制大型对象的二进制大型对象 10.1 创建数据库表创建数据库表v数据类型数据类型(9 9)时间戳型时间戳型时间戳型表示时间戳型表示TimestampTimestamp由系统自动赋值的一个计数器数据由系统自动赋值的一个计数器数据 记录了记录了数据行的操作顺序数据行的操作顺序 时间戳列的数据保持惟一,它可以惟一标识表中的列时间戳列的数据保持惟一,它可以惟一标识表中的列 时间戳列的值实际来自于事务日志时间戳列的值实际来自于事务日志 10.1 创建数据库表创建数据库表例例10-2 10-2 确定期刊采编系统数据库中各数据表中字段的字段名和数据类型确定期刊采编系统数据库中各数据表中字段的字段名和数据类型 数据表数据表Mag_deptMag_dept10.1 创建数据库表创建数据库表例例10-2 10-2 确定期刊采编系统数据库中各数据表中字段的字段名和数据类型确定期刊采编系统数据库中各数据表中字段的字段名和数据类型 数据表数据表mag_empmag_emp10.1 创建数据库表创建数据库表例例10-2 10-2 确定期刊采编系统数据库中各数据表中字段的字段名和数据类型确定期刊采编系统数据库中各数据表中字段的字段名和数据类型 数据表数据表Mag_infoMag_info10.1 创建数据库表创建数据库表例例10-2 10-2 确定期刊采编系统数据库中各数据表中字段的字段名和数据类型确定期刊采编系统数据库中各数据表中字段的字段名和数据类型 数据表数据表mag_docmag_doc10.1 创建数据库表创建数据库表例例10-3 建立期刊采编系统数据库中各数据表建立期刊采编系统数据库中各数据表 创建创建mag_dept表表10.1 创建数据库表创建数据库表例例10-3 建立期刊采编系统数据库中各数据表建立期刊采编系统数据库中各数据表 创建创建mag_emp表表 10.1 创建数据库表创建数据库表例例10-3 建立期刊采编系统数据库中各数据表建立期刊采编系统数据库中各数据表 创建创建mag_info表表 10.1 创建数据库表创建数据库表例例10-3 建立期刊采编系统数据库中各数据表建立期刊采编系统数据库中各数据表 创建创建mag_doc表表 10.1 创建数据库表创建数据库表v用T-SQL语句查看表定义 1.使用系统存储过程sp_help可以查看表的定义,在查询分 析器中输入 sp_help employee命令,可以查看刚刚创建 的employee表的结构。补充:补充:10.1 创建数据库表创建数据库表v2.使用系统存储过程sp_helpdb格式如下:sp_helpdb 数据库名1)不给出参数,将显示服务器中所有数据库的信息,如图所示。补充:补充:10.1 创建数据库表创建数据库表v使用系统存储过程sp_helpdb10.1 创建数据库表创建数据库表v使用系统存储过程sp_helpdb)给出某个数据库名时,只显示这个数据库的信息如图:10.1 创建数据库表创建数据库表10.1 创建数据库表创建数据库表v3.使用系统存储过程sp_databases格式如下:sp_databases显示服务器中所有可以使用的数据库的信息,如图所示。v注意:sp_helpdb也是显示服务器中所有数据库的信息,两者之间的差别在哪?补充:补充:10.1 创建数据库表创建数据库表10.1 创建数据库表创建数据库表v4.使用系统存储过程sp_helpfile格式如下:sp_helpfile 文件名查看数据库中文件的信息。v注意:要先使用use命令打开所要查看的数据库补充:补充:10.1 创建数据库表创建数据库表v4.使用系统存储过程sp_helpfile(1)不加文件名,显示数据库中所有文件的信息,如图所示。补充:补充:10.1 创建数据库表创建数据库表10.1 创建数据库表创建数据库表v4.使用系统存储过程sp_helpfile(2)加文件名,显示数据库中某一文件的信息补充:补充:10.1 创建数据库表创建数据库表10.1 创建数据库表创建数据库表v5.使用系统存储过程sp_helpfilegroup格式如下:sp_helpfilegroup 文件组名不加文件组名,显示数据库中所有文件组的信息。用法同sp_helpfile。补充:补充:第第10章章 数据库表数据库表10.1 创建数据库表创建数据库表10.2 修改数据库表修改数据库表10.3 使用约束使用约束10.4 建立索引建立索引10.5 删除数据库表删除数据库表10.2 修改数据库表修改数据库表v添加或删除列添加或删除列v修改列的属性修改列的属性 v更改列名和表名更改列名和表名10.2 修改数据库表修改数据库表v利用企业管理器增加、删除和修改字段利用企业管理器增加、删除和修改字段 。在企业管理器中,打开指定的服务器中要修改表的数据库,用右在企业管理器中,打开指定的服务器中要修改表的数据库,用右键单击要进行修改的表,从弹出的快捷菜单中选择设计表选项,键单击要进行修改的表,从弹出的快捷菜单中选择设计表选项,则会出现设计表对话框,在该对话框中,可以利用图形化工具完则会出现设计表对话框,在该对话框中,可以利用图形化工具完成增加、删除和修改字段的操作。成增加、删除和修改字段的操作。v利用利用Transact-SQLTransact-SQL语言中的语言中的alter tablealter table命令增加、删除命令增加、删除和修改字段。和修改字段。10.2 修改数据库表修改数据库表v增加列增加列语句格式语句格式:ALTER TABLEALTER TABLE表名表名ADDADD列名列名 列的描述列的描述例如:向例如:向CompanyCompany数据库的数据库的employeeemployee表中添加性别(表中添加性别(sexsex)列。)列。use Companyuse Companygogoalter table employee alter table employee add sex char(4) nulladd sex char(4) null10.2 修改数据库表修改数据库表v增加列增加列v例例10-4 10-4 向数据表向数据表mag_empmag_emp中添加一新属性中添加一新属性IDID(身份证号码)(身份证号码),数据类型为字符型,固定长度,数据类型为字符型,固定长度18 18 10.2 修改数据库表修改数据库表v删除列删除列语句格式语句格式:ALTER TABLE ALTER TABLE 表名表名DROP COLUMN DROP COLUMN 列名列名例如:删除例如:删除 employee employee表的表的sexsex列。列。use Companyuse Companygogoalter table employeealter table employee drop column sex drop column sex10.2 修改数据库表修改数据库表v删除列删除列例例10-5 10-5 删除数据表删除数据表mag_empmag_emp中属性中属性IDID10.2 修改数据库表修改数据库表v修改列定义修改列定义表中的每一列都有其定义,包括列名、数据类型、数据长度以及表中的每一列都有其定义,包括列名、数据类型、数据长度以及是否允许为空值等,这些值都可以在表创建好以后修改。是否允许为空值等,这些值都可以在表创建好以后修改。修改列定义的修改列定义的语句格式语句格式为:为:ALTER TABLE ALTER TABLE 表名表名ALTER COLUMN ALTER COLUMN 列名列名 数据类型列的描述数据类型列的描述10.2 修改数据库表修改数据库表v修改列定义修改列定义例如:将例如:将employeeemployee表的表的namename列改为最大长度为列改为最大长度为2020的的varcharvarchar型数据,型数据,且不允许空值。且不允许空值。use Companyuse Companygogoalter table employeealter table employeealter column name varchar(20) not nullalter column name varchar(20) not null默认状态下,列是被设置为允许空值的,将一个原来允许空值的默认状态下,列是被设置为允许空值的,将一个原来允许空值的列改为不允许空值,必须在以下两个条件满足时才能成功:列改为不允许空值,必须在以下两个条件满足时才能成功:(1 1)列中没有存放是空值的记录)列中没有存放是空值的记录(2 2)在列上没有创建索引。)在列上没有创建索引。10.2 修改数据库表修改数据库表v修改列定义修改列定义例例10-6 10-6 将数据表将数据表mag_infomag_info中中PubDatePubDate的数据类型更改为的数据类型更改为smalldatetime smalldatetime 10.2 修改数据库表修改数据库表v更改列名和表名更改列名和表名更改列名更改列名sp_rename sp_rename 表名表名. .列名列名,新列名,新列名更改表名更改表名sp_rename sp_rename 原表名,新表名原表名,新表名10.2 修改数据库表修改数据库表v更改列名和表名更改列名和表名例例10-7 10-7 数据库数据库usedb1usedb1中建有数据表中建有数据表testtest,包含,包含numbernumber、stu_namestu_name和和classclass三个字段,请将三个字段,请将classclass更名为更名为class_noclass_no10.2 修改数据库表修改数据库表v更改列名和表名更改列名和表名例例10-8 10-8 将数据库将数据库usedb1usedb1中数据表中数据表testtest更名为更名为student student 第第10章章 数据库表数据库表10.1 创建数据库表创建数据库表10.2 修改数据库表修改数据库表10.3 使用约束使用约束10.4 建立索引建立索引10.5 删除数据库表删除数据库表10.3 使用约束使用约束v约束的作用约束的作用实现数据的完整性实现数据的完整性实体完整性实体完整性参照完整性参照完整性用户自定义完整性用户自定义完整性10.3 使用约束使用约束v约束的类型约束的类型名称作用实现的完整性Primary key定义主键,保证主键列无重复值实体完整性Unique保证该列无重复值实体完整性Foreign key定义外键,保证数据表间数据的一致性参照完整性Check定义表中某些列的数据范围自定义完整性Default为列的数据提供默认值自定义完整性10.3 使用约束使用约束v建立约束建立约束定义约束时使用定义约束时使用Create tableCreate table语句语句或使用或使用Alter tableAlter table语句语句即可以在定义数据表的数据列时直接定义约束,也可即可以在定义数据表的数据列时直接定义约束,也可以对已定义的数据表添加约束以对已定义的数据表添加约束 10.3 使用约束使用约束v建立约束建立约束使用使用Create tableCreate table语句格式:语句格式:Create table Create table 表名表名(列名(列名1 1 数据类型数据类型 identity |NOT NULL| NULL identity |NOT NULL| NULL Constraint Constraint 约束名约束名 约束定义约束定义, , 列名列名2 2 数据类型数据类型 identity |NOT NULL| NULL identity |NOT NULL| NULL Constraint Constraint 约束名约束名 约束定义约束定义, , Constraint Constraint 约束名约束名 约束定义约束定义)建立约束时看建立约束时看随数据定义随数据定义或者或者单独定义单独定义 10.3 使用约束使用约束v建立约束建立约束使用使用Alter tableAlter table语句格式:语句格式: Alter table Alter table 表名表名 Add Constraint Add Constraint 约束名约束名 约束定义约束定义约束名是一个可选项,如果用户自己不定义约束名,约束名是一个可选项,如果用户自己不定义约束名,则系统将按照一定规则命名该约束。则系统将按照一定规则命名该约束。不命名约束名时,关键字不命名约束名时,关键字constraintconstraint也要省略。也要省略。10.3 使用约束使用约束v1.primary key1.primary key主键的添加、删除和修改操作方法有两种:主键的添加、删除和修改操作方法有两种:(1)(1)企业管理器操作法,在企业管理器中,用右键单击企业管理器操作法,在企业管理器中,用右键单击要操作的数据库表,从弹出的快捷菜单中选择设计表选要操作的数据库表,从弹出的快捷菜单中选择设计表选项项 ,然后根据提示操作。,然后根据提示操作。如图如图10.3 使用约束使用约束10.3 使用约束使用约束v1.primary key1.primary key主键的添加、删除和修改操作方法有两种:主键的添加、删除和修改操作方法有两种:(2)(2)Transact-SQLTransact-SQL语句操作法语句操作法其其语法形式语法形式如下:如下:CONSTRAINT constraint_nameCONSTRAINT constraint_name PRIMARY KEY( PRIMARY KEY(列名列名1,1,列名列名2,2,)当主键由多个列构成时当主键由多个列构成时, ,则将列名依次写在括号中则将列名依次写在括号中10.3 使用约束使用约束v1.primary key1.primary key主键的添加、删除和修改操作方法有两种:主键的添加、删除和修改操作方法有两种:(2)(2)Transact-SQLTransact-SQL语句操作法语句操作法例例10-9 10-9 向数据表向数据表map_deptmap_dept中添加主键约束中添加主键约束 10.3 使用约束使用约束v注意:此例没有定义约束名,则系统会按照一定注意:此例没有定义约束名,则系统会按照一定规则命名该约束。查看约束名方法:如图规则命名该约束。查看约束名方法:如图10.3 使用约束使用约束v1.primary key1.primary key使用使用create tablecreate table建立主键约束时两种写法建立主键约束时两种写法(1 1)定义列名和数据类型后,直接写上关键字)定义列名和数据类型后,直接写上关键字primary keyprimary key(2 2)定义完所有列名和数据类型后,单独写明)定义完所有列名和数据类型后,单独写明primary keyprimary key(列名(列名11,列名,列名2 2 当主键有两个或两个以上属性共同构成时,必须用第二当主键有两个或两个以上属性共同构成时,必须用第二种方法,即单独定义,而不能随列的定义而定义。种方法,即单独定义,而不能随列的定义而定义。10.3 使用约束使用约束(1 1)定义列名和数据类型后,直接写上关键字)定义列名和数据类型后,直接写上关键字primary keyprimary key例例10-10 10-10 在数据库在数据库usedb2usedb2中建立数据表中建立数据表map_deptmap_dept,同时,同时定义主键约束定义主键约束 10.3 使用约束使用约束(2 2)定义完所有列名和数据类型后,单独写明)定义完所有列名和数据类型后,单独写明primary keyprimary key(列名(列名11,列名,列名2 2 例例10-11 10-11 在数据库在数据库usedb1usedb1中建立数据表中建立数据表gradegrade,表中包括,表中包括学号学号snosno(charchar)、课程号)、课程号cnocno(charchar)、成绩)、成绩gmarkgmark(numericnumeric)属性)属性 . .主键由学号和课程号构成主键由学号和课程号构成 10.3 使用约束使用约束v2.unique2.unique唯一性约束用于指定一个或者多个列的组合的值具有唯一性约束用于指定一个或者多个列的组合的值具有唯一性,以防止在列中输入重复的值。当使用唯一性唯一性,以防止在列中输入重复的值。当使用唯一性约束时,需要考虑以下几个因素:约束时,需要考虑以下几个因素: 主键自动具有主键自动具有uniqueunique的特性的特性一个表中可以允许有多个唯一性约束。一个表中可以允许有多个唯一性约束。可以把唯一性约束定义在多个字段上。可以把唯一性约束定义在多个字段上。唯一性约束用于强制在指定字段上创建一个唯一性唯一性约束用于强制在指定字段上创建一个唯一性 索引。索引。10.3 使用约束使用约束v2.unique2.unique(1 1)企业管理器操作法)企业管理器操作法10.3 使用约束使用约束v2.unique2.unique(2 2)Transact-SQLTransact-SQL语句操作法语句操作法CONSTRAINT CONSTRAINT 约束名约束名 UNIQUE( UNIQUE(列名列名1,1,n)n)基本用法同主键约束基本用法同主键约束10.3 使用约束使用约束v2.unique2.unique例例10-12 10-12 向数据库向数据库usedb2usedb2中数据表中数据表mag_deptmag_dept属性属性DepManagerDepManager增加增加UNIQUEUNIQUE约束约束10.3 使用约束使用约束v3.foreign key3.foreign key外部键约束用于强制参照完整性,提供单个字段或者多外部键约束用于强制参照完整性,提供单个字段或者多个字段的参照完整性。个字段的参照完整性。基本格式为基本格式为: :constraint constraint 约束名约束名 foreign key(foreign key(列名列名1,1,列名列名2 2) references ) references 表名表名( (列名列名1 1,列名列名2 2 ) )10.3 使用约束使用约束v3.foreign key3.foreign key注意注意: :(1) (1) 使用使用create tablecreate table命令建表时命令建表时, ,若随着列的定义一同定若随着列的定义一同定义外键义外键, ,则可以省略关键字则可以省略关键字foreign keyforeign key及列名及列名, ,但使用但使用alter tablealter table命令增加外部键时不行命令增加外部键时不行. .(2) (2) 定义外部键时要保证被定义为外键的属性在参照表中定义外部键时要保证被定义为外键的属性在参照表中已经被定义为主键已经被定义为主键. .10.3 使用约束使用约束v3.foreign key3.foreign key例例10-13 10-13 向数据库向数据库MagDbMagDb中数据表中数据表mag_empmag_emp的属性的属性DepIdDepId添加外键约束添加外键约束 10.3 使用约束使用约束v3.foreign key3.foreign key例例10-14 10-14 在数据库在数据库usedb2usedb2中建立数据表中建立数据表mag_empmag_emp,同时,同时定义主键和外键定义主键和外键 10.3 使用约束使用约束v4.check4.check一个列级检查约束只能与限制的字段有关;一个表级检一个列级检查约束只能与限制的字段有关;一个表级检查约束只能与限制的表中字段有关。查约束只能与限制的表中字段有关。一个表中可以定义多个检查约束。一个表中可以定义多个检查约束。每个每个CREATE TABLECREATE TABLE语句中每个字段只能定义一个检查约语句中每个字段只能定义一个检查约束。束。在多个字段上定义检查约束,则必须将检查约束定义为在多个字段上定义检查约束,则必须将检查约束定义为表级约束。表级约束。当执行当执行INSERTINSERT语句或者语句或者UPDATEUPDATE语句时,检查约束将验证语句时,检查约束将验证数据。数据。10.3 使用约束使用约束v4.check4.check(1)(1)企业管理器操作法企业管理器操作法10.3 使用约束使用约束v4.check4.check(2)Transact-SQL(2)Transact-SQL语句操作法。其语法形式如下:语句操作法。其语法形式如下:CONSTRAINT CONSTRAINT 约束名约束名 CHECK( CHECK(逻辑表达式逻辑表达式) )10.3 使用约束使用约束v4.check4.check例例10-15 10-15 将数据库将数据库MagDbMagDb中数据表中数据表mag_empmag_emp的属性的属性EmpAgeEmpAge取值范围限定在取值范围限定在1-1001-100之间(含之间(含1 1和和100100),并将此约束),并将此约束命名为命名为ck_age ck_age 10.3 使用约束使用约束v4.check4.checkv例子:创建一个学生信息表,其中输入性别字段值时,只能接受例子:创建一个学生信息表,其中输入性别字段值时,只能接受“F F”或者或者“M M”,并且为,并且为phonenumphonenum字段创建检查约束,限制只能输入类似字段创建检查约束,限制只能输入类似8079865480798654之类的数据,而不能随意输入其他数据。之类的数据,而不能随意输入其他数据。create table student( id char(8), name char(8), sex char(2), phonenum int, constraint chk_sex check (sex in (F,M), constraint chk_phonenum check(phonenum like 0-90-90-90-90-90-90-90-9)10.3 使用约束使用约束v5.default5.default用于指定某个属性的默认值。当数据表中的某一列具有大量相同数据时,用于指定某个属性的默认值。当数据表中的某一列具有大量相同数据时,为了减少数据录入的工作量,可以指定默认值,则该属性自动具有了数据。为了减少数据录入的工作量,可以指定默认值,则该属性自动具有了数据。(1)(1)企业管理器中企业管理器中10.3 使用约束使用约束v5.default5.default(2)T-SQL(2)T-SQL语句定义语句定义defaultdefault约束约束基本格式基本格式: :constraint constraint 约束名约束名 default default 常量表达式常量表达式 for for 字段名字段名10.3 使用约束使用约束v5.default5.default例例10-16 10-16 将数据库将数据库MagDbMagDb中数据表中数据表mag_empmag_emp的属性的属性EmpRoleEmpRole的默认值指定为的默认值指定为“编辑编辑” 10.3 使用约束使用约束v5.default5.defaultv使用缺省约束时,应该注意以下几点:使用缺省约束时,应该注意以下几点:每个字段只能定义一个缺省约束。每个字段只能定义一个缺省约束。如果定义的缺省值长于其对应字段的允许长度,那么输如果定义的缺省值长于其对应字段的允许长度,那么输入到表中的缺省值将被截断。入到表中的缺省值将被截断。不能加入到带有不能加入到带有IDENTITYIDENTITY属性的字段上。属性的字段上。10.3 使用约束使用约束v删除约束删除约束语句格式语句格式: :alter table alter table 表名表名 drop constraint drop constraint 约束名约束名注意注意: :定义约束的时候若省略了约束名定义约束的时候若省略了约束名, ,则要先查出系统则要先查出系统自动命名的约束名然后进行删除自动命名的约束名然后进行删除. .10.3 使用约束使用约束v删除约束删除约束例例10-17 10-17 删除数据库删除数据库usedb2usedb2中数据表中数据表mag_deptmag_dept属性属性DepManagerDepManager的的UNIQUEUNIQUE约束约束 第第10章章 数据库表数据库表10.1 创建数据库表创建数据库表10.2 修改数据库表修改数据库表10.3 使用约束使用约束10.4 建立索引建立索引10.5 删除数据库表删除数据库表10.4 建立索引建立索引v数据库中的索引与书籍中的索引类似。数据库中的索引与书籍中的索引类似。v在一本书中,利用索引可以快速查找所需信息,在一本书中,利用索引可以快速查找所需信息,无须阅读整本书。在数据库中,索引使数据库程无须阅读整本书。在数据库中,索引使数据库程序无须对整个表进行扫描,就可以在其中找到所序无须对整个表进行扫描,就可以在其中找到所需数据。需数据。v书中的索引是一个词语列表,其中注明了包含各书中的索引是一个词语列表,其中注明了包含各个词的页码。而数据库中的索引是某个表中一列个词的页码。而数据库中的索引是某个表中一列或者若干列值的集合和相应的指向表中物理标识或者若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。这些值的数据页的逻辑指针清单。10.4 建立索引建立索引v索引的索引的作用作用通过创建唯一索引,可以保证数据记录的唯一通过创建唯一索引,可以保证数据记录的唯一 性。性。可以大大加快数据检索速度。可以大大加快数据检索速度。可以加速表与表之间的连接,这一点在实现数可以加速表与表之间的连接,这一点在实现数据的参照完整性方面有特别的意义。据的参照完整性方面有特别的意义。10.4 建立索引建立索引v索引的索引的类型类型聚集索引(聚集索引(clustered) 是一种物理存储方式是一种物理存储方式 一个数据表只能建立一个聚集索引一个数据表只能建立一个聚集索引 非聚集索引(非聚集索引(nonclustered) 是一种逻辑存储方式是一种逻辑存储方式 索引的次序并不影响数据的物理存储顺序索引的次序并不影响数据的物理存储顺序 一个数据表最多可以建立一个数据表最多可以建立249个非聚集索引个非聚集索引 10.4 建立索引建立索引v创建索引的创建索引的方法方法SQL Server 2000创建索引的方法创建索引的方法(1)用企业管理器直接创建索引。)用企业管理器直接创建索引。(2)利用)利用Transact-SQL语句中的语句中的CREATE INDEX命令创建索引。命令创建索引。10.4 建立索引建立索引v用企业管理器直接创建索引。用企业管理器直接创建索引。具体步骤如下:具体步骤如下:()在企业管理器中,展开指定的服务器和数据库,选择要创()在企业管理器中,展开指定的服务器和数据库,选择要创建索引的表,用右键单击该表,从弹出的快捷菜单中选择所有任建索引的表,用右键单击该表,从弹出的快捷菜单中选择所有任务项的管理索引选项务项的管理索引选项10.4 建立索引建立索引v用企业管理器直接创建索引。用企业管理器直接创建索引。具体步骤如下:具体步骤如下:出现管理索引对话框,如图所示。在该对话框中,可以选择要处出现管理索引对话框,如图所示。在该对话框中,可以选择要处理的数据库和表理的数据库和表 管理索引对话框管理索引对话框10.4 建立索引建立索引v用企业管理器直接创建索引。用企业管理器直接创建索引。具体步骤如下:具体步骤如下:()单击()单击“新建新建”按钮,则出现新建索引对话框,如图所示。按钮,则出现新建索引对话框,如图所示。(3) (3) 选择完成后单击选择完成后单击“确定确定”按钮,即可生成新的索引;按钮,即可生成新的索引;单击单击“取消取消”按钮,按钮,则取消新建索引的操作。则取消新建索引的操作。10.4 建立索引建立索引v利用利用Transact-SQLTransact-SQL语句中的语句中的CREATE INDEXCREATE INDEX命令创建索引。命令创建索引。建立索引的建立索引的语法语法为为: :create unique clustered|nonclustered create unique clustered|nonclustered index index 索引名索引名 on on 表名表名( (列名列名1,1,列名列名2 2) )unique:unique:惟一索引惟一索引默认情况下默认情况下, ,创建的索引是非惟一的非聚集索引创建的索引是非惟一的非聚集索引. .必须先建立聚集索引必须先建立聚集索引, ,再建立非聚集索引再建立非聚集索引. .10.4 建立索引建立索引v例例10-18 10-18 对数据表对数据表mag_empmag_emp属性属性EmpAgeEmpAge建立建立非惟一的非聚集索引非惟一的非聚集索引age_index age_index 注意注意: :(1)(1)当数据表建立主键后当数据表建立主键后, ,就自动建立惟一聚集索引就自动建立惟一聚集索引(2)(2)数据表使用数据表使用uniqueunique约束后约束后, ,可自动产生一个非聚集索引可自动产生一个非聚集索引10.4 建立索引建立索引v创建索引时一般应遵循以下原则创建索引时一般应遵循以下原则 经常要查找的列经常要查找的列经常要按顺序检索的列经常要按顺序检索的列经常用于多个数据表连接的列经常用于多个数据表连接的列经常用于进行统计计算(如求极值、求和等)的列;经常用于进行统计计算(如求极值、求和等)的列;在查询条件中频繁使用的列在查询条件中频繁使用的列如果一个列中只有几个不同的数据值,或者被索引的如果一个列中只有几个不同的数据值,或者被索引的列多于列多于2020个字节时,通常不应该建立索引个字节时,通常不应该建立索引 10.4 建立索引建立索引v删除索引的删除索引的语法语法 Drop index Drop index 表名表名. .索引名索引名 v注意使用注意使用primary keyprimary key约束和约束和uniqueunique约束建立的索约束建立的索引不能删除引不能删除 例例10-19 删除索引删除索引age_index第第10章章 数据库表数据库表10.1 创建数据库表创建数据库表10.2 修改数据库表修改数据库表10.3 使用约束使用约束10.4 建立索引建立索引10.5 删除数据库表删除数据库表10.5 删除数据库表删除数据库表v删除数据表的语法删除数据表的语法 Drop table Drop table 表名表名 例例10-20 10-20 删除删除usedb2usedb2中数据表中数据表mag_dept mag_dept
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号