《第5章-SQLSERVER-数据表ppt课件(全).ppt》由会员分享,可在线阅读,更多相关《第5章-SQLSERVER-数据表ppt课件(全).ppt(81页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第第第5 5章章章章 SQLSERVERSQLSERVER数据表数据表本章的学习目标:掌握创建数据库的技能熟悉数据表的基本特点和类型掌握用SQLServerManagementStudio和Transact-SQL语言创建数据表的技能掌握用SQLServerManagementStudio和Transact-SQL语言修改数据表结构的技能掌握用SQLServerManagementStudio和Transact-SQL语言操作数据表中数据的相关技能理解什么是数据的完整性掌握约束的创建、查看及删除相关技能5.1 数据表创建数据表创建在MicrosoftSQLServer2008中,创建数据表有
2、两种方式:一是用该数据库管理系统自带的SQLServerManagementStudio可视化地创建数据表,二是使用Transact-SQL语言直接创建数据表。5.1 数据表创建数据表创建5.1.1使用使用SQLServerManagementStudio创创建数据表建数据表5.1.2使用使用Transact-SQL语言创建数据表语言创建数据表5.1.1使用使用SQLServerManagementStudio创建创建数据表数据表1打开MicrosoftSQLServer20082创建数据库3创建数据表表结构设置主键5.1.2使用使用Transact-SQL语言语言创建数据表创建数据表使用Tr
3、ansact-SQL语言创建数据表时,主要是用到CREATETABLE语句。CREATETABLE数据表名字(字段名称1(对字段的定义部分)字段名称2(对字段的定义部分).字段名称n(对字段的定义部分));1客房类型表的创建CREATETABLE客房类型(类型编号char(4)CONSTRAINTpk_lxbhPRIMARYKEYNOTNULL,名称varchar(10)UNIQUENOTNULL,面积float,床位int,价格smallmoneyNOTNULL,空调bit,电视bit,卫生间bit)2客房信息表的创建CREATETABLE客房信息(客房号char(6)CONSTRAINTp
4、k_kfbhPRIMARYKEYNOTNULL,类型编号char(4)CONSTRAINTfk_kfxxlxdmREFERENCES客房类型(类型编号)NOTNULL,位置varchar(20),描述varchar(50)3客户信息表的创建CREATETABLE客户信息(身份证号varchar(18)CONSTRAINTpk_sfzhPRIMARYKEYNOTNULL,姓名varchar(12)NOTNULL,电话varchar(15)NOTNULL)4客房业务表的创建CREATETABLE客房业务(客房号char(6)CONSTRAINTfk_kfhywREFERENCES客房信息(客房号)
5、NOTNULL,入住时间datetimeNOTNULL,身份证号varchar(18)CONSTRAINTfk_sfzhywREFERENCES客户信息(身份证号)NOTNULL,客户姓名varchar(12)NOTNULL,客户电话varchar(15)NOTNULL,备注nVarchar(50)NULL)5.2修改表结构在MicrosoftSQLServer2008中,修改表结构有两种方式:一是用该数据库管理系统自带的SQLServerManagementStudio可视化地修改表结构,二是使用Transact-SQL语言直接修改表结构。5.2修改表结构5.2.1使用SQLServerMa
6、nagementStudio修改表结构5.2.2使用Transact-SQL语言修改表结构5.2.1使用SQLServerManagementStudio修改表结构1打开表设计界面打开表设计界面2修改表结构修改表结构5.2.2使用使用Transact-SQL语言语言修改表结构修改表结构1使用使用ALTER语句添加字段语句添加字段对数据表进行字段添加的语法如下:ALTERTABLE数据表名ADD字段名字段类型是否为空【例5-7】向客房类型表中添加一个字段【备注】,类型为nchar,长度为10。USEhotelGOALTERTABLE客房类型ADD备注nchar(10)NULLGO执行后的查询结果
7、2使用使用ALTER语句修改字段类型语句修改字段类型对数据表进行字段类型修改的语法如下:ALTERTABLEtable_nameALTERCOLUMNcolumn_namenew_type_name【例5-8】客房类型的【备注】属性列的字段类型为nchar10,现在把它修改为ntext类型。具体的Transact-SQL语句如下所示:USEhotelGOALTERTABLE客房类型ALTERCOLUMN备注ntextGO执行后的结果3使用使用ALTER语句删除字段语句删除字段对数据表进行字段删除的语法如下:ALTERTABLE数据表名DROPCOLUMN字段名【例5-9】对客房类型表删除刚才添
8、加的字段【备注】。具体的Transact-SQL语句如下所示:USEhotelGOALTERTABLE客房类型DROPCOLUMN备注GO执行后的结果4删除数据表操作介绍删除数据表操作介绍删除表就是将表中数据和表的结构从数据库中永久性地去除。表被删除之后,就不能再恢复该表的定义。删除表可以使用DROPTABLE语句来完成,该语句的语法形式如下:DROPTABLEtable_name可以使用DROPTABLE语句一次性地删除多个表,表之间使用逗号分开。5.3表数据的操作所谓表数据的操作,就是对存储在数据表中的数据的相关操作。在MicrosoftSQLServer2008中,对表数据操作有两种方式
9、:一是用该数据库管理系统自带的SQLServerManagementStudio可视化地对数据表操作,二是使用Transact-SQL语言直接操作表数据。5.3表数据的操作5.3.1使用使用SQLServerManagementStudio插插入、更新和删除表数据入、更新和删除表数据5.3.2使用Transact-SQL语言插入、更新和删除表数据5.3.1使用使用SQLServerManagementStudio插插入、更新和删除表数据入、更新和删除表数据1打开表数据编辑界面打开表数据编辑界面2对表数据进行编辑对表数据进行编辑5.3.2使用使用Transact-SQL语言插入、语言插入、更新和
10、删除表数据更新和删除表数据虽然使用SQLServerManagementStudio可以很方便地进行数据的插入、更新和删除等操作,但是对于编程人员来说,使用最多的还是通过Transact-SQL语言来完成这些操作。从另一方面来说,当数据量很庞大后,使用SQLServerManagementStudio对数据进行操作也不方便,更多时候需要使用Transact-SQL语言对数据进行批量操作。本小节讲详细介绍如何使用Transact-SQL语言进行数据的插入、更新和删除操作(以节创建的客房类型数据表为操作对象)。1插入数据插入数据一般地,使用INSERT语句一次只能插入一行数据。INSERT语句的基
11、本语法形式如下:INSERTINTOtable_or_view_name(column_list)VALUES(expression)【例5-11】在客房类型表中插入一行数据,类型编号为“P004”,名称为“普通三人间”,面积为“45”,床位为“3”,价格为“550”,空调为“1”,电视为“1”,卫生间为“0”。具体的Transact-SQL语句如下所示:INSERTINTOhotel.dbo.客房类型(类型编号,名称,面积,床位,价格,空调,电视,卫生间)VALUES(P004,普通三人间,45,3,550,1,1,0)GO查看新添加的数据2更新数据更新数据可以使用UPDATE语句更新表中已
12、经存在的数据。UPDATE语句既可以一次更新一行数据,也可以一次更新许多行,甚至可以一次更新表中的全部数据行。UPDATE语句的基本语法形式如下:UPDATEtable_or_view_nameSETcolumn_name=expression,WHEREsearch_condition(1)不带不带where子句的子句的UPDATE语句语句【例5-13】由于物价上涨,现在对酒店所有类型房间的价格统一上调50元。具体的Transact-SQL语句如下所示:USEhotelGOUPDATE客房类型SET价格=价格+50GO执行结果(2)带带where子句的子句的UPDATE语句语句【例5-14】
13、由于物价上涨,现在对酒店的豪华商务房的价格统一上调50元。具体的Transact-SQL语句如下所示:USEhotelGOUPDATE客房类型SET价格=价格+50WHERE名称=豪华商务房GO执行结果3删除数据删除数据当表中的数据不再需要时,可以将其删除。一般情况下,使用DELETE语句删除数据。DELETE语句可以从一个表中删除一行或多行数据。删除数据的DELEE语句的基本语法形式如下:DELETEFROMtable_or_nameWHEREsearch_condition(1)带带where子句的子句的DELETE语句语句【例5-15】删除客房类型数据表中【面积】=30平方米的房间类型数
14、据。具体的Transact-SQL语句如下所示:USEhotelGODELETEFROM客房类型WHERE面积=30GO删除失败,因为有外键关系应先删除外键数据执行成功查看结果(2)不带不带where子句的子句的DELETE语句语句5.4数据表的约束数据表的约束数据完整性就是指存储在数据库中的数据的一致性和准确性。在评价数据库的设计时,数据完整性的设计是数据库设计好坏的一项重要指标。在MicrosoftSQLServer2008系统中,有3种数据完整性类型,即域完整性、实体完整性和引用完整性。5.4数据表的约束数据表的约束5.4.1约束的概念和类型约束的概念和类型5.4.2约束的管理约束的管理
15、5.4.1约束的概念和类型约束的概念和类型完整性类型约 束 类 型描 述域完整性DEFAULT在使用INSERT语句插入数据时,如果某个列的值没有明确提供,则将定义的缺省值插入到该列中CHECK指定某一个列中的可保存值的范围实体完整性主键每一行的唯一标识符,确保用户不能输入冗余值和确保创建索引,提高性能,不允许空值UNIQUE防止出现冗余值,并且确保创建索引,提高性能,允许空值引用完整性外键定义一列或者几列,其值与本表或者另外一个表的主键值匹配约束使用注意事项(1)不必删除表,就可以直接创建、修改和删除约束的定义。(2)应该在应用程序中增加错误检查机制,测试数据是否与约束相冲突。(3)当在表上
16、增加约束时,SQLServer系统将检查表中的数据是否与约束冲突。5.4.2约束的管理约束的管理本节详细研究各种DEFAULT、CHECK、主键、UNIQUE、外键等约束的特点、创建方法、修改等内容。1DEFAULT约束约束DEFAULT约束用于向列中插入默认值。如果没有规定其他的值,那么会将默认值添加到所有的新纪录。在创建表时和创建表后,都可以对表中的列使用DEFAULT约束。创建表时添加DEFAULT约束【例5-18】对于客房类型数据表,创建的时候可以把【电视】字段默认为“1”,这样插入数据的时候就可以不用输入这个属性列的值。Transact-SQL代码如下所示:CREATETABLE客房
17、类型(类型编号char(4)CONSTRAINTpk_lxbhPRIMARYKEYNOTNULL,名称varchar(10)UNIQUENOTNULL,面积float,床位int,价格smallmoneyNOTNULL,空调bit,电视bitDEFAULT1,卫生间bit)创建表后添加DEFAULT约束对于已经创建完成的数据表,也可以对某些属性列添加默认值。具体Transact-SQL代码如下所示:ALTERTABLE客房类型ADDCONSTRAINTcol_b_defDEFAULT1FOR电视;2CHECK约束约束CHECK约束用来限制用户输入某一个列的数据,即在该列中只能输入指定范围的数据
18、。CHECK约束的两种基本语法形式如下:CONSTRAINTconstraint_nameCHECK(logical_expression)CHECK(logical_expression)创建表时添加CHECK约束【例5-19】在数据表房间类型的【名称】列中可以创建一个CHECK约束,指定其取值范围是“单人间”、“双人间”、“三人间”。这样,当向【名称】列输入数据时,要么输入数据这三个数据之一,而不能输入其他数据。具体Transact-SQL代码如下所示:CREATETABLE客房类型(类型编号char(4)CONSTRAINTpk_lxbh1PRIMARYKEYNOTNULL,名称varc
19、har(10)UNIQUENOTNULLCHECK(名称=单人间or名称=双人间or名称=三人间),面积float,床位int,价格smallmoneyNOTNULL,空调bit,电视bit,卫生间bit)创建表后添加CHECK约束对于已经创建完成的数据表,也可以对某些属性列添加CHECK约束。具体Transact-SQL代码如下所示:ALTERTABLE客房类型ADDCONSTRAINTcol_b_checkCHECK(名称=单人间or名称=双人间or名称=三人间),3主键约束主键约束主键约束在表中定义一个主键值,这是唯一确定表中每一行数据的标识符。在所有的约束类型中,主键约束是最重要的一种
20、约束类型,也是使用最广泛的约束类型。定义主键约束的4种基本语法形式如下所示:CONSTRAINTconstraint_namePRIMARYKEYPRIMARYKEYCONSTRAINTconstraint_namePRIMARYKEY(column_list)PRIMARYKEY(column_list)创建表后添加主键约束【例5-21】一般在创建数据表的时候就会创建数据表的主键(参考本章小节客房类型表的创建过程)。如果在创建数据表的时候没有添加主键,则可以在后期使用Alter语句对数据表进行主键设置,具体Transact-SQL代码如下所示:ALTERTABLE客房类型ADDCONSTRA
21、INTpk_TypeIDPRIMARYKEY(类型编号)使用主键约束的注意事项(1)每一个表最多只能定义一个主键约束。(2)主键列所输入的值必须是唯一的。如果主键约束由两个或两个以上的列组成,那么这些列的组合必须是唯一的。(3)主键列不允许空值。(4)主键约束在指定的列上创建了一个唯一性索引。该唯一性索引既可以是聚集索引,也可以是非聚集索引。在默认情况下创建的是聚集索引。如果表中已经有聚集索引,那么在创建主键约束之前,要么把已有的聚集索引删除,要么指定所创建的索引是非聚集索引。(5)可以在定义主键约束时添加级联操作选项。4UNIQUE约束约束UNIQUE约束指定表中某一个列或多个列不能有相同的
22、两行或两行以上的数据存在。这种约束通过实现唯一性索引来强制实体完整性。UNIQUE约束的4种基本语法形式如下所示:CONSTRAINTconstraint_nameUNIQUEUNIQUECONSTRAINTconstraint_nameUNIQUE(column_list)UNIQUE(column_list)使用UNIQUE约束的注意事项(1)UNIQUE约束所在的列允许空值,但是主键约束所在的列不允许空值。(2)一个表中可以有多个UNIQUE约束。(3)可以把UNIQUE约束放在一个或者多个列上,这些列或列的组合必须有唯一的值。但是,UNIQUE约束所在的列并不是表的主键列。(4)UNI
23、QUE约束强制在指定的列上创建一个唯一性索引。在默认情况下,是创建唯一性的非聚集索引。但是,在定义UNIQUE约束时也可以指定所创建的索引是聚集索引。5外键约束外键约束外键约束强制引用完整性,一个表中的FOREIGNKEY指向另一个表中的PRIMARYKEY。外键约束定义一个或多个列,这些列可以引用同一个表或另外一个表中的主键约束列或UNIQUE约束列。创建表时添加外键约束【例5-22】在创建客房信息数据表的时候,把客房类型数据表中的【类型编号】作为其外键,代码如下:CREATETABLE客房信息(客房号char(6)CONSTRAINTpk_kfbhPRIMARYKEYNOTNULL,类型编
24、号char(4)CONSTRAINTfk_kfxxlxdmREFERENCES客房类型(类型编号)NOTNULL,位置varchar(20),描述varchar(50)创建表后添加外键约束也可以在创建数据表后,在添加相应外键,具体Transact-SQL代码如下:ALTERTABLE客房信息ADDCONSTRAINTpk_kfbhFOREIGNKEY(类型编号)REFERENCES客房类型(类型编号)使用外键约束的注意事项(1)外键约束提供了单列引用完整性和多列引用完整性。在FOREIGNKEY子句中的列的数量和数据类型必须和REFERENCES子句中的列的数量和数据类型匹配。(2)不像主键约
25、束或唯一性约束,外键约束不能自动创建索引。然而,如果在数据库中经常使用连接查询,那么,为了加快连接查询的速度,提高连接查询的性能,用户应该在外键约束列上手工创建索引。(3)当用户修改外键约束所在表中的数据时,该用户必须拥有外键约束所参考表的SELECT权限或REFERENCES权限。(4)在定义外键约束时,如果引用同一个表中的列时,只能使用REFERENCES子句,不能使用FOREIGNKEY子句。例如,在如图11-13的示例中创建了两个约束。一个约束是主键约束,用来确保雇员代号的唯一性;另外一个约束是外键约束,用来确保经理代号是一个有效的雇员代号。注意,在这个外键约束中,引用了同一个表的主键列。本章小结本章主要讲述数据表和数据表中的数据创建、修改等操作。对于这些操作,既可以通过可视化的SQLServerManagementStudio来完成,也可以通过执行Transact-SQL语句来实现。首先,通过实例介绍了数据表的创建过程,包括创建数据表时候外键关系的添加、删除等;然后,介绍了如何修改数据表的结构,包括添加、修改及删除某些字段;接着,通过实例介绍了数据表中数据的创建、修改及删除等操作;最后,重点介绍了数据表中的约束,包括约束的概念和类型,及各种约束的详细介绍。本章是数据库操作学习中的核心章节,需要重点理解学习。
限制150内