表约束和表设计
一 . 表约束
1.约束类型
NOT NULL | 非空约束 ,指定某列不能存在NULL值 |
---|---|
UNIQUE | 唯一约束,保证某列的每行只能有唯一的值 |
PRIMARY KEY | 主键约束,一张表只能创建一个主键,但主键可以是一列(一个字段)也可以是多列(多个字段) 优点:快速查找表中的特定数据 |
FOREIGN KEY | 外键约束,和主键相对应,保证一个表中的数据匹配另一个表中的值的参照完整性 |
CHECK | 检查约束,保证列中的值符合指定的条件 |
AUTO_INCREMENT | 自增约束,此字段会自己增加存储数值,默认值从1开始 ,每次递增1. |
DEAFAULT | 默认值约束,规定没有给列赋值时的默认值 |
1.1非空约束
create table table_name(id int not null, ,);
字段名 字段类型 约束…
1.2 唯一约束(不重复)
字段名 字段类型 unique;
一张表中可以有多个唯一约束
问题:
给某个字段设置了唯一约束,没有指定非空约束
1.这个字段能否插入null值?
可以 也可以重复插入null
null和’null’不一样
2.这个字段能否插入空值?
可以
MYSQL中需要注意null 和空(’’)和’null’ 完全不一样
查看唯一约束
1.3 主键约束
主键可以用来表示一张表中某一条数据的代表凭证
主键特征:
1.非空且唯一
2.主键可以由多个字段或单个字段组成
单字段主键
字段 字段类型 primary key;
多个字段或单个字段
create table table_name(
id int,
name varchar(250),
primary key(id,name)
);
多个字段联合起来形成的主键,因此要多个字段不重复,那么插入数据就可以成功。
注意事项:
即使主键是字符类型,依然不能插入空值,和 not null约束不同。
1.4 外键约束
foreign key (字段名) references 主表 (列);
主表(有主键) 次表(有外键,关联到主表的主键上)
外键可以插入null并且可以插入多个null,但是如果指定了数据(指定了具体的值),那么这个值一定得是有效才行!
1.5 检查约束
保证列中的值符合指定的条件
check(约束内容);
1.6 auto_increment
1.6.1 注意事项
1.auto_increment必须配合Key使用,primary key,foreign key和unique都是可以的
2.auto_increment自增约束必须配合整数数值使用
3.在一张表中不允许有多个auto_increment
4.手动指定自增值
5.手动修改修改子增值:(新增)
1.6 insert… select…
二 . 表设计
1. 数据库设计三范式
1.1 第一范式:
表的列要保证是最小的不可分割的原子值
1.1.1符合第一范式的好处:
- 减少了数据冗余
- 更利于数据的维护和更新
1.2 第二范式:
一个表中的所有数据都必须和主键有关联
1.2.1符合第二范式的好处:
- 利于维护和修改
- 利于展示
1.3第三范式:
确保表中的每列都和主键直接相关 而不是间接相关
1.3.1符合第三范式的好处:
- 实现列和非主键的解耦。(一个字段不会影响其他字段)
三. 表关系
一对一
一对多
一个班有多个学生
多对多
一个学生可以选修多个课程
一门课程也可以被多个学生选择
要有三个表 其中一个是中间表