1.43k likes | 1.63k Views
第 6 章 表的创建与管理. 6.1 数据类型 6.2 表的创建 6.3 表结构的修改 6.4 表的重命名与删除 6.5 向表中添加、更新、删除数据 6.6 数据完整性的概念与实施方法. 上一章. 返回目录. 教学过程:. 1. 表的概念:表是数据库的数据对象,用于存储和操作数据的一种逻辑结构,是一系列列的集合。 2. 表的构成:表由表头和若干行数据构成。 3. 表的特性:表中每一行代表一个惟一的记录,每列代表一个域。. 例 1 :. 表名. 学生成绩表. 表头. 行. 数据. 列.
E N D
第6章 表的创建与管理 • 6.1 数据类型 • 6.2 表的创建 • 6.3 表结构的修改 • 6.4 表的重命名与删除 • 6.5 向表中添加、更新、删除数据 • 6.6 数据完整性的概念与实施方法 上一章 返回目录
教学过程: • 1.表的概念:表是数据库的数据对象,用于存储和操作数据的一种逻辑结构,是一系列列的集合。 • 2.表的构成:表由表头和若干行数据构成。 • 3.表的特性:表中每一行代表一个惟一的记录,每列代表一个域。
例1: 表名 学生成绩表 表头 行 数据 列
4.对表的操作: • 填表:将数据写入表中。 • 修改:改正表中的数据信息。 • 删除:删除表中记录信息。 • 查询:在表中按某些条件查找记录信息。 • 5.注意: • 在SQL Server2005中,每个数据库最多可存储20亿个表,每个表可以有1024列,每行最多可以存储8060字节。 • SQL Server中表分为:永久表和临时表。其中永久表在创建后,除非用户删除否则将一直存放在数据库文件中;而临时表则会在用户退出或进行系统修复时被自动删除。
6.数据类型: • (1)相关概念: • 概念:定义每个列所能存放的数据值和存储格式。 • 精度:指数值数据中所存储的十进制数据的总位数。例如:tinyint类型可以表示范围是0-255,其精度为3。 • 小数位数:指数值数据中小数点右边可以有的数字位数的最大值。例:89.658,其精度为5,小数位数为3。 • 长度:存储数据所用的字节数。例:tinyint所用长度为1字节。 • (2)种类:系统数据类型和用户自定义数据类型。 SQL Server2005中列的数据类型既可以是系统数据类型也可以是用户自定义数据类型。
6.1 数据类型 • 6.1.1 系统数据类型 • 6.1.2 自定义数据类型
6.1.1 系统数据类型 • 1. 整型数据类型 • 2. 浮点数据类型 • 3. 字符数据类型 • 4. 日期和时间数据类型 • 5. 文本和图形数据类型 • 6. 货币数据类型 • 7. 位数据类型 • 8. 二进制数据类型 • 9. 特殊数据类型 • 10. 新增数据类型
1. 整型数据类型 • 整型数据类型是最常用的数据类型之一,它主要用来存储数值,可以直接进行数据运算,而不必使用函数转换。 • int(integer):int(或integer)数据类型可以存储从-231(-2,147,483,648)到231-1(2,147,483,647)范围之间的所有正负整数。 • Smallint:可以存储从-215(-32,768)到215-1范围之间的所有正负整数 。 • Tinyint:可以存储从0到255范围之间的所有正整数。
2. 浮点数据类型 • 浮点数据类型用于存储十进制小数。浮点数值的数据在SQL Server中采用只入不舍的方式进行存储 。 • Real:可以存储正的或者负的十进制数值,最大可以有7位精确位数。 • Float:可以精确到第15位小数,其范围从-1.79E-308到1.79E+308。 • Decimal和numeric:Decimal数据类型和numeric数据类型完全相同,它们可以提供小数所需要的实际存储空间,但也有一定的限制,可以用2到17个字节来存储从-1038-1到1038-1之间的数值。
3. 字符数据类型 • 字符数据类型可以用来存储各种字母、数字符号和特殊符号。 • Char:其定义形式为char(n),每个字符和符号占用一个字节的存储空间。 • Varchar:其定义形式为varchar(n)。用char数据类型可以存储长达255个字符的可变长度字符串 。 • Nchar:其定义形式为nchar(n)。 • Nvarchar:其定义形式为nvarchar(n)。
4. 日期和时间数据类型 • Datetime:用于存储日期和时间的结合体 。它可以存储从公元1753年1月1日零时起到公元9999年12月31日23时59分59秒之间的所有日期和时间 。 • Smalldatetime:与datetime数据类型类似,但其日期时间范围较小,它存储从1900年1月1日到2079年6月6日内的日期。
5. 文本和图形数据类型 • Text:用于存储大量文本数据,其容量理论上为1到231-1(2,147,483,647)个字节,但实际应用时要根据硬盘的存储空间而定。 • Ntext:与text数据类型类似,存储在其中的数据通常是直接能输出到显示设备上的字符,显示设备可以是显示器、窗口或者打印机。 • Image:用于存储照片、目录图片或者图画,其理论容量为231-1(2,147,483,647)个字节。
6. 货币数据类型 • Money:用于存储货币值,存储在money数据类型中的数值以一个正数部分和一个小数部分存储在两个4字节的整型值中,存储范围为-922337213685477.5808到922337213685477.5808,精度为货币单位的万分之一。 • Smallmoney:与money数据类型类似,但其存储的货币值范围比money数据类型小,其存储范围为-214748.3468到214748.3467。
7. 位数据类型 • Bit:称为位数据类型,其数据有两种取值:0和1,长度为1字节。
8. 二进制数据类型 • Binary:其定义形式为binary(n),数据的存储长度是固定的,即n+4字节,当输入的二进制数据长度小于n时,余下部分填充0。 • Varbinary:其定义形式为varbinary(n),数据的存储长度是变化的,它为实际所输入数据的长度加上4字节。其它含义同binary。
9. 特殊数据类型 • Timestamp:亦称时间戳数据类型,它提供数据库范围内的唯一值,反应数据库中数据修改的相对顺序,相当于一个单调上升的计数器。Uniqueidentifier:用于存储一个16字节长的二进制数据类型,它是SQL Server根据计算机网络适配器地址和CPU时钟产生的唯一号码而生成的全局唯一标识符代码(Globally Unique Identifier,简写为GUID)。
10. 新增数据类型 • Bigint:用于存储从-263(-9,223,372,036,854,775,807)到263-1(9,223,372,036,854,775,807)之间的所有正负整数。 • sql_variant:用于存储除文本、图形数据和timestamp类型数据外的其它任何合法的SQL Server数据。 • table:用于存储对表或者视图处理后的结果集。这种新的数据类型使得变量可以存储一个表,从而使函数或过程返回查询结果更加方便、快捷。
6.1.2 自定义数据类型 • 创建用户定义类型要提供三个参数:名称、系统数据类型、是否允许为空。 • 创建方法: • 1. 使用企业管理器(Enterprise Manager)创建用户自定义数据类型。
2. 利用系统存储过程创建用户自定义数据类型 。 • 系统存储过程sp_addtype为用户提供了T_SQL语句创建自定义数据类型的途径,其语法形式如下: • sp_addtype [@typename=] type, • [@phystype=] system_data_type • [, [@nulltype=] ‘null_type’] • [, [@owner=] ‘owner_name’]
使用Tranact-SQL创建用户定义数据类型: 格式:sp_addtype 类型名, ‘系统数据类型’ [,是否为空] 例: sp_addtype wx , 'int' , 'not null' • 使用Tranact-SQL删除用户定义数据类型: 格式:sp_droptype 类型名 例: sp_addtype wx
例子6-1:自定义一个地址数据类型。 • exec sp_addtype address, ‘varchar(80)’, ‘not null’ • 其运行结果如下: • (1 row(s) affected) • type added.
例子6-2:删除自定义的生日数据类型。 • exec sp_droptype birthday • 其运行结果如下: • (1 row(s) affected) • (0 row(s) affected) • Type has been dropped.
例:在XK数据库中创建一个名为TEL(电话号码)的用户自定义数据类型,定义为VARCHAR数据类型,长度为3,且不能为NULL例:在XK数据库中创建一个名为TEL(电话号码)的用户自定义数据类型,定义为VARCHAR数据类型,长度为3,且不能为NULL • USE Xk • GO • EXEC sp_addtype Tel,'VARCHAR(30)','NOT NULL' • GO
例:删除刚建立的用户自定义数据类型 • USE Xk • GO • EXEC sp_droptype Tel • GO
6.2 表的创建 • 在SQL Server 2005中,每个数据库中最多可以创建200万个表,用户创建数据库表时,最多可以定义1024列,也就是可以定义1024个字段。 • SQL Server 2005提供了两种方法创建数据库表,第一种方法是利用企业管理器(Enterprise Manager)创建表;另一种方法是利用Transact-SQL语句中的create命令创建表。
1. 利用Enterprise Manager创建表 • 在Enterprise Manager中,展开指定的服务器和数据库,打开想要创建新表的数据库,用右键单击表对象,从弹出的快捷菜单中选择新建表选项,或者在工具栏中选择图标,就会出现新建表对话框,在该对话框中,可以定义列的以下属性:列名称、数据类型、长度、精度、小数位数、是否允许为空、缺省值、标识列、标识列的初始值、标识列的增量值和是否有行的标识。 然后根据提示进行设置。
2. 利用create命令创建表 • 其语法形式如下: • CREATE TABLE[ database_name.[ owner ] .| owner.] table_name( { < column_definition >| column_name AS computed_column_expression| • < table_constraint >} [,…n])[ ON { filegroup | DEFAULT } ]
创建表的各参数的说明如下: • database_name:用于指定在其中创建表的数据库名称。 • owner:用于指定新建表的所有者的用户名 。 • table_name:用于指定新建的表的名称。 • column_name:用于指定新建表的列的名称。 • computed_column_expression:用于指定计算列的列值的表达式。 • ON {filegroup | DEFAULT}:用于指定存储表的文件组名。 • TEXTIMAGE_ON:用于指定 text、ntext 和 image 列的数据存储的文件组。 • data_type:用于指定列的数据类型 。 • DEFAULT:用于指定列的缺省值。
constant_expression:用于指定列的缺省值的常量表达式 。 • IDENTITY:用于指定列为标识列。 • Seed:用于指定标识列的初始值。 • Increment:用于指定标识列的增量值。 • NOT FOR REPLICATION:用于指定列的IDENTITY属性在把从其它表中复制的数据插入到表中时不发生作用,即不足的生成列值,使得复制的数据行保持原来的列值。 • ROWGUIDCOL:用于指定列为全球唯一鉴别行号列 。 • COLLATE:用于指定表使用的校验方式。 • column_constraint和table_constraint:用于指定列约束和表约束。
例子6-3:创建了一个雇员信息表 • 其SQL语句的程序清单如下: • CREATE TABLE employee • ( number int not null, • name varchar(20) NOT NULL, • sex char(2) NULL, • birthday datetime null, • hire_date datetime NOT NULL • DEFAULT (getdate()), • professional_title varchar(10) null, • salary money null, • memo ntext null • )
例子6-4 • USE Xk • GO • --创建班级信息表Class • CREATE TABLE Class • ( • ClassNo char (8) NOT NULL, • DepartNo char (2) NOT NULL, • ClassName char (20) NOT NULL • ) • GO
--创建学生信息表Student • CREATE TABLE Student • ( • StuNo char (8) NOT NULL, • ClassNo char (8) NOT NULL, • StuName char (8) NOT NULL, • Pwd char (8) NOT NULL • ) • GO
--创建学生选课表StuCou • CREATE TABLE StuCou • ( • StuNo char (8) NOT NULL , • CouNo char (3) NOT NULL , • WillOrder smallint NOT NULL , • State char (4) NOT NULL , • RandomNum varchar (50) NULL • ) • GO
6.3 表结构的修改 6.3.1 使用T-SQL的ALTER TABLE 语句修改表 ALTER TABLE [ [ database_name . ] owner.]table_name [ WITH NOCHECK ] ADD { [ column_name datatype [ column_constraints ] | [ [ , ] table_constraint ] ] } [, [ { next_col_name | next_table_constraint } ] …] } | DROP [ CONSTRAINT ] constraint_name| COLUMN column}[,…n ]
其中: • ldatabase_name:将要修改的表所在的数据库。 • owner:表对象的所有者。 • table_name:将要修改的表的名称。 • WITH NOCHECK:允许check或者foreign key约束加到一个表,而不验证现有的数据是否违反约束。若没有指定这个选项,增加的任何约束都要对现有数据进行检查,如果有任何约束违反,ALTER TABLE语句将被终止。 • ADD:在现有表中增加一个新的数据项或一个约束。 • column_name:增加的字段名称。 • datatype:新增字段的数据类型。 • DROP:删除现有表中的一个字段或约束。 • CONSTRAINT:删除数据库中的约束。 • COLUMN:指定删除数据库中的列。
例子6-5:创建了一个雇员信息表 • 其SQL语句的程序清单如下: • create table employees( • id char(8) primary key • name char(20) not null, • department char(20) null, • memo char(30) null • age int null, • ) • alter table employees • add salary int null • drop column age • alter column memo varchar(200) null
例子6-6 为XK数据库中的CLASS表创建基于CLASSNO,列名为PK_CLASS的主键,再将其删除 • USE Xk • GO • --增加主键约束 • ALTER TABLE Class • ADD CONSTRAINT PK_Class • PRIMARY KEY CLUSTERED • (ClassNo) • GO • --删除主键约束 • ALTER TABLE Class • DROP CONSTRAINT PK_Class • GO
6.3.2 使用SQL Server 企业管理器修改表 • 利用企业管理器增加、删除和修改字段 。在企业管理器中,打开指定的服务器中要修改表的数据库,用右键单击要进行修改的表,从弹出的快捷菜单中选择设计表选项,则会出现设计表对话框,在该对话框中,可以利用图形化工具完成增加、删除和修改字段的操作。
例子6-7 修改XK数据库中的表STUDENT将STUNO设置为主键
6.4 表的重命名与删除 • 重命名: • 1.使用T-SQL语言进行 • 例: • USE Xk • Go • EXEC sp_rename 'Depart', 'Department' • GO • 2.使用企业管理器
删除表 • 1. 利用企业管理器删除表 • 在企业管理器中,展开指定的数据库和表格项,用右键单击要删除的表,从快捷菜单中选择“除去表”选项,则会出现除去对象对话框。单击“全部删除”按钮,即可删除表。 • 2. 利用DROP TABLE语句删除表 • DROP TABLE语句可以删除一个表和表中的数据及其与表有关的所有索引、触发器、约束、许可对象。DROP TABLE语句的语法形式如下: • DROP TABLE table_name
例子6-8 删除数据库XK中的表CLASS • USE Xk • Go • DROP TABLE Class • GO
6.5 表的数据操作 • 6.5.1 向表中插入数据 • 在企业管理器中向表中插入数据 • 用INSERT语句向表中插入数据 • INSERT [ INTO]{ table_name WITH ( < table_hint_limited > [ ...n ] )| view_name| rowset_function_limited} • {[ ( column_list ) ] { VALUES( { DEFAULT | NULL | expression } [ ,...n] )| derived_table| execute_statement} }
其中: lINTO:一个可选的关键字,可以将它用在 INSERT 和目标表之间。 ltable_name:将要接收数据的表或 table 变量的名称。lWITH (<table_hint_limited> [...n]):指定目标表所允许的一个或多个表提示。需要有 WITH 关键字和圆括号。不允许有 READPAST、NOLOCK 和 READUNCOMMITTED。 lview_name:视图的名称及可选的别名。通过 view_name 来引用的视图必须是可更新的。由 INSERT 语句所做的修改不能影响视图的 FROM 子句中引用的多个基表。例如,在多表视图中的 INSERT 必须使用 column_list,column_list 是指引用来自一个基表的列。 lrowset_function_limited:是 OPENQUERY 或 OPENROWSET 函数。 lcolumn_list:要在其中插入数据的一列或多列的列表。必须用圆括号将 column_list 括起来,并且用逗号进行分隔。