一、约束条件
为了确保数据的完整性,可以给列加上约束条件
完整性的分类:
- 1、实体完整性
- 2、域完整性
- 3、引用完整性
1)实体完整性(行)
实体:即表中的一行记录,代表一个实体
实体完整性的作用:表示每一行数据不重复
约束类型:
A、主键约束(primary key)
- 每个表中要有一个主键(可以是一列,也可以是多列组成)
- 数据唯一,且不能为null
- 第一种添加方式:在创建表的同时,直接添加主键约束 : 列名1 列值1 primary key,
- 第二种添加方式: 后期补充主键约束 : alter table 表名 add primary key(列名1);
- 联合主键(两个或两个以上的主键):
- create table 表名(
列名1 列值1,
列名2 列值2,
....
列名n 列值n,
primary key(列名1,列名2);
) - 删除主键约束:alter table 表名 drop primary key;
B、唯一约束(unique)
- 数据不能重复,值可以为null
- 第一种添加方式: 列名2 列值2 unique,
- 第二种添加方式 : alter table 表名 add unique(列名);
C、自动增长列(atuo_increment)
- 设置自动增长的时候,列只能是整形
- 当有行被删除的时候,自增会继续自增,在删除行的基础上+1
- mysql --> auto_increment
- sqlserver --> idenitiy
- oracle --> sequence
2)域完整性(列)
域完整性的作用: 限制此单元格的数据正确,不对照此列的其他单元格
1、数据类型约束:MySQL中的常用数据类型:
int 整型
float 浮点型 double 浮点型
float(5,2) 表示最多可5位 其中 必须有2位是小数 999.99
decimal 用来存储工资 从MySQL 5.1之后才有
char 固定长度的字符串类型 char(10) 'aaa '占10位
varchar 可变长度字符串类型 varchar(10) 'aaa' 占3位
text 字符串类型 超长
blob 字节类型
date 日期类型 格式为 yyyy-MM-dd
time 时间类型 格式为 HH:mm:ss
timestamp 时间戳类型 yyyy-MM-dd HH:mm:ss 会自动赋值 会自动赋值当前时间
datetime 时期类型yyyy-MM-dd HH:mm:ss
2、非空约束:
定义时直接添加:列名2 列值2 约束 not null
后期添加: alter table 表名 modify 字段名 字段类型 not null
3、默认值约束:
定义时直接添加 : 列名2 列值2 约束 default 默认值
后期追加 : alter table 表名 alter 列名 set default 默认值;,
3)引用完整性
外键约束 foreign key 用来约束表与表之间的关系 ,外键一定是在从表中创建,从而找到与主表之间的关系
外键必须要满足的条件:
- 至少涉及到两张表
- 建立外键关系,对应列具有相似的数据类型
- 必须建立索引,主键和外键
注意:外键时可以重复的,也可以有空值
创建外键的两种方式:
1、在创建的表的时候 ,添加外键
- constraint 外键关系名 foreign key ( 从表字段) references 主表名(主表字段)
- constraint 外键关系名: 可以不写,就是一个外键约束的名字,如果不写,系统自动给
- foreign key(从表字段) : 将从表中的字段作为外键
- references 主表名 (主表字段) :映射到主表的字段
2、表已经创建,后期追加
- alter table 主表 add primary key(主表列名);
- alter table 从表 add foreign key(从表列名) references 主表(主表列名)
注意:
1、 在从表中添加数据时,外键关联列中存储的数据,必须是主表中存在的数据
2、想要删除主表中,正在被从表使用的行,必须先删除从表,再删除主表
删除外键关联 : alter table 表名 drop foreign key 外键关系名