首页计算机计算机软件数据库原理与应用(SQLServer版) 05-1 第5章 数据表的管理(一).pptx

05-1 第5章 数据表的管理(一).pptx

页数:58页文件大小:374.1 KB来源: 数据库原理与应用(SQLServer版)ppt课件

本课件从系统数据类型与用户自定义数据类型讲起,依次演示数据表结构的创建、修改与删除,说明列属性、约束设置与索引的建立方法,并给出表内容增加与修改的操作示例,便于参照练习。

第5章数据表的管理封面,涵盖数据类型、表结构创建修改与表内容操作
数据库表管理,涵盖数据类型、数据表结构的创建与数据表结构的修改与删除等要点
数据类型,说明系统数据类型与用户自定义数据类型
查看本课件的文字版(共 58 页,供检索与复制)

第1页:第5章数据表的管理

第5章数据表的管理

第2页:数据库表管理

数据库表管理

  • 数据类型
  • 数据表结构的创建
  • 数据表结构的修改与删除
  • 数据表内容的增加与修改
  • 数据表的索引

第3页:数据类型

数据类型

  • 系统数据类型
  • 用户自定义数据类型

第4页:系统数据类型

系统数据类型

二进制数据
Binary、Varbinary和Image
字符数据
Char、Varchar和Text
Unicode数据
Nchar,Nvarchar和Ntext
日期和时间数据
Datetime和Smalldatetime
数字数据
精确数字、近似数字

第5页:精确数字、近似数字

精确数字、近似数字

  • 精确数字
    • 整数:bigint、int、smallint、tinyint、bit
    • 小数:decimal和numeric
    • 货币:money和smallmoney
  • 近似数字
    • float、real

第6页:用户定义的数据类型

用户定义的数据类型

  • 用户定义的数据类型基于在Microsoft SQLServer中提供的数据类型。
  • 当几个表中必须存储同一种数据类型时,并且为保证这些列有相同的数据类型、长度和可空性时,可以使用用户定义的数据类型。

第7页:创建用户定义的数据类

创建用户定义的数据类

  • 创建用户定义的数据类型可以使用系统存储过程sp_addtype。其语法形式如下:exec sp_addtype {type},[,system_data_bype][, null_type’]
    • 其中,type是用户定义的数据类型的名称。
    • system_data_type是系统提供的数据类型,例如Decimal、Int、Char等。
    • null_type表示该数据类型是如何处理空值的,必须使用单引号引起来,如‘NULL’、‘NOT NULL’等。

第8页:例1:为数据库teachingDa

例1:为数据库teachingDa

  • 为数据库teachingDataA创建一个用户定义的数据类型Sname,该数据类型为基于系统数据类型变长为8的字符,且不允许为空。Exec sp_addtype Sname,‘Varchar(8)’,‘Not Null’

第9页:用CREATE TYPE定义数据类型

用CREATE TYPE定义数据类型

用CREATE TYPE定义数据类型 在SQL-Server 2005之后的后续版本中,sp_addtype将不再可用,取而代之的是CREATE TYPE语句。其语法方式如下:CREATE TYPE type_name{FROM base_type[ ( precision [, scale ] ) ][ NULL | NOT NULL ]}其中,typename:用户自定义的数据类型的名称。base_type:表示建立的数据类型所基于的由SQL Server提供的数据类型。当建立decimal或numeric类型时,需要用precision来指定总位数,用scale来指定小数位数。NULL | NOT NULL:指定此类型是否可容纳空值。如果未指定,则默认为NULL。

第10页:例2:方法一CREATE TYPE

例2:方法一CREATE TYPE

  • 方法一CREATE TYPE myDept FROM varchar(20)
  • 方法二
    • 在Microsoft SQL Server Management Studio的对象资料管理器中展开【可编程性】|【类型】,右击【用户定义数据类型】,选择【新建用户定义数据类型】命令,打开【新建用户定义数据类型】,输入自定义的数据类型名,选择数据类型,设置长度设定,确定是否允许空值(通过勾选【允许空值】进行设置),完成后单击【确定】。

第11页:当用户定义的数据类型

