MySQL____表约束和表设计

一 . 表约束

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.2.1符合第二范式的好处:

  1. 利于维护和修改
  2. 利于展示

1.3第三范式:

确保表中的每列都和主键直接相关 而不是间接相关

1.3.1符合第三范式的好处:

  1. 实现列和非主键的解耦。(一个字段不会影响其他字段)

三. 表关系

一对一

一对多

一个班有多个学生

多对多

一个学生可以选修多个课程
一门课程也可以被多个学生选择
要有三个表 其中一个是中间表
在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/biteqq/article/details/123458024