中南大学信息科学与工程学院数据库技术与应用数据库技术与应用教材编写组数据库技术与应用本章内容重点难点第3章数据表的管理与维护数据表的创建和管理表数据的管理数据库完整性管理管理数据表的方法、数据库完整性管理2数据库技术与应用问题提出数据表与数据库是什么关系?数据表(或称表)是数据库最重要的组成部分之一。数据库只是一个框架,数据表才是其实质内容。根据信息的分类情况,一个数据库中可能包含若干个数据表。数据表与表数据的区别?为什么要进行数据库完整性设置?3数据库技术与应用3.1数据表的创建和管理3.1.1使用对象资源管理器创建数据表3.1.2使用T-SQL语言创建数据表3.1.3使用对象资源管理器对数据表进行管理3.1.4使用T-SQL语言对数据表进行管理4数据库技术与应用3.1数据表的创建和管理一个数据库可以拥有许多表,每个表都代表一个特定的实体。例如,学生数据库可能包含学生个人信息、院系信息、课程信息、成绩信息等多个表。每个实体使用一个单独的表可以消除重复数据,使数据存储更有效并减少数据输入项错误。SQLServer2008中数据库的主要对象是数据表,创建好数据库后,就可以向数据库中添加数据表。数据表由行和列组成,行有时也称为记录,列有时也称为字段或域。5数据库技术与应用3.1.1使用对象资源管理器创建数据表6在SQLServe中,一个汉字占据两个字符的位置,因此计算一个字段长度时,一个汉字的长度是2Byte。数据库技术与应用3.1.2使用T-SQL语言创建数据表语法格式:CREATETABLE[database_name.[owner.]|owner.]table_name({column_definition|column_nameAScomputed_column_expression|table_constraint∷=[CONSTRAINTconstraint_name]}|[{PRIMARYKEY|UNIQUE}])[ON{filegroup|DEFAULT}][TEXTIMAGE_ON{filegroup|DEFAULT}]column_definition∷={column_namedata_type}[COLLATEcollation_name][DEFAULTconstant_expression]7表名最多可包含128个字符表约束,可选的关键字PRIMARYKEY、NOTNULL、UNIQUE、FOREIGNKEY或CHECK定义计算列的值的表达式数据库拥有者数据库技术与应用3.1.2使用T-SQL语言创建数据表例3.1:在数据库student_db中创建Student学生信息表,要求包含S_NO(学号)、NAME(姓名)、AGE(年龄)、SEX(性别)信息,其中学号不能为空。Usestudent_dbGoCREATETABLEStudent(S_NOCHAR(7)NOTNULL,NAMECHAR(10),AGESMALLINT,SEXCHAR(1))8数据库技术与应用3.1.2使用T-SQL语言创建数据表例3.3:创建临时表temp_student。语句如下:/*用#说明temp_student为本地临时表*/CREATETABLE#temp_student(学号SMALLINTNOTNULL,姓名VARCHAR(30)NOTNULL,年龄INTNOTNULL,PRIMARYKEY(学号))临时表与永久表相似,但临时表存储在tempdb中,当不再使用时会自动删除。9数据库技术与应用3.1.3使用对象资源管理器对数据表进行管理使用对象资源管理器更改数据表名称10数据库技术与应用3.1.3使用对象资源管理器对数据表进行管理使用对象资源管理器删除数据表11勾选要删除的表对象数据库技术与应用3.1.3使用对象资源管理器对数据表进行管理使用对象资源管理器修改数据表结构12数据库技术与应用3.1.4使用T-SQL语言对数据表进行管理修改数据表语法格式:ALTERTABLEtable{[ALTERCOLUMNcolumn_name{new_data_type[(precision[,scale])][COLLATEcollation_name][NULL|NOTNULL]|{ADD|DROP}ROWGUIDCOL}]|ADD{[column_definition]|column_nameAScomputed_column_expression}[,...n]|[WITHCHECK|WITHNOCHECK]ADD{table_constraint}[,...n]|DROP{[CONSTRAINT]constraint_name|COLUMNcolumn}[,...n]|{CHECK|NOCHECK}CONSTRAINT{ALL|constraint_name[,...n]}|{ENABLE|DISABLE}TRIGGER{ALL|trigger_name[,...n]}}13Precision用于指定数据类型的精度;scale用于指定数据类型的小数位数。数据库技术与应用3.1.4使用T-SQL语言对数据表进行管理例3.6:在例3.1的Student学生信息表中增加zzmm(政治面貌)字段。增加该字段的语句:ALTERTABLEStudentADDzzmmchar(4)例3.7:将例3.6中增加的字段zzmm的宽度由4修改为8。修改该字段的语句:ALTERTABLEStudentAltercolumnzzmmchar(8)14数据库技术与应用3.1.4使用T-SQL语言对数据表进行管理删除数据表语法格式:DROPTABLEtable_name注意:(1)DROPTABLE不能用于删除由FOREIGNKEY约束引用的表,必须先删除引用的FOREIGNKEY约束或引用的表。(2)在系统表上不能使用DROPTABLE语句。例3.9:删除当前数据库中的Student_1学生信息表。DropTABLEStudent_1例3.10:在同一个语句中指定多个表对它们进行删除。假设有一个stu数据库,此数据库中存在book表和temp2表。DROPTABLEbook,temp215数据库技术与应用3.2表数据的管理3.2.1使用对象资源管理器管理表数据3.2.2使用T-SQL语言管理表数据16数据库技术与应用3.2表数据的管理表数据的管理主要是指对表进行添加或插入新数据更改或更新现有数据删除现有数据检索(或查询)现有数据的操作操作方法使用对象资源管理器T-SQL语句17数据库技术与应用3.2.1使用对象资源管理器管理表数据在表设计器中管理数据18数据库技术与应用3.2.1使用对象资源管理器管理表数据在数据库关系图中管理数据19数据库技术与应用3.2.2使用T-SQL语言管理表数据表数据的添加语法格式:INSERT[INTO]table_or_view[(column_list)]data_values例3.13:将新课程记录(9720044,网络技术与应用,选修,3)添加到课程信息数据表C_Info中,如图所示。语句如下:INSERTINTOC_InfoVALUES('9720044','网络技术与应用','选修',3,Null)20数据库技术与应用3.2.2使用T-SQL语言管理表数据表数据的修改语法格式:UPDATE{table_name|view_name}SET{column_name={expression|DEFAULT|NULL}|@variable=expression|@variable=column=expression}[,...n][FROM{table_source}[,...n]]21数据库技术与应用3.2.2使用T-SQL语言管理表数据例3.15:将数据表C_Info中的所有学分加1。无条件修改数据,使用语句:UPDATEC_InfoSETC_Credit=C_Credit+1例3.16:将数据表C_Info中课程号为“9710011”的学分减1。有条件修改数据,使用语句:UPDATEC_InfoSETC_Credit=C_Credit-1WHEREC_NO='9710011'22数据库技术与应用3.2.2使用T-SQL语言管理表数据表数据的删除(删除表中的所有记录)DELETE语句DELETE[FROM]{table_name|view_name}[FROM{table_source}[,...n]]TRUNCATETABLE语句TRUNCATETABLE[{database_name.[schema_name].|schema_name.}]table_name[;]23数据库技术与应用3.2.2使用T-SQL语言管理表数据SQL中删除语句的区别DELETETABLE:删除表记录内容不删除表结构,不释放空间。TRUNCATETABLE:删除表记录内容、释放空间但不删除表结构。DROPTABLE:删除表(表记录、表的结构、属性、索引也会删除)。注意:1.TRUNCATE和不带where子句的DELETE语句以及DROP都能删除表内数据;2.TRUNCATE比DELETE速度快,且使用的系统和事务日志资源少。DELETE语句每次删除一行,并在事务日志中为所删除的每行记录一项。24数据库技术与应用3.2.2使用T-SQL语言管理表数据例3.17:设学生数据库student_db中存在Table_1表,并且有若干记录,要求删除Table_1表中全部记录,但保留数据表结构。这是无条件全部删除记录,使用语句如下:TRUNCATETABLEstudent_db.dbo.Table_1例3.18:在C_Info表中删除课程号为“9720045”的记录。这是有条件删除记录,使用语句如下:DELETEFROMC_InfoWHEREC_NO='9720045'25数据库技术与应用3.3数据库完整性管理3.3.1数据库完整性概述3.3.2数据库完整性的类型3.3.3使用对象资源管理器实现数据库完整性设置26数据库技术与应用3.3.1数据库完整性概述数据库完整性是指数据库中数据的正确性、有效性和一致性。(1)正确性指数据的合法性,如数值型数据只能包含数字,不能包含字母。(2)有效性指数据是否处在定义域的有效范围之内。(3)一致性指同一事实的两个数据应该一致,不一致即是不相容的。27数据库技术与应用3.3.2数据库完整性的类型数据库完整性有4种类型实体完整性一般用标识列、主键约束、唯一约束、唯一索引实现。域完整性(或列完整性)域完整性是指给定列的输入有效性。通过规则、默认、约束和触发器等数据库对象实现。如年龄0~150,一般用check等实现。引用完整性一般用外码实现。用户定义完整性针对某个特定关系数据库的约束条件。28数据库技术与应用3.3.3使用对象资源管理器实现数据完整性的设置主键约束操作29数据库技术与应用3.3.3使用对象资源管理器实现数据完整性的设置CHECK约束操作在打开的“表设计器”中指向C_Credit字段并右键单击,单击“CHECK约束”命令,打开“CHECK约束”对话框,如图所示。30数据库技术与应用3.3.3使用对象资源管理器实现数据完整性的设置默认值约束操作31数据库技术与应用本章小结(1)数据表的创建和管理主要工具是对象资源管理器及T-SQL语言。(2)表数据的管理主要指对表进行添加或插入数据、更改或更新现有数据、删除现有数据、检索现有数据。(3)数据库完整性管理包括实体完整性、域完整性、参照完整性和用户自定义完整性。数据库完整性问题的解决主要通过设置主键、各种约束、默认值和规则等数据库对象来保证。32数据库技术与应用本章思考(1)数据通常存储在什么对象中?表对象存储在什么文件中?什么用户可以对表对象进行操作?(2)什么是数据的完整性?数据完整性包括哪些内容?为什么要使用数据的完整性?(3)假定利用CREATETABLE命令建立下面的BOOK表:CREA