当用户定义的数据类型

  • 当用户定义的数据类型不需要时,可以用命令sp_droptype将其删除。其语法形式如下:exec sp_droptype{’type’}
  • 也可以在Microsoft SQL Server ManagementStudio的对象资料管理器中展开【可编程性】|【类型】|【用户定义数据类型】,右击要删除的数据类型,选择“删除”

第12页:表结构的创建

表结构的创建

  • 使用菜单命令创建
  • 使用命令方式创建
  • 数据表的导入

第13页:使用菜单命令创建表

使用菜单命令创建表

  • 启动“Microsoft SQL Server ManagementStudio”,在“对象资源管理器”窗口中展开【数据库】文件夹,展开要建立表结构的数据库,右击【表】,选择【新建表】命令,打开表设计器窗口。

第14页:列属性

列属性

  • 选择不同的数据类型会有不同的列属性,常用的列属性说明如下:
    • 【说明】是用来说明该字段的含义。
    • 【默认值或绑定】在表中输入新的记录值时,如果没有给该字段赋值,则默认值就是该字段的值。
    • 【精度】是用来说明该字段数据类型的宽度,即位数。
    • 【小数位数】是用来说明该字段数据类型的小数位数。
    • 【是标识】表示该字段是表中的一个标识列,即新增的字段值为等差数列,其类型必须为数据值数据,有此属性的字段会自动产生一个值,无需用户输入。
    • 【标识种子】等差数列的第一个数字。
    • 【标识增量】等差数列的公差。

第15页:例3:teachDataA中新建

例3:teachDataA中新建

  • 在teachDataA中新建一数据表tchInfo,其表结构如下图所示:

第16页:常用的设置

常用的设置

  • 关键字的设置
    • 右击要设置为关键字的字段左侧(如果要设置一组关键字,则可以用Ctrl选中多个字段),选择“设置关键字”。
  • 自动编号的设置----必须是int类型的数据
    • 在列属性中设置“标识规范”(“是标识”、“标识种子”、“标识增量”)
  • 默认值的设置
    • 在列属性中设置“默认值或绑定”

第17页:数据取值范围的约束、设置为惟一索引

数据取值范围的约束、设置为惟一索引

  • 数据取值范围的约束
    • 右击相应的字段选择“CHECK约束”
  • 设置为惟一索引
    • 右击相应的字段选择“索引/键”

第18页:例4:小黄在建立了数据表TchIn

例4:小黄在建立了数据表TchIn

  • 小黄在建立了数据表TchInfo以后,为了输入数据方便起见,要为其中的性别一栏即字段“sex”设置一个默认值“男”,并且,考虑到信息输入的正确性,他希望字段“sex”的值要么为“男”,要么为“女”,不允许有其它值。问:他应该如何操作?

第19页:步骤1

步骤1

  • 在MicrosoftSQL Server Management Studio的【对象资源管理器】中展开数据库teachingData,右击表dbo.TchInfo,以弹出的快捷菜单中选择【修改】命令,设置字段“Sex”的列属性【默认值或绑定】为:‘男’,如图所示。

第20页:步骤2右击列名“Sex”

步骤2右击列名“Sex”

,在弹出的快捷菜单中选择【CHECK约束】命令,在【CHECK约束】对话框中单【添加】按钮,然后输入表达式:sex=’男’or sex=’女’,如下图所示。

第21页:问题:小黄为了输入方便

问题:小黄为了输入方便

,希望在输入过程中教师编号TID的起始数据库为10000001,以后每输入一个教师,其编号TID自动加1,因此他根据所学知识,在MicrosoftSQL Server Management Studio窗口中的列属性中展开【标识规范】试图修改【(是标识)】的值为“是”,但发现这一栏是灰色的,他无法进行设置,为什么?应该如何操作才能符合他的要求?解决方案:【标识规范】只对整型数据有效,所以小黄应该先将教师编号TID的数据类型设置为int类,然后再展开【标识规范】,修改【(是标识)】值为“是”,【标识种子】为“10000001”、【标识增量】为“1”

第22页:用CREATE TABLE创建表结构

用CREATE TABLE创建表结构

