02.SQL Server(表创建及约束)
在使用数据库的过程中,接触最多的就是数据库中的表,表中存放了数据库中的所有数据,所以表是SQL Server数据库系统的基本信息存储结构,也是数据库中你那个最重要的部分,管理好表自然就管理好了数据库。
1.数据表概述
数据表是数据库最重要的组成部分之一。数据库只是一个框架,数据表才是其实质内容,所有数据存储在数据表中。根据信息的分类情况,一个数据库中可能包含若干个数据表 。
在创建数据表的过程中,因为要定义表中的字段,需要为字段选定数据类型,下面介绍SQL Server 2008 R2 常用的基本类型。
2.SQL基本数据类型
分类 | 备注和说明 | 数据类型 | 说明 |
二进制数据类型 | 存储非子符和文本的数据 | Image | 可用来存储图像 |
文本数据类型 | 字符数据包括任意字母、符号或数字字符的组合 | Char | 固定长度的非 Unicode 字符数据 |
Varchar | 可变长度非 Unicode 数据 | ||
Nchar | 固定长度的 Unicode 数据 | ||
Nvarchar | 可变长度 Unicode 数据 | ||
Text | 存储长文本信息 | ||
Ntext | 存储可变长度的长文本 | ||
日期和时间 | 日期和时间在单引号内输入 | Datetime | 日期和时间 |
数字数据 | 该数据仅包含数字,包括正数、负数以及分数 | int smallint | 整数 |
float real | 数字 | ||
货币数据类型 | 用于十进制货币值 | Money | |
Bit数据类型 | 表示是/否的数据 | Bit | 存储布尔数据类型 |
3.数据表创建
通过sql结构化查询语言创建数据表有2种方式,(1)对象资源管理器(2)脚本方式
3.1 使用对象资源管理器创建表
3.2 使用脚本方式创建表
create table tb_表名
(
属性名 数据类型[(长度)],
属性名 数据类型[(长度)],
属性名 数据类型[(长度)]
)
/*创建学生信息表*/
create table tb_student
(
sid int,
sname varchar(20),
ssex char(2),
sage int
)
4.SQL约束
约束(constraint)是Microsoft SQL Server 提供的自动保持数据库完整性的一种方法,定义了可输入表或表的单个列中的数据的限制条件。
在SQL Server 中有6 种约束:主键约束(Primary Key )、外键约束(Foreign Key )、唯一性约束(Unique )、检查约束(Check )和缺省约束(Default Constraint)和非空约束(not null)。
4.1 主键约束 primary key
主键约束唯一标识数据库表中的每条记录。主键必须包含唯一的值。主键列不能包含 NULL 值。每个表都应该有一个主键,并且每个表只能有一个主键。
create table tb_表名
(
属性 数据类型[(长度)] primary key
)
4.2 外键约束 foreign key references
外键是用于建立或加强两个表数据之间的链接的一列或多列。通过将表中主键值的一列或多列添加到另一个表中,可创建两个表之间的连接,这个列就成为第二个表的外键。
外键约束的目的是控制存储在外表中的数据,同时可以控制对主键表中数据的修改
create table tb_表名1
(
属性1 数据类型[(长度)] primary key,
属性2 数据类型[(长度)]
)
create table tb_表名2
(
属性1 数据类型[(长度)] foreign key references tb_表名1(属性),
属性2 数据类型[(长度)]
)
4.3 唯一性约束 unique
唯一约束确保表中的一列数据没有相同的值。与主键约束类似,唯一约束也强制唯一性,但唯一约束用于非主键的一列或者多列的组合,且一个表可以定义多个唯一约束。
create table tb_表名1
(
属性1 数据类型[(长度)] primary key,
属性2 数据类型[(长度)] unique
)
4.4 检查约束 check
检查约束用于限制列中的值的范围。如果对单个字段(列)而言定义"检查约束",那么该列只允许特定的值。如果对一个表定义 检查 约束,那么此约束会在特定的列中对值进行限制。
create table tb_表名1
(
属性1 数据类型[(长度)] primary key,
属性2 数据类型[(长度)] check ( 属性2 = '' or 属性2 = '')
)
4.5 默认约束 default
在表中如果定义了默认值约束,那么用户在插入新的数据行时,如果该行没有指定数据,那么系统将默认值赋给该列,如果我们不设置默认值,系统默认为null。
create table tb_表名1
(
属性1 数据类型[(长度)] primary key,
属性2 数据类型[(长度)] default '默认值'
)
4.6 非空约束 not null
非空约束指字段的值不能为空。 对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统就会报错。
create table tb_表名1
(
属性1 数据类型[(长度)] primary key,
属性2 数据类型[(长度)] not null
)
5.表创建经典案例
--学生信息表
create table tb_student
(
sid int primary key,--学号
sname varchar(50) not null,--姓名
ssex char(2) check(ssex = '男' or ssex = '女'),--性别
sage int not null,
saddress varchar(100) default '湖南省长沙市',--地址
sidentityCard varchar(20) unique,--身份证号码
)
--成绩表
create table tb_score
(
sid int foreign key references tb_student(sid),--外键
degree int
)
6.拓展
--修改表的结构
--修改字段类型
alter table 表名称
alter column 字段名 类型 约束;
--添加或者删除列
alter table 表名称
add 字段名 类型 约束
alter table 表名称
drop column 字段名
--添加或删除约束
非空:
alter table 表名称
alter column 字段名 类型 约束;
--其他
alter table 表名称
add constraint 约束名称(字段名)