约束
表的约束:表一定要有各种约束,通过约束,让我们未来插入数据库表中的数据是符合预期的。
约束本质是通过技术手段,倒逼程序员插入正确的数据,凡是插入进来的数据都是符合数据约束的!
约束的最终目标:保证数据的完整性和可预期性
所以我们需要很多的约束条件
空属性
NULL,表示什么都没有,与' '不同,' '表示是空的,NULL表示什么都没有
两个值:null(默认的) 和 not null(不为空)
数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空无法参与运算

设置为not null 不能插入null或不插入

默认值
用一种数据会经常性的出现的某个具体的值,可以一开始就指定好,用户可以选择性的使用默契值

尝试插入,一个设置名字,年龄,性别一个只设置名字

not null 与default一起使用呢??

他们两个并不冲突互相补充
not null:约束 当用户插入的时候
default:约束 当用户忽略这一列的时候,使用默认值(如果设置了),没设置,直接报错。
如果建表时没有设定default值

可以看到 mysql 默认设置了 DEFAULT NULL
如果设置了 not null 就不会默认设置 default null
列描述
列描述:comment,没有实际含义,专门用来描述字段,会根据表创建语句保存,用来给程序员或DBA来进行了解。

zerofill
设置了zerofill 如果设置数值的位数不够那就往前补0

查找依然能找到

更改补0的位数 int(x)-->补x位(浮点数也可以设置)

位数够了就不补0了
主键
主键 primary key:用来唯一的约束该字段里面的数据,不能重复不能为空,一张表中最多有一个主键。但是并不代表一个表中的主键只能添加给一列!一个主键可以被添加到一列或者多列上(复合主键)。
主键所在的列通常是整数类型。
主键自动设置为不允许为空

主键不允许重复、冲突

方便通过查找主键精准查找

删除主键操作
alter table 表名 drop primary key

添加主键操作
alter table 表明 add primary key(列名)
但是添加为主键的那一列不能有重复

删除重复的列后即可添加成功

复合主键 -->多个字段作为主键

id 与 course_id 合起来算一个主键
这两个数据都不一样
这两个数据有一个和历史数据不一样
不可以两个数据都一样

自增长
auto_increment:当对应的字段不给值,会自动的被系统触发系统会从当前字段中已经有的最大值 +1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。
自增长的特点:
任何一个字段要做自增长,前提是本身是一个索引(key一栏有值)
自增长字段必须是整数
一张表最多只能有一个自增长

插入时可以不用主动插入自增长

我们发现主键根据上一个插入的主键进行了自增长


因为auto_inrement在表内建立了约束在表外也是可以设置的
如下所示

可以选择之前没使用过的值,但是自增从最大的开始自增

list_insert_id 获取上次插入后的auto_increment 的值

唯一键
一张表中往往很多字段需要唯一性,数据不能重复,但是一张表中只能有一个主键:唯一键就可以解决表中有多个字段需要唯一性约束的问题。
唯一键的本质和主键差不多,唯一键允许为null ,而且可以多个为null,null字段不做唯一性比较。
可以简单理解成,主键更多的是标识唯一性的。而唯一键更多的是保证在业务上,不要和别的信息 出现重复 例如身份证号和员工号,身份证设置为主键,但是员工号也不能重复,就需要一个约束,此时就可以将员工号设置为唯一键。
sql
unique key
unique
都可设置
使用实例
sql
在定义列时直接指定
CREATE TABLE users (
id INT PRIMARY KEY,
email VARCHAR(100) UNIQUE, -- 使用 UNIQUE
phone VARCHAR(20) UNIQUE KEY, -- 使用 UNIQUE KEY
username VARCHAR(50)
);
在所有列定义后指定
CREATE TABLE users (
id INT PRIMARY KEY,
email VARCHAR(100),
phone VARCHAR(20),
username VARCHAR(50),
UNIQUE (email),
UNIQUE KEY (phone),
);

唯一键有了就不能重复插入

可以插入null值(主键不能为null)

外键
外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束

创建两张表

插入数据后分别为


此时就有问题
-
没有三班这个班级
-
如果把班级表1班删除了,其实也是不合理的,还有一般的学生
我们上面的 学生表的 class_id班级id 与 教室表的 id班级id是有关联的但是没有约束
所以我们要创建外键约束
外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束或unique约束 。当定义外键后,要求外键列数据必须在主表的主键列存在或为null。
sql
foreign key (字段名) references 主表(列)
删除上面学生表重新创建一个


插入数据实验

发现不能插入不存在的班级,也不能插入重复的学生id
这篇就到这里啦(づ ̄3 ̄)づ╭❤~