(2)使用命令CREATE TABLE创建表结构创建表结构的语法形式为:CREATE TABLE Table_name(column_name1 data_type [NULL | NOT NULL ][PRIMARY KEY| UNIQUE][FOREIGN KEY [(column_name)]]REFERENCES ref_table[(ref_column)][,column_name2 data_type …]………)其中,Table_name是要创建表的名称,column_name1表示第一个字段的名称,依次类推,data_type用于指定字段的数据类型,NULL或NOT NULL用来限制字段是否允许取空值,PRIMARY KEY设置字段为主键,UNIQUE设置取值的唯一性。

第23页:例5:建立StuInfo表

例5:建立StuInfo表

[例5]在teachingDataB中建立StuInfo表(学生信息表)CREATE TABLE StuInfo(SID char(8) primary key, 将SID设置为主键Sname char(10) NOT NULL, Sname不允许取空值Sex char(2) default '男' check(sex='男' or sex='女'),BirthDay smalldatetime NULL,Dept char(20) NULL,Major char(20) NULL,Class char(10) NULL,Grade char(10) NULL,Sage int )

第24页:例6:建立TchInfo表

例6:建立TchInfo表

[例6]在teachingDataB中建立TchInfo表(教师信息表)CREATE TABLE TchInfo(TID char(8) primary key, 设置主键TName char(10) NOT NULL,Sex char(2) NULL,BirthDay smalldatetime NULL,Title nchar(10) NULL,Dept char(20) NULL)

第25页:例7:建立CourseInfo表

例7:建立CourseInfo表

[例7]在teachingDataB中建立CourseInfo表(选课信息表)CREATE TABLE CourseInfo(CID char(8) primary key,CName char(20) NOT NULL,CCredit tinyint NULL,CProperty char(10) NULL )

第26页:例8:建立ScoreInfo表

例8:建立ScoreInfo表

[例8]在teachingDataB中建立ScoreInfo表(学生成绩表)CREATE TABLE ScoreInfo(CID char(8) NOT NULL, 不允许取空值SID char(8) NOT NULL, 不允许取空值TID char(8) NULL,Score numeric(3, 0) NULL,Schyear char(9) NULL,Term char(1) NULL,FOREIGN KEY(CID) REFERENCES CourseInfo(CID),FOREIGN KEY(SID)REFERENCES StuInfo(SID),FOREIGN KEY(TID)REFERENCES TchInfo(TID),Constraint scoInfo_prim PRIMARY KEY(CID,SID))

第27页:说明:建表的先后顺序

说明:建表的先后顺序

  • (1)在创建ScoreInfo表时,由于要将CID字段关联CourseInfo,因此CourseInfo表必须要存在才行,这就要求在建表时先要创建ScoreInfo表。同样,StuInfo表和TchInfo也要在ScoreInfo表之前创建。
  • (2)将两个字段组合起来作为主键,只能采用表级完整性进行定义。

第28页:表结构的修改与删除

表结构的修改与删除

  • 利用菜单命令实现
  • 使用Transact-SQL语句来实现

第29页:利用菜单命令实现

利用菜单命令实现

(1)利用菜单命令实现表结构的修改和删除步骤1:在Microsoft SQL Server ManagementStudio的“对象资源管理器”窗口中展开相应的数据库和表,右击需要修改的数据表(如StuInfo表),然后选择【修改】命令,打开表设计器窗口。步骤2:在表设计器窗口中,可以直接对已有的字段进行修改,修改列名、数据类型等。也可以右击某个字段,如“Sex”,在属性菜单中,可以选择插入列和删除列,插入列的操作与建表结构时的操作是一样的。步骤3:表中字段修改完成后,单击工具栏上的【保存】按钮,即可完成表结构的修改。

第30页:表的删除方式

表的删除方式

表的删除可以在Microsoft SQL Server ManagementStudio的“对象资源管理器”窗口中展开相应的数据库和表,右击需要删除的数据表,然后选择【删除】命令即可删除相应的数据表。

第31页:用命令语句修改表

用命令语句修改表

(2)用命令语句修改表结构ALTER TABLE Table_nameADD [column_name data_type] [NULL | NOT NULL ][PRIMARY KEY| UNIQUE][FOREIGN KEY [(column_name)]]REFERENCES ref_table[(ref_column)][ DROP [CONSTRAINT] constraint_name | columncolumn_name <完整性约束名> ][ ALTER COLUMN <列名><数据类型> ];虽然从语法格式上来看比较复杂,但实际上该命令语句一次只能修改一个参数。

