




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 SQL Server2022-7-31第第3章章 表的创建表的创建(参见第五版教材(参见第五版教材P82) SQL Server22022-7-3学习要点数据类型数据类型 1表结构的创建、修改和删除表结构的创建、修改和删除 2向表中插入、修改和删除数据向表中插入、修改和删除数据 3约束约束 4实现数据完整性实现数据完整性 5 SQL Server32022-7-33.1 表的概念 数据库中包含一个或多个表。表是数据的集合,是用来数据库中包含一个或多个表。表是数据的集合,是用来存储数据和操作数据的逻辑结构。存储数据和操作数据的逻辑结构。 数据在表中是按照行和列的格式来组织排列的,每一行数据在表
2、中是按照行和列的格式来组织排列的,每一行代表一条唯一的记录,每一列代表记录的一个属性。代表一条唯一的记录,每一列代表记录的一个属性。 例如,一个包含销售员基本信息的数据表,表中每一行例如,一个包含销售员基本信息的数据表,表中每一行代表一名销售员,每一列分别代表该销售员的信息,如编号、代表一名销售员,每一列分别代表该销售员的信息,如编号、姓名、性别等。姓名、性别等。 SQL Server42022-7-33.2 数据类型 在在SQL Server的数据表中,列的类型既可以是的数据表中,列的类型既可以是系统提供系统提供的数据类型的数据类型,也可以是,也可以是用户自定义的数据类型用户自定义的数据类型
3、。 系统数据类型系统数据类型1二进制数据类型二进制数据类型 2整数数据类型整数数据类型3浮点数据类型浮点数据类型 4精确小数数据类型精确小数数据类型5货币数据类型货币数据类型 6日期日期/时间数据类型时间数据类型7字符数据类型字符数据类型 8unicode数据类型数据类型9特殊数据类型特殊数据类型 SQL Server52022-7-31二进制数据类型二进制数据类型binaryn:固定长度为:固定长度为n个字节的二进制数。个字节的二进制数。 varbinaryn: n个字节可变长的二进制数。个字节可变长的二进制数。 image:可变长的二进制数,用于存储超过:可变长的二进制数,用于存储超过8K
4、B的数据。如:的数据。如:word文档、文档、excel图表以图表以及图像等数据。最大长度及图像等数据。最大长度231-1个字符个字符 SQL Server62022-7-32整数数据类型整数数据类型bit:数据的值只能是:数据的值只能是0或或1。 int:存储空间占存储空间占4个字节。个字节。 bigint:存储空间占存储空间占8个字节。个字节。smallint:存储空间占存储空间占2个字节。个字节。tinyint:存储空间占存储空间占1个字节。个字节。 SQL Server72022-7-33浮点数据类型浮点数据类型浮点数据类型用于存储范围较大的实数。容易浮点数据类型用于存储范围较大的实数
5、。容易发生舍入误差,货币运算一般不用它。发生舍入误差,货币运算一般不用它。float:存储空间占:存储空间占8个字节。个字节。 real:存储空间占存储空间占4个字节。个字节。 SQL Server82022-7-34精确小数数据类型精确小数数据类型decimal(p,s):取值范围取值范围-1038+11038-1。可以指定总位。可以指定总位数数p和小数位数和小数位数s。numeric(p,s):表示范围最多可达:表示范围最多可达38位。可以指定总位位。可以指定总位数数p和小数位数和小数位数s。例例: decimal(6,2)表示最多可存放表示最多可存放6位数字,小数点后有位数字,小数点后有
6、2位。位。区别:区别:numeric类型的可以带类型的可以带IDENTITY关键字。关键字。 SQL Server92022-7-35货币数据类型货币数据类型money:占占8个字节。精度为个字节。精度为19,小数,小数4位。位。smallmoney:占占4个字节。精度为个字节。精度为10,小数,小数4位。位。 SQL Server102022-7-36日期日期/时间数据类型时间数据类型Datetime:用于存储日期和时间。占用于存储日期和时间。占8个字节。个字节。Smalldatetime:日期时间范围较小。占日期时间范围较小。占4字节。字节。 SQL Server112022-7-37字符
7、数据类型字符数据类型char(n) :存放固定长度的字符,每个字符占存放固定长度的字符,每个字符占一个字节,一个字节,n值不能超过值不能超过8000。varchar(n) :存放可变长度的字符,存放可变长度的字符,n值不能超值不能超过过8000。text:存放数量庞大的变长字符,最大长度可存放数量庞大的变长字符,最大长度可达达231-1个字符。个字符。 SQL Server122022-7-38unicode数据类型数据类型nchar(n):存放固定长度的存放固定长度的Unicode字符,字符,n值值不能超过不能超过4000。 nvarchar(n) :存放可变长度的存放可变长度的Unicod
8、e字符,字符,n值不能超过值不能超过4000。ntext:存放可多达存放可多达230-1个可变长个可变长Unicode字符。字符。 SQL Server132022-7-39特殊数据类型特殊数据类型timestamp:时间戳,是由数据库自动生成的时间戳,是由数据库自动生成的不重复的二进制数字。不重复的二进制数字。 uniqueidentifier:全局唯一标识符。在表的多全局唯一标识符。在表的多个副本中唯一地标识行个副本中唯一地标识行table:只能用于定义局部变量或函数返回值。只能用于定义局部变量或函数返回值。xml:存储:存储xml数据。数据。 SQL Server142022-7-33.
9、2 数据类型 用户自定义数据类型用户自定义数据类型 用户自定义数据类型是基于用户自定义数据类型是基于SQL Server系统提供的数系统提供的数据类型。当多个表的列中要存储相同类型的数据,且据类型。当多个表的列中要存储相同类型的数据,且想确保这些列具有完全相同的数据类型、长度和是否想确保这些列具有完全相同的数据类型、长度和是否为空属性时,可以使用用户自定义数据类型。为空属性时,可以使用用户自定义数据类型。 创建用户自定义数据类型时必须提供名称、新数据类创建用户自定义数据类型时必须提供名称、新数据类型所依据的系统数据类型、数据类型是否允许空值。型所依据的系统数据类型、数据类型是否允许空值。 使用
10、使用SQL Server Management Studio SQL Server152022-7-33.2 数据类型例例3.1 为数据库为数据库“sales”定义一个基于定义一个基于varchar型的数据类型型的数据类型“telephone_code”(长度为(长度为15,允许为空值),用于说明表,允许为空值),用于说明表中电话号码列的数据类型。操作步骤如下:中电话号码列的数据类型。操作步骤如下: 1)启动)启动SQL Server Management Studio,在,在“对象资源对象资源管理器管理器”中,依次展开中,依次展开“数据库数据库”节点、节点、“sales数据库数据库”节节点、
11、点、“可编程性可编程性”节点。节点。 2)右键单击)右键单击“类型类型”,从弹出的快捷菜单中选择,从弹出的快捷菜单中选择“新建新建”菜单下的菜单下的“用户定义数据类型用户定义数据类型”命令。命令。 在在“名称名称”文本框中输入类型名称文本框中输入类型名称“telephone_code”;在在“数据类型数据类型”下拉列表框中选择下拉列表框中选择“varchar”数据类型;在数据类型;在“长度长度”数值框中输入数值框中输入“15”;选中;选中“允许空值允许空值”复选框。复选框。 SQL Server162022-7-33.2 数据类型 使用使用Transact-SQL语句创建用户自定义数据类型语句
12、创建用户自定义数据类型使用使用CREATE TYPE创建用户自定义数据类型,格式为:创建用户自定义数据类型,格式为:CREATE TYPE type_nameFROM system_type NULL | NOT NULL 其中:其中:type_name:是用户自定义数据类型的名字。:是用户自定义数据类型的名字。system_type:是用户自定义数据类型所基于的系:是用户自定义数据类型所基于的系统数据类型名,如统数据类型名,如varchar、int等。等。NULL | NOT NULL:是否可以为空值。如果缺:是否可以为空值。如果缺省该项,则默认为省该项,则默认为NULL。例3.2 为sal
13、es数据库创建一个用户自定义数据类型zip,定长字符型,长度为15,不允许为空。CREATE TYPE zipFROM char(15) NOT NULL SQL Server172022-7-33.2 数据类型 使用使用DROP TYPE可以删除用户自定义的数据类型。可以删除用户自定义的数据类型。其语法格式为:其语法格式为:DROP TYPE type_name其中,参数其中,参数type_name表示已经定义好的用户自定义表示已经定义好的用户自定义的数据类型的数据类型例例3.3 删除在例删除在例3.1中定义的数据类型中定义的数据类型telephone_code。DROP TYPE tele
14、phone_code注意:只能删除已经定义但未被使用的用户自定义数据类型,注意:只能删除已经定义但未被使用的用户自定义数据类型,正在被表或其他数据库对象使用的用户自定义数据类型不能正在被表或其他数据库对象使用的用户自定义数据类型不能被删除。被删除。 SQL Server182022-7-33.3 表结构的创建、修改和删除 表结构的创建表结构的创建 使用使用SQL Server Management Studio创建表结构创建表结构启动启动SQL Server Managerment Studio,在,在“对象资对象资源管理器源管理器”窗口中,依次展开窗口中,依次展开“数据库数据库”节点、节点、
15、“sales”数据库节点。右键单击数据库节点。右键单击“表表”,从弹出的快,从弹出的快捷菜单中选择捷菜单中选择“新建表新建表”命令,系统弹出表设计器命令,系统弹出表设计器窗口,在该窗口中进行表结构的创建。窗口,在该窗口中进行表结构的创建。 最后,需保存表格。最后,需保存表格。 SQL Server192022-7-33.3 表结构的创建、修改和删除 使用使用Transact-SQL语句创建表格的语法格式语句创建表格的语法格式CREATE TABLE database_name.schema_name.|schema_name.table_name(column_name1 data_type
16、DEFAULT constant_expression IDENTITY ( SEED, INCREMENT ) NULL | NOT NULL ,n)ON filegroup | DEFAULT SQL Server202022-7-33.3 表结构的创建、修改和删除例例3.4 为为sales数据库创建一个销售人员表数据库创建一个销售人员表Seller,它包含销售员编号(它包含销售员编号(SaleID)、)、姓名(姓名(SaleName)、性别()、性别(Gender )、)、出生日期(出生日期(Birthady)、雇用日期()、雇用日期(HireDate)、)、地址(地址(Address)
17、、电话()、电话(Telephone) 、备注(备注(Note),),其中其中SaleID、SaleName这两列不允许为空。这两列不允许为空。 SQL Server212022-7-33.3 表结构的创建、修改和删除CREATE TABLE Seller(SaleID char(3) NOT NULL,SaleName char(8) NOT NULL, Gender char(2), Birthday datetime, HireDate datetime, Address char(60), Telephone char(13), Note char(200) SQL Server222
18、022-7-33.3 表结构的创建、修改和删除例例3.5 为为sales数据库创建订单表数据库创建订单表Orders,包括,包括OrderID、CustomerID、SaleID和和OrderDate字段,其中字段,其中OrderID为标为标识列,起始值为识列,起始值为10248,增量为,增量为1;CustomerID和和SaleID字段字段不允许为空值;不允许为空值;OrderDate字段的默认值为当前日期。字段的默认值为当前日期。CREATE TABLE Orders(OrderID int IDENTITY(10248,1), CustomerID char(3) NOT NULL, S
19、aleID char(3) NOT NULL, OrderDate datetime DEFAULT getdate() SQL Server232022-7-33.3 表结构的创建、修改和删除例例3.6 为为sales数据库在文件组数据库在文件组USER1上创建上创建Category种类表种类表CREATE TABLE Category(CategoryID int NOT NULL, CategoryName nvarchar(15), Description nvarchar(200) )ON USER1 SQL Server242022-7-33.3 表结构的创建、修改和删除 表结构的
20、修改表结构的修改修改的操作包括:增加或删除列、修改列的数据类型、修改的操作包括:增加或删除列、修改列的数据类型、数据长度等。数据长度等。 使用使用SQL Server Managerment Studio修改表结构:修改表结构:右键单击要修改结构的表右键单击要修改结构的表Seller,选择,选择“修改修改”命令,命令,在表设计器中对表的结构进行修改。在表设计器中对表的结构进行修改。 使用使用Transact-SQL语句修改表结构语句修改表结构 SQL Server252022-7-33.3 表结构的创建、修改和删除ALTER TABLE table_name ADD column_name d
21、ate_type DEFAULT contant_expressionIDENTITY(SEED,INCREMENT) NULL | NOT NULL ,n| DROP COLUMN column_name| ALTER COLUMN column_name new_datetype NULL | NOT NULL SQL Server262022-7-33.3 表结构的创建、修改和删除例3.7 sales数据库中的Customer表包含CustomerID、ConpanyName和ConnectName三个字段,现为该表添加地址(Address)、邮政编码(ZipCode)和电话号码(Tel
22、ephone)字段。 SQL Server272022-7-3ALTER TABLE CustomerADD Address char(40), ZipCode char(6) ,Telephone varchar(15) NOT NULL SQL Server282022-7-3例3.8 将表Seller中的Sex列删除ALTER TABLE Seller DROP COLUMN Sex例3.9 将Seller表中的Address字段的长度改为30,且不能为空ALTER TABLE SellerALTER COLUMN Address varchar(30) NOT NULL SQL Ser
23、ver292022-7-33.3 表结构的创建、修改和删除 删除表删除表 使用SQL Server Managerment Studio删除表的步骤:1)打开SQL Server Managerment Studio,在“对象资源管理器”窗口中,依次展开“数据库”节点、“sales”数据库节点、“表”节点。2)选择要删除的表,单击鼠标右键右键,从弹出的快捷菜单中选择“删除删除”命令。3)系统会打开“删除对象”对话框,在该对话框中列出了将被删除的表。单击“确定”按钮即可完成指定表的删除操作。 SQL Server302022-7-33.3 表结构的创建、修改和删除使用使用DROP TABLE命令
24、删除表格,语法格式:命令删除表格,语法格式:DROP TABLE table_name1,n例3.10 将Customer表从sales数据库中删除。DROP TABLE Customer SQL Server312022-7-33.4 向表中插入、修改和删除数据 向表中插入数据向表中插入数据(参见第五版教材(参见第五版教材P115)使用的Transact-SQL语句完成插入操作,语法格式:INSERT INTO table_name ( column_name ,n ) VALUES ( expression | NULL | DEFAULT ,n )其中: table_name:要插入数据
25、的表名。 column_name:要插入数据的列名。 expression:与column_name相对应的字段的值,字符型和日期型值插入时要加单引号。 SQL Server322022-7-33.4 向表中插入、修改和删除数据例3.11 向Category表中添加数据。INSERT INTO Category(CategoryID,CategoryName,Description)VALUES(1,饮料,软饮料、咖啡、茶、啤酒和淡啤酒)例3.12 向Seller表中插入一行数据,其中Sex字段使用默认值为男,HireDate等字段均取空值。 SQL Server332022-7-33.4 向
26、表中插入、修改和删除数据INSERT INTO Seller(SaleID,SaleName,Sex,Birthday,HireDate,Address,Telephone,Notes)VALUES(s11,赵宇飞,DEFAULT,1974-07-25,NULL,NULL,NULL,NULL)或INSERT INTO Seller(SaleID,SaleName,Birthday)VALUES(s11,赵宇飞,1974-07-25) SQL Server342022-7-33.4 向表中插入、修改和删除数据注意:(1)在插入数据时,对允许为空的列可使用NULL插入空值;对具有默认值的列可使用D
27、EFAULT插入默认值。(2)当向表中所有列都插入新数据时,可以省略列名表,但必须保证VALUES后的各数据项位置同表定义时的顺序一致,否则系统会报错。 SQL Server352022-7-33.4 向表中插入、修改和删除数据例3.13 在例3.11和例3.12中,由于是对表中所有列插入数据,则可省略列名表,写成如下形式:INSERT INTO CategoryVALUES(1,饮料,软饮料、咖啡、茶、啤酒和淡啤酒)INSERT INTO SellerVALUES(s11,赵宇飞,DEFAULT,1974-07-25,NULL,NULL,NULL,NULL) SQL Server362022
28、-7-33.4 向表中插入、修改和删除数据例3.14 向OrderDetail表中插入一行数据。INSERT INTO OrderDetail VALUES(10254,P01003)正确形式为:INSERT INTO OrderDetail VALUES(10254,P01003,NULL)INSERT INTO OrderDetail (OrderID,ProductID)VALUES(10254,P01003)在后一种形式中,系统将Quantity字段的值自动设为空值。错误错误 SQL Server372022-7-33.4 向表中插入、修改和删除数据例3.15 向Orders表中插入一
29、行数据。INSERT INTO Orders (CustomerID,SaleID)Values(c01,s11)注意:具有IDENTITY属性的列,其值由系统给出,用户不必向表中插入数据。 SQL Server382022-7-33.4 向表中插入、修改和删除数据使用INSERT INTO语句一次只能插入一行数据,若想一次插入多行多行数据,则需在INSERT INTO语句中加入查询子句查询子句:INSERT INTO dest_table_name ( column_name ,n ) SELECT column_name ,nFROM source_table_name WHERE sea
30、rch_conditions SQL Server392022-7-33.4 向表中插入、修改和删除数据例3.16 创建employee表,包含三个字段EmployeeID、EmployeeName和Address。将Seller表中的女销售人员的数据插入到employee表中。CREATE TABLE Employee(EmployeeID char(3),EmployeeName char(8),Address char(60)GOINSERT INTO EmployeeSELECT SaleID,SaleName,AddressFROM SellerWHERE Gender=女 SQL
31、Server402022-7-33.4 向表中插入、修改和删除数据 修改表中数据修改表中数据 使用使用UPDATE语句来实现。其语法格式为:语句来实现。其语法格式为:UPDATE table_nameSET column_name=expression ,n WHERE search_conditions table_name:要更新数据的表名。:要更新数据的表名。 column_name:要更新数据的列名。:要更新数据的列名。 expression:更新后的数据值。:更新后的数据值。 search_conditions:更新条件:更新条件,只对表中满足该条件只对表中满足该条件的记录进行更新。
32、的记录进行更新。 SQL Server412022-7-33.4 向表中插入、修改和删除数据例例3.17 将将Product表中表中啤酒啤酒的价格改为的价格改为4元。元。UPDATE ProductSET Price=4WHERE ProductName=啤酒啤酒 SQL Server422022-7-33.4 向表中插入、修改和删除数据例例3.18 将将Seller表中表中 赵宇飞的地址改为赵宇飞的地址改为东直门外东直门外大街大街108号号,电话改为,电话改为(010)60486658。UPDATE SellerSET Address=东直门外大街东直门外大街108号号, Telephone
33、=(010)60486658WHERE SaleID=s11 SQL Server432022-7-33.4 向表中插入、修改和删除数据例例3.19 将将Product表中表中CategoryID为为2的所有产品的的所有产品的价格下调价格下调10UPDATE ProductSET Price=Price*(1-0.1)WHERE CategoryID=2 SQL Server442022-7-33.4 向表中插入、修改和删除数据 删除表中数据删除表中数据删除表中数据使用的是删除表中数据使用的是DELETE语句,其语法格式为:语句,其语法格式为:DELETE FROM table_name WH
34、ERE search_conditions 功能:删除表中符合功能:删除表中符合search_conditions的数据;缺省的数据;缺省WHERE子句时,表示删除该表中的所有数据。子句时,表示删除该表中的所有数据。 SQL Server452022-7-33.4 向表中插入、修改和删除数据例例3.20 将例将例3.12插入的数据从插入的数据从Seller表中删除。表中删除。DELETE FROM SellerWHERE SaleID=s11 SQL Server462022-7-33.4 向表中插入、修改和删除数据 在在SQL Server Management Studio 插入、修改和删
35、除数插入、修改和删除数据据 选中要进行插入、更新或删除数据操作的表,单击选中要进行插入、更新或删除数据操作的表,单击鼠标鼠标右键右键,在弹出的快捷菜单选择,在弹出的快捷菜单选择“打开表打开表”命令,命令,出现表数据窗口。在该窗口中完后数据的插入、修出现表数据窗口。在该窗口中完后数据的插入、修改和删除改和删除。 SQL Server472022-7-33.5 约束 约束定义了必须遵循的用于维护数据一致性和正确性的约束定义了必须遵循的用于维护数据一致性和正确性的规则,是强制实现数据完整性的主要途径。规则,是强制实现数据完整性的主要途径。(完整性完整性 参见第五版教材参见第五版教材P158) 约束有
36、约束有5种类型:主键约束、唯一约束、检查约束、默种类型:主键约束、唯一约束、检查约束、默认约束、外键约束(参照约束)。认约束、外键约束(参照约束)。 约束可以在两个层次上实施:约束可以在两个层次上实施:(1)列级:用户定义的约束只对表中的一列起作用;)列级:用户定义的约束只对表中的一列起作用;(2)表级:用户定义的约束对表中的多列起作用。)表级:用户定义的约束对表中的多列起作用。 SQL Server482022-7-33.5 约束 约束的创建、修改和删除约束的创建、修改和删除 约束可以用约束可以用Transact-SQL的的CREATE TABLE语句或语句或ALTER TABLE语句来创建
37、。语句来创建。(1)使用)使用CREATE TABLE语句创建约束语句创建约束创建表时定义约束,约束是表格定义的一部分。语法格式:创建表时定义约束,约束是表格定义的一部分。语法格式:CREATE TABLE table_name( column_name data_type CONSTRAINT constraint_name constraint_type ,n ) SQL Server492022-7-33.5 约束 (2)使用)使用ALTER TABLE语句创建约束语句创建约束 在已有的表上创建、修改约束。语法格式为:在已有的表上创建、修改约束。语法格式为:ALTER TABLE tab
38、le_name WITH CHECK | WITH NOCHECK ADD CONSTRAINT constraint_name constraint_typeWITH CHECK | WITH NOCHECK : 对表中现有的数据是对表中现有的数据是否进行检查。否进行检查。 SQL Server502022-7-33.5 约束(3)使用)使用ALTER TABLE语句还可删除约束,语法格式为:语句还可删除约束,语法格式为: ALTER TABLE table_name DROP CONSTRAINT constraint_name 注意:只删除了表中的指定约束,并没有删除表。注意:只删除了表
39、中的指定约束,并没有删除表。 但是,当表被删除时,在该表上定义的所有约束将自动但是,当表被删除时,在该表上定义的所有约束将自动取消。取消。 SQL Server512022-7-33.5 约束 主键约束主键约束 主键用于唯一地标识表中每一条记录。可以定义表中的主键用于唯一地标识表中每一条记录。可以定义表中的一列或多列为主键。一列或多列为主键。 主键列的值不能重复,也不能为空值。每张表都应该有主键列的值不能重复,也不能为空值。每张表都应该有且只有一个主键。且只有一个主键。(1)创建主键约束的语法格式:)创建主键约束的语法格式: CONSTRAINT constraint_name PRIMARY
40、 KEY CLUSTERED | NONCLUSTERED ( col_name ,n) SQL Server522022-7-33.5 约束例例3.21 创建创建Orders表,包括四个字段,其中表,包括四个字段,其中OrderID字段设字段设为主键。为主键。CREATE TABLE Orders(OrderID int CONSTRAINT pk_orderid PRIMARY KEY, CustomerID char(3), SaleID char(3), OrderDate datetime)如果没有提供主键约束的名字,如果没有提供主键约束的名字,SQL Server会自动为该约束会自
41、动为该约束提供一个名字。提供一个名字。 SQL Server例例3.22 修改表修改表 添加主键约束。添加主键约束。create table student( sno int , sname varchar(20) , sage int)alter table student alter column sno int not nullalter table student add primary key(sno) SQL Server542022-7-33.5 约束(2)在)在SQL Server Management Studio中创建、修改、删中创建、修改、删除主键约束。除主键约束。1)选
42、中需要添加约束的)选中需要添加约束的表表,右键单击右键单击,选择,选择“修改修改” 。2)右键单击要设置为主键的字段(一个或多个),右)右键单击要设置为主键的字段(一个或多个),右键单击,选择键单击,选择“设置主键设置主键”。这时主键列的左边会。这时主键列的左边会显示显示“黄色钥匙黄色钥匙”的图标。的图标。3)点击工具栏上的)点击工具栏上的“保存保存”按钮,完成主键的设置。按钮,完成主键的设置。 SQL Server552022-7-33.5 约束唯一(唯一(UNIQUE)约束)约束 用来限制在指定列上不允许有相同的值。一个表上可用来限制在指定列上不允许有相同的值。一个表上可以有多个以有多个U
43、NIQUE约束。约束。 唯一约束和主键约束的区别:唯一约束和主键约束的区别: 唯一约束允许在该列上存在唯一约束允许在该列上存在NULL值,而主键约值,而主键约束限制更为严格,不但不允许有重复,而且也不束限制更为严格,不但不允许有重复,而且也不允许有空值。允许有空值。 在创建唯一约束和主键约束时可以创建聚集索引在创建唯一约束和主键约束时可以创建聚集索引和非聚集索引,但在缺省情况下主键约束产生聚和非聚集索引,但在缺省情况下主键约束产生聚集索引,而唯一约束产生非聚集索引。集索引,而唯一约束产生非聚集索引。 SQL Server562022-7-33.5 约束(1)创建唯一约束的语法格式为:)创建唯一
44、约束的语法格式为: CONSTRAINT constraint_name UNIQUE CLUSTERED | NONCLUSTERED ( col_name ,n) SQL Server572022-7-33.5 约束例例3.25 创建表创建表Department,包含三个字段,并在,包含三个字段,并在dep_name字段上创建唯一约束。字段上创建唯一约束。CREATE TABLE Department(dep_id int PRIMARY KEY, dep_name char(20) CONSTRAINT unq_dname UNIQUE, dep_head char(5) ) SQL S
45、erver582022-7-33.5 约束例例3.26 在在Seller表的表的Telephone字段建立唯一约束。字段建立唯一约束。ALTER TABLE SellerADD CONSTRAINT unq_telephone UNIQUE(Telephone) SQL Server592022-7-33.5 约束(2)在)在SQL Server Management Studio下创建唯一约束的下创建唯一约束的操作步骤为:操作步骤为:1)选中需要添加唯一性约束的)选中需要添加唯一性约束的表表,右键单击右键单击,选择,选择“修改修改” 。2)右键单击上方窗格,选择)右键单击上方窗格,选择“索引
46、索引/键键”命令。命令。3)点击)点击“添加添加”按钮添加新的主按钮添加新的主/唯一键或索引;在唯一键或索引;在(常规)的(常规)的“类型类型”右边选择右边选择“唯一键唯一键”,在,在“列列”的右边单击省略号按钮的右边单击省略号按钮“”,选择列名选择列名“Cname”和排序规律和排序规律ASC(升序)或(升序)或DESC(降序)。(降序)。4)点击)点击“关闭关闭”按钮即可。按钮即可。 SQL Server602022-7-33.5 约束 CHECK约束约束 用来指定某列的可取值的范围。可以在单列上用来指定某列的可取值的范围。可以在单列上定义多个定义多个CHECK约束。约束。(1)用)用T-S
47、QL语句创建检查约束,语法格式:语句创建检查约束,语法格式: CONSTRAINT constraint_name CHECK (exp)exp是一个表达式,定义要对列进行检查的条件。是一个表达式,定义要对列进行检查的条件。 SQL Server612022-7-33.5 约束例例3.27 创建学生表创建学生表Student,包含,包含sid(学号)、(学号)、sname(姓(姓名)、名)、sage(年龄)以及(年龄)以及scity(城市)四个字段,并在(城市)四个字段,并在sage字段创建一个字段创建一个CHECK约束,使得约束,使得sage的值在的值在1830岁之间。岁之间。CREATE
48、TABLE Student(sid int PRIMARY KEY, sname char(20), sage int CONSTRAINT check_age CHECK (sage=18 AND sage=30), scity char(10) SQL Server622022-7-33.5 约束该语句还可写成:该语句还可写成:CREATE TABLE Student(sid int PRIMARY KEY, sname char(20), sage int CONSTRAINT check_age CHECK (sage BETWEEN 18 AND 30), scity char(10
49、)注意:当向该表执行插入或更新操作时,注意:当向该表执行插入或更新操作时,SQL Server会检查会检查插入的新列值是否满足插入的新列值是否满足CHECK约束的条件,若不满足,系约束的条件,若不满足,系统会报错,并拒绝执行插入或更新操作。统会报错,并拒绝执行插入或更新操作。 SQL Server632022-7-33.5 约束例例3.28 修改学生表修改学生表Student,在,在scity字段创建一个字段创建一个CHECK约束,以限制只能输入有效的城市。约束,以限制只能输入有效的城市。ALTER TABLE Student WITH NOCHECKADD CONSTRAINT check_
50、city CHECK ( scity IN (北京北京,上海上海,天津天津,重庆重庆) ) SQL Server642022-7-33.5 约束例例3.29 修改修改Seller表,在表,在Telephone字段创建字段创建CHECK约束,约束,使得该字段的值的格式为使得该字段的值的格式为11位数字。位数字。ALTER TABLE SellerADD CONSTRAINT check_telephone CHECK ( Telephone LIKE (0-90-90-9)0-90-90-90-90-90-90-90-9 )注意:注意:不能在具有不能在具有IDENTITY属性的列上设置属性的列上
51、设置CHECK约束。约束。 SQL Server652022-7-33.5 约束(2)在)在SQL Seerver Management Studio下创建下创建CHECK约约束的操作步骤为:束的操作步骤为:1)选中需要添加)选中需要添加CHECK约束的约束的表表,右键单击右键单击,选择,选择“修改修改”命令。命令。2)在弹出窗口中,右键单击上方窗格,选择)在弹出窗口中,右键单击上方窗格,选择“CHECK约束约束”命令。命令。3)单击)单击“添加添加”按钮,系统给出默认的约束名按钮,系统给出默认的约束名CK_Producs,在(常规)的,在(常规)的“表达式表达式”文本框中输文本框中输入约束条
52、件。入约束条件。 SQL Server662022-7-33.5 约束 若要修改已有的若要修改已有的CHECK约束,可以在约束,可以在“选定的选定的CHECK约束约束”下拉列表中下拉列表中 选择要修改的选择要修改的CHECK约束。约束。4)“表设计器表设计器”中的中的“在创建或重新启用时检查现有数在创建或重新启用时检查现有数据据” 决定在创建决定在创建CHECK约束时是否约束时是否检测现存数据检测现存数据。5)单击)单击“关闭关闭”按钮,完成按钮,完成CHECK约束的创建或修改。约束的创建或修改。 SQL Server672022-7-33.5 约束 DEFAULT约束约束 给表中指定列赋予默
53、认值,当向该表插入数据给表中指定列赋予默认值,当向该表插入数据时,如果用户没有明确给出该列的值,时,如果用户没有明确给出该列的值,SQL Server会自动为该列输入默认值。每列只能有一个会自动为该列输入默认值。每列只能有一个DEFAULT约束。约束。(1)使用)使用Transact-SQL语句创建默认约束语句创建默认约束 (P63) CONSTRAINT constraint_name DEFAULT (expression | NULL) FOR column_name SQL Server 例例3.30 给给student表的表的ssex列添加默认值列添加默认值 alter table
54、student add default(男男) for ssex (2)使用)使用SQL Seerver Management Studio创建创建默认约束默认约束 (在表设计器的下半部分,在表设计器的下半部分,“默认值与绑定默认值与绑定”栏设置。栏设置。) SQL Server692022-7-33.5 约束 外键约束外键约束Foreign key 用于与其他表(主键表)中的列(称为主用于与其他表(主键表)中的列(称为主键列)建立连接。键列)建立连接。例如:例如: SQL Server702022-7-33.5 约束(1)创建外键约束的语法格式为:)创建外键约束的语法格式为: CONSTRA
55、INT constraint_name FOREIGN KEY (col_name1,n)REFERENCES table_name(column_name1,n)其中:其中:col_name1,n:是要实现外键约束的列。:是要实现外键约束的列。table_name:是主键表(参照表)表名。:是主键表(参照表)表名。column_name1,n:是主键列(参照列)列名。:是主键列(参照列)列名。 SQL Server712022-7-33.5 约束例例3.31 若若sales数据库中包含数据库中包含Seller表和表和Customer表。表。Seller(SaleID、SaleName)Cus
56、tomer(CustomerID、Company)新建表新建表Orders(OrderID、CustomerID、SaleID,OrderDate)其中其中CustomerID、SaleID为外键。为外键。CREATE TABLE Orders(Orderid int PRIMARY KEY, CustomerID char(3) REFERENCES Customer(CustomerID), SaleID char(3) CONSTRAINT fk_sid REFERENCES Seller(SaleID), OrderDate datetime DEFAULT getdate() SQL
57、 Server722022-7-33.5 约束例例3.32 修改修改OrderDetail表,在表,在OrderID列上创建外键约束。列上创建外键约束。ALTER TABLE OrderDetailADD CONSTRAINT fk_orderid FOREIGN KEY (OrderID) REFERENCES Orders(OrderID)或者:或者:ALTER TABLE OrderDetailWITH NOCHECKADD CONSTRAINT fk_orderid FOREIGN KEY (OrderID) REFERENCES Orders(OrderID) SQL Server7
58、32022-7-33.5 约束(2)在)在SQL Seerver Management Studio下同样可以创建外下同样可以创建外键约束,操作步骤如下:键约束,操作步骤如下:1)中需要添加外键约束的)中需要添加外键约束的表表,右键右键单击,选择单击,选择“修改修改”命令。命令。2)右键单击上方窗格,选择)右键单击上方窗格,选择“关系关系”命令。命令。3)点击)点击“添加添加”按钮,系统给出默认的关系名,单击按钮,系统给出默认的关系名,单击“表和列规范表和列规范”内容框中右边的内容框中右边的省略号省略号按钮,从弹按钮,从弹出的出的“表和列表和列”对话框中选择外键约束的表和列。对话框中选择外键约
59、束的表和列。 单击单击“确定确定”按钮,返回到按钮,返回到“外键关系外键关系”对话框。对话框。 SQL Server742022-7-33.5 约束4)设置)设置“在创建或重新启用时检查现有数据在创建或重新启用时检查现有数据”为为“是是”,指定对于在创建或重新启用约束之前就存,指定对于在创建或重新启用约束之前就存在于表中的所有数据,根据约束进行验证。在于表中的所有数据,根据约束进行验证。5)将)将“强制外键约束强制外键约束”或或“强制用于复制强制用于复制”设置为设置为“是是”,则能确保任何数据添加、修改或删除操作,则能确保任何数据添加、修改或删除操作都不会违背外键关系。都不会违背外键关系。6)
60、展开)展开“Insert 和和 Update 规范规范”,可设置,可设置“更新规则更新规则” 和和 “删除规则删除规则”。右边的。右边的下拉列表下拉列表可选择可选择“层叠层叠”表示级联更新或级联删除。表示级联更新或级联删除。(详见下页)(详见下页) SQL Server752022-7-33.5 约束如果对主键表进行更新(如果对主键表进行更新(Update)或删除()或删除(Delete)一行数据的操作,)一行数据的操作,会检查主键表的主键是否被从表的外键引用:会检查主键表的主键是否被从表的外键引用:l 若没有被引用,则更新或删除。若没有被引用,则更新或删除。l 若被引用,可能发生如下若被引用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 温州住宅装修合同范本
- 欠款分期偿还合同范本
- 商店房屋租赁合同范本
- 学校宿舍合同范本
- 租用公司资质合同范本
- 防汛物资供货合同范本
- 酒店维修劳务合同范本
- 病句表意不明30题及答案
- 企业宣传与介绍模板
- 2025智能楼宇自动化控制系统广告宣传合同范本
- 第八课 良师相伴 亦师亦友
- 全国高考物理高考题说题比赛一等奖课件物理说题李焕景
- 华为MA5800配置及调试手册
- 巴金名著导读《寒夜》
- 2024年建筑业10项新技术
- 《环境建设工程概算、预算编制办法》
- 提升服务行业人员的职业道德和职业素养
- 按摩椅行业分析及市场前景展望报告
- 2024年上海外服招聘笔试参考题库附带答案详解
- 改善患者就医体验培训课件
- 养殖乌龟入门知识培训课件
评论
0/150
提交评论