第3章数据库中表的管理
3.1 数据类型
(1)整数类型
数据类型可分为tinyint、smallint、int和bigint四种,各类型的范围如下表:
其中,int数据类型是SQL Server 2005中的主要整数数据类型。
(2)bit类型
可以取值为1、0或NULL的整数数据类型。
字符串值TRUE可以转换为1,字符串值FALSE可以转换为0
(3)decimal和numeric类型
带固定精度和小数位数的数值数据类型。
格式:decimal(p,s)或者缩写为dec(p,s)、numeric(p,s).其中p是精度(即最多可以存储的十进制数字的总位数,包括小数点左边和右边的位数),s是小数位数。
(4)float
浮点型数据类型。
(5)datatime和smalldatatime
用于表示某天的日期和时间的数据类型。
(6)char和verchar
字符数据类型。
char ( n ) 固定长度,非Unicode 字符数据,长度为n 个字节。
n 的取值范围为 1 至8,000,存储大小是n 个字节。
varchar ( n | max )
可变长度,非Unicode 字符数据。
n 的取值范围为 1 至8000。
max 指示最大存储大小是231-1 个字节。
(7)nchar 和nverchar
字符数据类型。
nchar ( n ) 固定长度,Unicode 字符数据, 长度为2*n 个
字节。
n 的取值范围为 1 至4,000,存储大小是n 个字节。
varchar ( n | max ) 可变长度,Unicode 字符数据。
n 的取值范围为 1 至4,000。
max 指示最大存储大小是231-1 个字节。
3.2 创建表
(1)使用Management Studio创建表
(2)利用SQL语句创建表
使用create命令创建表非常灵活,它允许对表设置几种不同的选项,包括表名、存放位置和列的属性等。
其完整语法形式如下:
CREATE TABLE表名
(<列定义>|列名AS 计算机列表达式|
<表级约束>[,…n])
[ON 文件组名|DEFAULT ]
[TEXTIMAGE_ON 文件组名|DEFAULT ]
其中,列定义的写法如下:
列名列的数据类型
[COLLATE 列的排序规则]
[[DEFAULT 默认值]|[IDENTITY[(基数,增量)
[NOT FOR REPLICATION]]]]
[ROWGUIDCOL]
[<列级约束>][...n]
①基本的格式
create table 表名(列名数据类型,……,列名数据类型)
例如:以下代码建立一个QQ表,包括Q号,网名两列:
CREATE TABLE QQ
(
Q号int,
网名char(8)
)
②主键约束
create table 表名(列名数据类型,……, 列名数据类型,primary key (列名)) 例如:以下代码建立一个SC学习选课表,定义SNO学生学号,CNO课程编号共同组成SC的主键:
CREATE TABLE SC
(
SNO CHAR(5) NOT NULL,
CNO CHAR(5) NOT NULL,
SCORE NUMERIC(3),
PRIMARY KEY(SNO,CNO)
)
③外键约束
create table 表名(列名数据类型,……, 列名数据类型,foreign key (列名) references 参照表名(参照列名))
例如:以下代码建立一个SC表,定义SNO,CNO为SC的外部键。
CREATE TABLE SC
(
SNO CHAR(5) NOT NULL
FOREIGN KEY REFERENCES S(SNO),
CNO CHAR(5) NOT NULL,
FOREIGN KEY REFERENCES C(CNO),
SCORE NUMERIC(3),
PRIMARY KEY (SNO,CNO)
)
④唯一性约束
create table 表名(列名数据类型,……, 列名数据类型,unique(列名)) 例如:以下代码创建一个学生信息表,其中name字段具有惟一性。
Create table student
(
id char(8),
name char(10),
sex char(2),
primary key(id),
unique(name)
)
⑤空值约束
create table 表名(列名数据类型NOT NULL,……,列名数据类型)
以下代码建立一个S表,对SNO字段进行NOT NULL约束。
CREATE TABLE S
(
SNO CHAR(10) NOT NULL,
SN CHAR(20),
AGE INT,
SEX CHAR(2) DEFAULT ’男’ ,
DEPT CHAR(20)
)
⑥检查约束
create table 表名(列名数据类型,……, 列名数据类型,check (用于检查的表达式))
例如:以下代码建立一个SC表,定义SCORE 的取值范围为0到100之间。
CREATE TABLE SC
(
SNO CHAR(5),
CNO CHAR(5),
SCORE NUMERIC(5,1) CONSTRAINT SCORE_CHK CHECK(SCORE>=0 AND SCORE <=100)
)
⑦默认约束
创建默认约束的语法形式如下:
create table 表名(列名数据类型,……, 列名数据类型,default 约束表
达式FOR 列名)
例如:以下代码为dept字段创建默认约束,使其默认值是“计算机”。
CREATE TABLE S
(
SNO CHAR(10) NOT NULL,
SN CHAR(20),
AGE INT,
SEX CHAR(2) DEFAULT ’男’ ,
dept CHAR(20),
default ‘计算机’ for dept
)
⑧identity(x,y)
用于将列指定为标识列,x表示基数,y表示增量。
例如:以下代码指定SNO列自动增长,从100开始
CREATE TABLE S1
(
SNO int identity(100,1),
SN CHAR(20),
)
3.3 修改表结构
1.修改列属性
修改列属性包括以下一些内容:
(1)修改列的数据类型
(2)修改列的数据长度
(3)修改列的精度
(4)修改列的小数位数
(5)修改列的为空性
修改列的属性语法如下:
alter table 表名alter column 列名列修改项
例如:以下代码创建表t1,然后将其列b从char(10)修改为char(20): Create table t1
(
a int,
b char(10)
)
Go
alter table t1 alter column b char(20)
go
2.添加和删除列
1)添加列
alter table 表名add 列名数据类型[约束]
例如,以下代码将列C,类型为datetime,加入到上个例子的表t1中:Alter table t1 add c datetime
2)删除列
删除列的语法如下:
Alter table 表名Drop column列名
以下代码删除上例中添加的列C:
Alter table t1 drop column C
具有下列特征的列不能被删除:
①用于索引
②用于check、foreign key、unique、primary key 约束;
③Default 默认值
④绑定到规则
3..增加、修改和删除约束
1)增加约束
增加约束的语法如下:
Alter table 表名Add constraint 约束名表级约束
以下代码,向表t1的列a增加唯一性约束:
Alter table t1 add constraint aa unique(a)
2)修改约束
修改约束,可以先“删除约束”再“增加新约束”。
3)删除约束
Alter table 表名drop constraint 约束名
以下代码删除表t1中列a的唯一性约束:
Alter table t1 drop constraint aa
3.4 删除表
1.利用管理器平台删除表
在SQL Server管理器平台中,展开指定的数据库和表,右击要删除的表,从弹出的快捷菜单中选择“删除”选项,则出现删除对话框,点击确定即可。
2.利用SQL语句删除表
语法形式如下:
Drop table 表名
注明:①如果要删除的表不在当前数据库中,则在表名中指明其所属的数据库和用户名。
例如以下是删除company数据库中的表employee:
Drop table company.dbo.employee
②在删除一个表之前,要先删除与此表相关联的表中的外部关键字约束。