第32页:例9:向StuInfo表(学生信息表

例9:向StuInfo表(学生信息表

[例9]向StuInfo表(学生信息表)中增加“家庭住址(Saddr)”列,其数据类型为字符型。ALTER TABLE StuInfoADD Saddr varchar(20)不论基本表中原来是否已有数据,新增加的列一律为空值。

第33页:例10:将表StuInfo中的年龄字段

例10:将表StuInfo中的年龄字段

[例10]将表StuInfo中的年龄字段Sage的数据类型由int改为tinyint,设置其默认值为20,并规定年龄必须在10-60之间。ALTER TABLE StuInfoALTER COLUMN Sage tinyintALTER TABLE StuInfoADD CONSTRAINT Defa_age DEFAULT 20 FOR SageALTER TABLE StuInfoADD CONSTRAINT CK_age CHECK(Sage>10 AND Sage<60)

第34页:例11:增加学生姓名必须取唯一值的约束

例11:增加学生姓名必须取唯一值的约束

[例11]增加学生姓名必须取唯一值的约束条件。ALTER TABLE StuInfoADD UNIQUE(Sname)

第35页:例12:删除StuInfo表(学生信息

例12:删除StuInfo表(学生信息

[例12]删除StuInfo表(学生信息表)中属性列“家庭住址(Saddr)”。ALTER TABLE StuInfoDrop column Saddr

第36页:例13:修改表tchInfo结构

例13:修改表tchInfo结构

[例13]修改表tchInfo结构,要求字段TID只能为数字。ALTER TABLE tchInfoADD CONSTRAINT CK_TIDCHECK(TID IN(00,000,000-99,999,999))

第37页:删除表可以使用

删除表可以使用

删除表可以使用DROP TABLE命令来删除表。最简单也是最常用的形式为:DROP TABLE table_name例如,要删除ScoreInfo表,则可以在查询编辑器中输入命令:DROP TABLE ScoreInfo;

第38页:但有时直接删除基本表

但有时直接删除基本表

  • 但有时直接删除基本表,会出现误删的情况,比如,我们已经给这个表建立的索引、视图、触发器等,而它们都还有用,这时我们就不能随意删除基本表。这种情况要用参数RESTRICT或CASCADE来进行处理。完整的语句格式为:DROP TABLE < table_name >[RESTRICT| CASCADE];
    • RESTRICT:删除表是有限制的,它不能被其他表的约束所引用,如果存在依赖该表的对象,则此表不能被删除;
    • CASCADE:删除该表没有限制,在删除基本表的同时,相关的依赖对象一起删除。

第39页:例如

例如

  • 例如,删除ScoreInfo表(含相关的索引、视图、触发器等),则可以在查询编辑器中输入命令:DROP TABLE ScoreInfo CASCADE;

第40页:删除字段命令格式

删除字段命令格式

ALTER TABLE table_nameDROP COLUMN column_name

第41页:例14:删除字段grade

例14:删除字段grade

[例14]删除表StuInfo中的字段grade,其命令语句如下:ALTER TABLE StuInfoDROP COLUMN grade

第42页:数据表内容的增加与修改

数据表内容的增加与修改

  • 表数据的操作主要有三种:
    • 插入数据
    • 修改数据
    • 删除数据

第43页:插入数据

插入数据

  • 使用菜单命令来完成
  • 用Transact-SQL的标准命令INSERT语句来完成

第44页:表数据的添加方式

表数据的添加方式

  • 使用Microsoft SQL Server Management Studio可以在“对象资源管理器”中右击需要添加数据的表选择“打开表”命令,然后直接在表中输入数据。

第45页:插入数据命令

插入数据命令

格式
INSERT INTO [(column_list)] VALUES(data_values)
功能
将新元组插入到指定表中。对于INTO子句中没有出现的属性列,新记录在这些列上将取空值。

第46页:例15:将一个课程信息元组(课程号

例15:将一个课程信息元组(课程号

[例15]将一个课程信息元组(课程号:00000001;课程名:高等数学;学分:3;课程类别:基础课)插入到CourseInfo表中。可以使用下面的语句来实现:INSERT INTO CourseInfo (CID,CName,CCredit,CProperty)VALUES ('00000001','高等数学',3,'基础课') 或:INSERT INTO CourseInfo (CID,CName,CProperty,CCredit)VALUES ('00000001','高等数学','基础课',3)或:INSERT INTO CourseInfoVALUES ('00000001','高等数学',3,'基础课')

第47页:如果要想向表中插入成批数据

如果要想向表中插入成批数据

如果要想向表中插入成批数据,用INSERT-VALUES来解决显然是极为不方便的。在这种情况下用INSERT-SELECT语句就非常有效。它可以将一个或一组表中的数据插入到另外一个表中。插入子查询结果的语句格式:INSERT INTO  [(column_list)] SELECT sub-sentence 说明:(1) INTO子句与插入元组时的要求类似;(2)SELECT子句目标列必须与INTO子句匹配,即值的个数和值的类型均要求一致。

第48页:例16:对每一个系

例16:对每一个系

[例16]对每一个系,求学生的平均年龄,并把结果存入数据库。第一步:在teachingDataB数据库中建一个新表,其中一列用于保存学年信息,另一列用于保存相应学年的学生平均成绩。CREATE TABLE Schyear_Score(Schyear CHAR(9),Avg_Score SMALLINT);第二步:对ScoreInfo表按Schyear分组,把学年和学生的平均成绩成绩插入到新表Schyear_Score中。INSERT INTO Schyear_Score(Schyear,Avg_score)SELECT Schyear,AVG(Score) FROM ScoreInfoGROUP BY Schyear

第49页:修改数据(UPDATE)格式

修改数据(UPDATE)格式

2、修改数据格式:UPDATE <table_name>SET <column1_name>=<new_value1>[,<column2_name>=<new_value2>,…]…[WHERE <conditions>];功能:修改指定table_name表中满足WHERE子句条件的记录。说明:SET子句用于指定要修改的列或变量名称的列表,<column_name>用于指定要更改的列的名称。<new_value>是修改后指定列的新值,它可以是一个常量,也可以是一个表达式或其他表中的数据。

第50页:例17:将高等数学的学分改为5分

例17:将高等数学的学分改为5分

[例17]将高等数学的学分改为5分。UPDATE CourseInfoSET CCredit =5WHERE CName ='高等数学';

第51页:例18:将所有课程的学分增加1分

例18:将所有课程的学分增加1分

[例18]将所有课程的学分增加1分。UPDATE CourseInfoSET CCredit = CCredit+1

第52页:把所有男生的成绩加5分

把所有男生的成绩加5分

把所有男生的成绩加5分。UPDATE ScoreInfoSET Score = Score+5WHERE '男'=(SELECT Sex FROM StuInfoWHERE StuInfo.SID =ScoreInfo.SID);

第53页:删除数据格式

删除数据格式

3、删除数据格式:DELETE FROM [WHERE ];功能:删除指定表中满足WHERE子句条件的所有元组。如果省略WHERE子句,表示删除表中的全部元组,但表的结构仍然存在。即DELETE只能删除表中的数据。

第54页:例19:删除表TchInfo中工号

例19:删除表TchInfo中工号

[例19]删除表TchInfo中工号为10040002的教师的记录。DELETE FROM TchInfoWHERE TID='10040002';

第55页:例20:删除表ScoreInfo

例20:删除表ScoreInfo

[例20]删除表ScoreInfo中所有的学生成绩的记录。DELETE FROM ScoreInfo;

第56页:删除表

删除表

删除表ScoreInfo中所有男生的成绩记录。DELETE FROM ScoreInfoWHERE '男'=(SELECT Sex FROM StuInfoWHERE StuInfo.SID =ScoreInfo.SID);

第57页:小结:数据表结构的创建

小结:数据表结构的创建

小结 数据表结构的创建 CREATE TABLE 数据表结构的修改 ALTER TABLE 记录的添加 INSERT INTO-VALUES INSERT INTO-SELECT 记录的修改 UPDATA 记录的删除 DELETE 建立索引的常用命令格式为: CREATE [UNIQUE] [CLUSTERED] INDEX

第58页:上机实验

上机实验

  • 完成PPT中的所有例题。
顶部目录