MySQL____表约束和表设计
一 . 表约束
1.约束类型
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符合第三范式的好处:
- 实现列和非主键的解耦。(一个字段不会影响其他字段)
三. 表关系
一对一
一对多
一个班有多个学生
多对多
一个学生可以选修多个课程 一门课程也可以被多个学生选择 要有三个表 其中一个是中间表