1、第第4 4章章 数据库管理数据库管理 u本章导读本章导读 本章主要介绍了有关数据表的操作,包括表的创建、修改、删除和建本章主要介绍了有关数据表的操作,包括表的创建、修改、删除和建立索引等操作以及表中数据维护的有关操作和方法,基本掌握使用立索引等操作以及表中数据维护的有关操作和方法,基本掌握使用 SQL SQL Server Management StudioServer Management Studio和和T-SQLT-SQL语句对表的操作和表的数据操作,包括语句对表的操作和表的数据操作,包括创建表、删除表、对表中字段建立索引、向表中增加数据、修改数据、删创建表、删除表、对表中字段建立索引、
2、向表中增加数据、修改数据、删除数据等。读者要对除数据等。读者要对SQL Server2019SQL Server2019中的数据类型有一个清楚的认识。中的数据类型有一个清楚的认识。4.1数据库的创建与管理数据库的创建与管理4.1.1 SQL Server系统数据库系统数据库1 1系统数据库系统数据库1 1)MasterMaster数据库数据库2 2)ModelModel数据库数据库3 3)MsdbMsdb数据库数据库4 4)TempdbTempdb数据库数据库2 2数据库快照数据库快照数据库快照是源数据库的只读、静态视图。数据库快照是源数据库的只读、静态视图。4.1数据库的创建与管理数据库的创
3、建与管理4.1.2 数据库的创建数据库的创建1准备创建数据库准备创建数据库1)确定确定数据库的名称、所有者(创建数据库的用户)数据库的名称、所有者(创建数据库的用户)数据库名称数据库名称:studentcoursestudentcourse2 2)确定存储该数据库的数据文件的大小及文件空间增长方式,确定关系、)确定存储该数据库的数据文件的大小及文件空间增长方式,确定关系、索引,及系统存储参数的配置,确定数据库的存取方法索引,及系统存储参数的配置,确定数据库的存取方法.主数据文件主数据文件:逻辑名称:逻辑名称studentcoursestudentcourse;物理文件名:物理文件名:C:Dat
4、astudentcourse.mdfC:Datastudentcourse.mdf,初始大小:,初始大小:8MB8MB,最大空间:,最大空间:UNLIMITEDUNLIMITED,空间增加量:,空间增加量:1MB1MB,属于文件组,属于文件组primaryprimary。次数据文件次数据文件:逻辑名称:逻辑名称secondscsecondsc;物理文件名:;物理文件名:C:mydbsecondsc.ndfC:mydbsecondsc.ndf,初,初始大小:始大小:5MB5MB,最大空间:,最大空间:50MB50MB,空间增加量:,空间增加量:1MB1MB,属于文件组,属于文件组group1gr
5、oup1。日志文件日志文件:逻辑名称:逻辑名称studentcourse_logstudentcourse_log;物理文件名:物理文件名:C:Logstudentcourse_log.ldfC:Logstudentcourse_log.ldf,始初大小:,始初大小:4MB4MB,最大空间,最大空间:20MB20MB,空间增加量:,空间增加量:10%10%索引索引:每一数据表关于主关键字建立索引文件。:每一数据表关于主关键字建立索引文件。2使用使用SQL Server Management Studio创建数据库创建数据库3.1 关系数据库设计思路关系数据库设计思路图4.1 【创建数据库】界面
6、图4.2 【新建数据库】对话框3使用使用Transact-SQL语言创建数据库语言创建数据库1)命令格式)命令格式CREATE DATABASE ONPRIMARY,N,N LOG ON ,N 其中,其中,N 表示设置文件属性,格式如下。表示设置文件属性,格式如下。(NAME=逻辑文件名,逻辑文件名,FILENAME=物理文件名称物理文件名称 ,SIZE=数据库文件的初始容量值数据库文件的初始容量值 ,MAXSIZE=物理文件的最大容量值物理文件的最大容量值|UNLIMITED ,FILEGROWTH=增加容量值增加容量值),N 其中其中,N 表示设置文件组属性,格式如下。表示设置文件组属性,
7、格式如下。FILEGROUP文件组名称文件组名称 DEFAULT,N 2 2)参数说明)参数说明(1)放在“”中的“”表示整个“”括起来的选项都可省略,如果不省,则“”括起的选项不能省。使用“”分隔的多个选项,表示只能选择其中一个。(2)数据库的名称必须符合标识符规则,最长为128个字符。数据库名称在 SQL Server 的实例中必须唯一。数据库的逻辑文件名是数据库在SQL Server中的标识符。FILENAME指定数据库物理文件名称和路径,它和数据库逻辑名称一一对应。文件组的逻辑名称必须在数据库中唯一,不能是系统提供的名称 PRIMARY 和 PRIMARY_LOG。(3)“ON”定义数
8、据文件;“PRIMARY”定义主文件组中的文件;“LOG ON”定义日志文件。一个数据库只能有一个主文件,如果没有定义主文件,列在数据文件项的第一个文件就是主文件。(4)数据库文件容量单位可以是KB,MB,GB,TB,缺省值为MB,长度必须为整数,主文件的,最小容量是Model数据库的主文件长度;对于其他类型文件,最小长度为512KB。(5)MAXSIZE:指定物理文件的最大容量。如果不设置文件的最大尺寸,那么文件的增长最大值将是磁盘的所有空间。UNLIMITED选项允许文件增长到磁盘已满。(6)FILEGROWTH:指定文件每次增加容量的大小或百分比,当FILEGROWTH=0时,表示文件不
9、增长。(7)DEFAULT:指定命名文件组为数据库中的默认文件组。3使用使用Transact-SQL语言创建数据库语言创建数据库CREATE DATABASE studentcourse -逻辑数据名称:逻辑数据名称:studentcourse ON PRIMARY -ON 子句指出文件属于子句指出文件属于PRIMARY组组 (NAME=studentcourse,-NAME指出了对应的逻辑文件名指出了对应的逻辑文件名 FILENAME=C:DATAstudentcourse.mdf,-FILENAME指出物理文件名指出物理文件名 SIZE=8MB,-Size指出了初始分配空间指出了初始分配空
10、间 MAXSIZE=UNLIMITED,-MAXSIZE指出了最大空间指出了最大空间 FILEGROWTH=1024KB),-FILEGROWTH指出了文件空间的增长量指出了文件空间的增长量 FILEGROUP group1 -FILEGROUP子句指出次数据文件子句指出次数据文件.NDF (NAME=N secondsc,FILENAME=NC:mydb secondsc.ndf ,SIZE=5120KB,MAXSIZE=51200KB,FILEGROWTH=1024KB)LOG ON -LOG ON 子句指出新建数据库的日志文件子句指出新建数据库的日志文件.LDF (NAME=Nstude
11、ntcourse_log,FILENAME=C:LOGstudentcourse_log.ldf ,SIZE=4096KB,MAXSIZE=20480KB,FILEGROWTH=10%)3)创建学生选课数据库)创建学生选课数据库4.1.3 管理数据库管理数据库1查看数据库信息查看数据库信息1 1)命令格式)命令格式EXEC sp_helpdb 数据库名2 2)功能)功能查看指定数据库的相关数据文件信息、数据库拥有者、创建时间等信息。若缺省数据库名,则显示所有数据库信息。【例例4.14.1】查看学生选课查看学生选课“studentcoursestudentcourse”数据库的信息。数据库的信息
12、。方法一:使用SQL Server Management Studio查看数据库信息方法二:使用系统存储过程命令查看数据库信息。EXEC sp_helpdb studentcourse【例例4.24.2】查看所有数据库信息。查看所有数据库信息。EXEC sp_helpdb4.1.3 管理数据库管理数据库2打开数据库打开数据库1 1)命令格式)命令格式USE 2 2)功能)功能使指定数据库成为当前数据库【例例4.34.3】打开学生选课打开学生选课“studentcoursestudentcourse”数据库。数据库。方法一:使用SQL Server Management Studio打开数据库方
13、法二:使用命令。USE studentcourse3修改数据库修改数据库1 1)命令格式)命令格式Alter Database 数据库名AddFile,N To Filegroup 文件组名称|Add Log File,N|Remove File 逻辑文件名称 With Delete|Modify File|Modify Name=新数据库名称|Add Filegroup新增文件组名称|Remove Filegroup 文件组名称|Modify Filegroup 原文件组名称文件组属性|Name=新文件组名称2 2)功能)功能Add File:向数据库添加文件。Add Logfile:向数据
14、库添加日志文件。Remove File:从数据库中删除文件。Modify File:对文件进行修改,包括SIZE、FILEGROWTH和MAXSIZE,每次只能对一个属性进行修改。Modify Name:重新命名数据库。Add|Remove|Modify Filegroup:向数据库中添加删除修改文件组【例例4.44.4】向数据库向数据库StudentcourseStudentcourse中添加一个名为中添加一个名为group2group2的的文件组,并在该文件组中添加一个名为文件组,并在该文件组中添加一个名为Studentcourse2Studentcourse2、路径、路径为默认的次数据文
15、件,初始值大小为为默认的次数据文件,初始值大小为 5MB 5MB,最大值为,最大值为50MB50MB,文,文件以件以1MB1MB增长;再添加一个名为增长;再添加一个名为Studentcourse_Log2Studentcourse_Log2的日志文件的日志文件,初始值大小为,初始值大小为8MB 8MB,最大值为,最大值为100MB100MB,文件以,文件以10%10%增长增长 。然后。然后对数据库中对数据库中Studentcourse2Studentcourse2文件重命名为文件重命名为Studentcourse_2Studentcourse_2,最,最后把该文件从数据库中移除。后把该文件从数
16、据库中移除。方法一:使用SQL Server Management Studio方法二:使用SQL语言修改数据库。命令如下所示:alter DATABASE studentcourse add filegroup group2 -新增group2文件组GO3修改数据库修改数据库4.1.3 管理数据库管理数据库4.1.3 管理数据库管理数据库alter DATABASE studentcourse add file(NAME=studentcourse2,-在文件组在文件组group2中中新增studentcourse2次数据文件FILENAME=C:Program FilesMicrosoft
17、 SQL ServerMSSQL.1MSSQLDATA studentcourse2.ndf,SIZE=5MB,MAXSIZE=50MB,FILEGROWTH=1MB)to filegroup group2Goalter DATABASE studentcourse modify file -修改studentcourse主数据文件的文件增长为2MB (NAME=studentcourse,FILEGROWTH=2MB)Goalter DATABASE studentcourseadd LOG file -新增studentcourse_log2日志文件(NAME=Nstudentcourse
18、_log2,FILENAME=C:Program FilesMicrosoft SQL ServerMSSQL.1MSSQL DATA studentcourse_log2.ldf,SIZE=8MB,MAXSIZE=100MB,FILEGROWTH=10%)Goalter DATABASE studentcoursemodify file(name=studentcourse2,newname=studentcourse_2)-对数据库中studentcourse2次数据文件重命名成studentcourse_2Goalter DATABASE studentcourseremove file
19、 studentcourse_2 -从数据库中移除studentcourse_2次要数据文件4.删除数据库删除数据库1)命令格式命令格式DROP DATABASE,N2)功能功能删除指定数据库。删除指定数据库。【例【例4.5】删除学生选课数据库删除学生选课数据库studentcourse。方法一:使用方法一:使用SQLServerManagementStudio删除数据库。删除数据库。方法二:使用方法二:使用SQL命令删除数据库。命令删除数据库。DROP DATABASE studentcourse1 1)命令格式)命令格式DBCC SHRINKDATABASE(数据库名,Target_Per
20、cent)Notruncate|Truncateonly2 2)功能)功能压缩指定数据库。【例例4.64.6】压缩学生选课压缩学生选课studentcoursestudentcourse数据库,使其最数据库,使其最大可用空间为大可用空间为30%30%。方法一:使用SQL Server Management Studio压缩数据库方法二:使用SQL命令压缩数据库DBCC SHRINKDATABASE(Studentcourse,30)4.1.3 管理数据库管理数据库5压缩数据库压缩数据库4.1.3 管理数据库管理数据库【例例4.74.7】压缩学生选课数据库压缩学生选课数据库studentcour
21、sestudentcourse中的一个中的一个secondscsecondsc次数据文件,将其压缩为次数据文件,将其压缩为2MB2MB。方法一:使用SQL Server Management Studio方法二:使用SQL命令。DBCC SHRINKFILE(secondsc,2)5压缩数据库压缩数据库4.2.1 数据系统视图数据系统视图1 1Sysobjects Sysobjects 系统视图系统视图2 2SyscolumnsSyscolumns系统视图系统视图3 3SysindexesSysindexes系统视图系统视图4 4SysusersSysusers系统视图系统视图5 5Sysda
22、tabasesSysdatabases系统视图系统视图6 6SysdependsSysdepends系统视图系统视图7 7SysconstraintsSysconstraints系统视图系统视图4.2 数据表的创建数据表的创建SQLServer2019将系统数据存储在隐藏将系统数据存储在隐藏“资源资源”表中。只有通过具有权限的管理员连接,方可调用表中。只有通过具有权限的管理员连接,方可调用和查看。低级用户必须使用系统视图,从隐藏表和和查看。低级用户必须使用系统视图,从隐藏表和隐藏函数中获得系统信息。隐藏函数中获得系统信息。4.2.1 数据系统视图数据系统视图4.2 数据表的创建数据表的创建【例
23、【例4.8】使用系统视图使用系统视图sysdatabases显示所有已经显示所有已经安装的数据库名称。安装的数据库名称。操作步骤如下。操作步骤如下。在在SQLServerManagementStudio主窗口中,单击主窗口中,单击“新建查询新建查询”按钮,在新建查询命令窗口输入如下命按钮,在新建查询命令窗口输入如下命令。令。use MASTERSELECT name,filename FROM sysdatabases4.2.1 数据系统视图数据系统视图4.2 数据表的创建数据表的创建【例例 4.9】使 用 系 统 视 图使 用 系 统 视 图 s y s o b j e c t s 显 示显
24、 示studentcourse数据库中由用户定义的对象。数据库中由用户定义的对象。操作步骤如下。操作步骤如下。在在SQLServerManagementStudio主窗口中,单击主窗口中,单击“新建查询新建查询”按钮,在新建查询命令窗口输入如下按钮,在新建查询命令窗口输入如下命令。命令。use studentcourseSELECT name,type FROM sysobjects WHERE type=u数据类型及其确定原则数据类型及其确定原则SQL Server SQL Server 的九大类数据类型的九大类数据类型1)整型数据类型(Integer)2)精确数字数据类型(Exact Nu
25、meric)3)近似数字数据类型(Approximate Numeric)4)货币数据类型(Monetary)5)日期和时间数据类型(Date Time)6)字符数据类型(Character)7)二进制数据类型8)专用数据类型9)自定义数据类型(UDT)EXEC4.2.2 数据类型数据类型4.2.2 数据类型数据类型数据类型存储字节数取值范围使用说明Bigint8-263263-1即-9,223,372,036,854,775,8089,223,372,036,854,775,807存储非常大的正负整数Int4-231231-1即-2,147,483,6482,147,483,647存储正负整
26、数Smallint2-215215-1即-32,76832,767存储正负整数Tinyint1027-1即0255存储小范围的正整数表表4.2 整型数据类型整型数据类型4.2.2 数据类型数据类型数据类型存储字节数取值范围使用说明Decimal(P,S)依据不同的精度,需要517字节-1038+11038-1P的默认值为18,最大可以存储38位十进制数;S的默认值是0,只能取0P之间的值。例如,3.14的数据类型指定为Decimal(3,2)Numeric(P,S)依据不同的精度,需要517字节-1038+11038-1功能上等价于Decimal,并可以与Decimal交换使用表表4.3 精确
27、数字数据类型精确数字数据类型4.2.2 数据类型数据类型数据类型存储字节数取值范围使用说明F l o a t 或Float(N)4或8-1.79E+308-2.23E-308、0、2.23E-3081.79E+308存储大型浮点数,超过十进制数据类型的容量,默认精确到第15位数(当N取124时相当于REAL类型,4个字节存储;取2453则8个字节)Real4-3.4E+38-1.18E-38、0、1.18E-383.4E+38仍然有效,但为了满足SQL-92标准,已经被Float替换了,精确到第7位数表表4.4 近似数字数据类型近似数字数据类型4.2.2 数据类型数据类型表表4.5 货币数据类
28、型货币数据类型(Monetary)数据类型存储字节数取值范围使用说明Money8字节-263 263-1即-922 337 203 685 477.5808922 337 203 685 477.5807存储大型货币值,精确到小数点后4位,精确至万分之一Smallmoney4字节-231 231-1即-214 748.3648214 748.3647存储小型货币值,精确到小数点后4位4.2.2 数据类型数据类型表表4.6 日期和时间数据类型日期和时间数据类型数据类型存储字节数取值范围使用说明Datetime8从1753年1月1日到9999年12月31日,精确度为3.33毫秒存储大型日期和时间值
29、Smalldatetime4从1900年1月1日到2079年6月6日,精确度为1分钟存储较小范围的日期和时间值4.2.2 数据类型数据类型表表4.7 字符数据类型字符数据类型数据类型存储字节数取值范围使用说明Char(N)N字节18000固定宽度的ANSI数据类型Varchar(N)输入的字符个数为实际长度(0N字节)18000可变宽度的ANSI数据类型Varchar(Max)最大长度为2GB,输入的字符个数为实际长度(0N字节)1231-1,即12G,即1214 748 3647可变宽度的ANSI数据类型Text最大长度为2 GB个字节1231-1,即12G,即1214 748 3647固
30、定 宽 度 的 A N S I 数 据 类 型,已 由VARCHAR(MAX)取代4.2.2 数据类型数据类型表表4.8 二进制数据类型二进制数据类型数据类型存储字节数取值范围使用说明Binary(N)占N字节空间,N可以取从1到8000的值。-263 263-1存储固定大小的二进制数据,在输入数据时必须在数据前加上字符“0X”作为二进制标识Varbinary(N)占实际长度+2字节,N可以取从1到8000的值。-263 263-1存储可变大小的二进制数据,若不指定N的值,则默认为1Image最大长度231-10231-102 GB存储可变大小的二进制数据,在输入数据时必须在数据前加上字符“0
31、X”作为二进制标识4.2.2 数据类型数据类型表表4.9 特殊数据类型特殊数据类型数据类型存储字节数取值范围使用说明Bit10,1,Null存储0、1或Null。用于基本“标记”值。TRUE被转换为1,而FALSE被转换为0,输入0和1之外的任何值,系统都会作为1来处理Timestamp8二进制的字符串可自动生成二进制数字的数据类型,并在插入或修改行时被设置到数据库时间戳,每当行中的某个日期发生变化时,该行上的TIMESTAMP型列中的值就自动更新。适合用来检测在一个用户处理数据期间另一个用户是否已修改了该数据Sql_Variant08016 通配符数据类型,它会自动地将自己“转换为”写到它里
32、面的数据的类型。最多存储8000个字节,能保存除VARCHAR(MAX),NVARCHAR(MAX),TEXT,NTEXT,IMAGE,TIMESTAMP和SQL_VARIANT以外的任何其他合法的SQL数据类型4.2.2 数据类型数据类型自定义数据类型自定义数据类型T-SQL的自定义数据类型的自定义数据类型是是基于基于SQLServer2019中的系统数据类型,可用作一种别名机制。中的系统数据类型,可用作一种别名机制。(1)命令格式命令格式EXEC SP_ADDTYPE 新数据类型名称新数据类型名称,系统原有数据类型系统原有数据类型名称名称,NULL|NOT NULL(2)功能功能是指定系统
33、原有的数据类型为新数据类型。如果是指定系统原有的数据类型为新数据类型。如果指定指定“NULL”选项,则表示新定义的数据类型允许选项,则表示新定义的数据类型允许输入空值。如果未明确定义为空性,系统将基于数据输入空值。如果未明确定义为空性,系统将基于数据库或连接的库或连接的ANSINULL默认设置进行指定。默认设置进行指定。【例【例4.104.10】建一个以建一个以DatetimeDatetime为基础的出生日期(为基础的出生日期(BirthdayBirthday)可)可为空的数据类型。为空的数据类型。方法一:使用SQL Server Management Studio方法二:使用SQL命令。EX
34、EC SP_ADDTYPE Birthday,Datetime,Null4.2.2 数据类型数据类型4.2.3 创建数据表结构创建数据表结构1 1熟悉熟悉CREATE TABLECREATE TABLE语句的格式语句的格式1)CREATE TABLE语句的简化格式CREATE TABLE 服务器名.数据库名.架构名.|数据库名.架构名.|架构名.数据库表名(列名,数据类型 NOT NULL identity(初值,步长)DEFAULT 默认值 UNIQUE PRIMARY KEY CLUSTERED|NONCLUSTERED ,列名,数据类型 NOT NULL DEFAULT 默认值UNIQU
35、E,n,列名 AS 计算列值的表达式,n,CONSTRAINT 主键约束名 PRIMARY KEY(属性名),CONSTRAINT 检查约束名 CHECK(逻辑表达式),n,FOREIGN KEY(外键属性)REFERENCES 参照表(参照属性),n)ON 文件组|默认文件组 2)CREATE TABLE语句的说明语句的说明【例例4.114.11】创建数据库创建数据库“book_shopbook_shop”的数据表的数据表bookbook,数据表,数据表由书号、书名、出版社、出版日期、单价、数量、总价(单价由书号、书名、出版社、出版日期、单价、数量、总价(单价*数量)、电子邮件地址和数据库表
36、使用者字段组成。其中书号数量)、电子邮件地址和数据库表使用者字段组成。其中书号列定义为主键并且为系统自动编号即标识列,种子值(起始值列定义为主键并且为系统自动编号即标识列,种子值(起始值)为)为10001000,增量为,增量为1 1,要求出版社字段的值只能是高教、浙大、,要求出版社字段的值只能是高教、浙大、电子和中央四个之一,电子邮件地址字段中必须包含电子和中央四个之一,电子邮件地址字段中必须包含 符号,单符号,单价必须大于价必须大于0 0,数量必须大于等于,数量必须大于等于0 0,出版日期的默认值设置为,出版日期的默认值设置为当前日期函数。当前日期函数。(1 1)标识)标识IDENTITY
37、IDENTITY 属性属性(2 2)计算所得的列)计算所得的列(3 3)空值)空值NULLNULL约束约束(4 4)PRIMARY KEY PRIMARY KEY 约束约束(5 5)UNIQUE UNIQUE 约束约束(6 6)DEFAULTDEFAULT约束约束 (7 7)CHECK CHECK 约束约束(8 8)FOREIGN KEY FOREIGN KEY 约束约束2)CREATE TABLE语句的说明语句的说明(1 1)标识)标识IDENTITY IDENTITY 属性属性定义列时,还可以为一个表中的其中一列指定一定义列时,还可以为一个表中的其中一列指定一个特殊的自动增长标识属性。每一
38、个表只能有一个个特殊的自动增长标识属性。每一个表只能有一个“标识标识”属性,标识属性有两个参数:标识初始值和增属性,标识属性有两个参数:标识初始值和增量。量。例如:设置例如:设置book表中属性表中属性“书号书号”为标识列。为标识列。CREATE TABLE book (书号书号 int identity(1000,1)NOT FOR REPLICATION,)2)CREATE TABLE语句的说明语句的说明(2 2)计算所得的列)计算所得的列我们还可以创建一种称为计算所得的列的特殊我们还可以创建一种称为计算所得的列的特殊列,它包含一个涉及表中一个或多个其他列的计算列,它包含一个涉及表中一个或
39、多个其他列的计算公式。公式。例如:设置例如:设置book表中属性表中属性“总价总价”为计算所得为计算所得的列。的列。CREATE TABLE book (总价总价 as 单价单价*数量数量,数据库表使用者数据库表使用者 AS USER_NAME(),)2)CREATE TABLE语句的说明语句的说明(3 3)空值)空值NULLNULL约束约束空值空值NULL约束决定属性值是否允许为空值约束决定属性值是否允许为空值(NULL)。NULL表示没有输入任何内容,它不是零表示没有输入任何内容,它不是零或空白。或空白。timestamp数据类型只能定义为数据类型只能定义为NOTNULL。例如:设置例如:
40、设置book表中属性表中属性“书名书名”不允许为空值。不允许为空值。CREATE TABLE book (书名书名 char(20)NOT NULL,)2)CREATE TABLE语句的说明语句的说明(4 4)PRIMARY KEY PRIMARY KEY 约束约束设置为设置为PRIMARY约束约束的的属性集就是表的主键。属性集就是表的主键。由由PRIMARYKEY约束生成的索引不能使表中的非约束生成的索引不能使表中的非聚集索引超过聚集索引超过249个,聚集索引超过个,聚集索引超过1个。个。例如:建立例如:建立book表中属性表中属性“书号书号”为主键的聚为主键的聚集索引。集索引。CREATE
41、 TABLE book (书号书号 int CONSTRAINTPK_sno PRIMARY KEY CLUSTERED,)2)CREATE TABLE语句的说明语句的说明(4 4)PRIMARY KEY PRIMARY KEY 约束约束或者或者CREATE TABLE book (书号书号 int,CONSTRAINT PK_sno PRIMARY KEY CLUSTERED(书号书号)2)CREATE TABLE语句的说明语句的说明(5 5)UNIQUE UNIQUE 约束约束UNIQUE约束相应属性列的取值必须唯一,约束相应属性列的取值必须唯一,允许存在空值。如果允许存在空值。如果UNI
42、QUE约束中没有指定约束中没有指定CLUSTERED或或NONCLUSTERED,则默认为,则默认为NONCLUSTERED。每个。每个UNIQUE约束都生成约束都生成一个索引。一个索引。例如:对例如:对book表中的属性表中的属性“书名书名”建立唯一性建立唯一性约束。约束。CREATE TABLE book(书名书名 char(20)UNIQUE,)2)CREATE TABLE语句的说明语句的说明(5 5)UNIQUE UNIQUE 约束约束也可以在定义也可以在定义UNIQUE约束时,提供约束名称。约束时,提供约束名称。CREATE TABLE book(书名书名 char(20),CONS
43、TRAINT U_sn UNIQUE(书名书名)2)CREATE TABLE语句的说明语句的说明(6 6)DEFAULTDEFAULT约束约束 每个属性只能有一个默认值。可以包含常量值、每个属性只能有一个默认值。可以包含常量值、函数或函数或NULL,但不能引用表中的其他列。数据类型,但不能引用表中的其他列。数据类型为为timestamp或具有或具有IDENTITY属性的列上不能定属性的列上不能定义默认值。使用义默认值。使用INSERT和和UPDATE语句时,自动语句时,自动提供默认值。提供默认值。例如:设置例如:设置“出版日期出版日期”的默认值为当前日期。的默认值为当前日期。CREATE TA
44、BLE book(出版日期出版日期datetime DEFAULT(getdate()2)CREATE TABLE语句的说明语句的说明(7 7)CHECK CHECK 约束约束每个属性列可以有多个每个属性列可以有多个CHECK约束,约束条件约束,约束条件是逻辑表达式,不能引用其他表。当执行是逻辑表达式,不能引用其他表。当执行INSERT和和DELETE语句时,将检查数据是否满足约束。语句时,将检查数据是否满足约束。例如:约束属性例如:约束属性“出版社出版社”只能取值为高教、浙大只能取值为高教、浙大、电子、中央四个之一,电子邮件地址字段中必须包、电子、中央四个之一,电子邮件地址字段中必须包含含符
45、号,单价必须大于符号,单价必须大于0,数量必须大于等于,数量必须大于等于0。CREATE TABLE book(出版社出版社 char(20),单价单价 smallint check(单价单价0),数量数量 smallint check(数量数量=0),电子邮件地址电子邮件地址 varchar(25)check(电子邮件地址电子邮件地址 like%),check(出版社出版社 in(高教高教,浙大浙大,电子电子,中央中央)2)CREATE TABLE语句的说明语句的说明(8 8)FOREIGN KEY FOREIGN KEY 约束约束FOREIGNKEY(外键外键)约束可以确保一个特定约束可以
46、确保一个特定的列的列(外键外键)中可以输入的值存在于一个指定的表的中可以输入的值存在于一个指定的表的指定列指定列(被参照列被参照列)中中。例如:学生选课数据表例如:学生选课数据表SC(如表如表3.5所示所示)中的属性中的属性“课程号课程号”参照课程数据表参照课程数据表C(如表如表3.4所示所示)中的属中的属性性“课程号课程号”的值,则的值,则SC为外键表,为外键表,“SC.课程号课程号”为外键,为外键,C表为主键表,表为主键表,“C.课程号课程号”是主键。是主键。命令如下:命令如下:CREATE TABLE SC(课程号课程号 char(3),FOREIGN KEY(课程号课程号)REFERE
47、NCES C(课程号课程号)方法一:使用方法一:使用SQL Server Management StudioSQL Server Management Studio方法二:使用命令。方法二:使用命令。CREATE database bookshopgoCREATE TABLE book (书号书号 int identity(1000,1)NOT FOR REPLICATION PRIMARY KEY CLUSTERED,书名书名 char(20)not null,出版社出版社 char(20),出版日期出版日期 datetime DEFAULT(getdate(),单价单价 smallint
48、check(单价单价0),数量数量 smallint check(数量数量=0),总价总价 as 单价单价*数量数量,电子邮件地址电子邮件地址 varchar(25),数据库表使用者数据库表使用者 AS USER_NAME(),check(电子邮件地址电子邮件地址 like%),check(出版社出版社 in(高教高教,浙大浙大,电子电子,中央中央)2)CREATE TABLE语句的说明语句的说明【例例4.124.12】创建数据库学生选课创建数据库学生选课“studentcoursestudentcourse”的数据表的数据表S S、C C、SCSC,数据表结构如表,数据表结构如表3.63.6
49、,表,表3.73.7,表,表3.83.8所示所示,各表的完,各表的完整性约束如表整性约束如表3.9,表,表3.10,表,表3.11所示。所示。方法一:使用SQL Server Management Studio创建数据表方法二:使用SQL命令。1)创建课程表C的语句如下:CREATE TABLE C(课程号课程号 Char(3)NOT NULL,课程名课程名 Varchar(20)NOT NULL,学分学分 Smallint NULL,预选课程号预选课程号 Char(3)NULL,教师教师 Char(8)NULL,CONSTRAINT FK_Pcno FOREIGN KEY(预选课程号预选课程
50、号)REFERENCES C(课程号课程号),CONSTRAINT CK_Cno CHECK(课程号课程号 Like A-C0-90-9),CONSTRAINT PK_C PRIMARY KEY CLUSTERED(课程号课程号 ASC)ON PRIMARY2)CREATE TABLE语句的说明语句的说明【例例4.124.12】创建数据库学生选课创建数据库学生选课“studentcoursestudentcourse”的数据表的数据表S S、C C、SCSC,数据表结构如表,数据表结构如表3.63.6,表,表3.73.7,表,表3.83.8所示所示方法二:使用方法二:使用SQLSQL命令。命令
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。