数据库约束
not null —>非空约束
创建表时,指定某列不为空(null) ;
举例:
创建学生表结构,并指定id 不为空;
mysql> create table student(
-> id int not null,
-> sn int,
-> name varchar(20)
-> );
 指定为非空约束后,就不能再插入空(null )了,否则报错; 
unique ---->唯一约束
指定某列是唯一的,不重复的 ;
举例:
创建学生表结构,指定id 不为空,学号唯一;
mysql> create table student(
-> id int not null,
-> sn int unique,
-> name varchar(20)
-> );
 指定唯一约束后,就不能添加重复数据在表中,否则就会报错; 
default ---->默认值约束
指定插入数据时,某列为空就默认为unkown:
举例:
设置:name 列为空时,使用默认值unknown ;
mysql> create table student(
-> id int not null,
-> sn int unique,
-> name varchar(20) default 'unknown'
-> );
 注意 :
- 插入四条数据,空字符串(
' ' )和空(null )的显示是不一样的哦~
mysql> insert into student values
-> (1,1001,null),
-> (2,1002,'小花'),
-> (3,1003,''),
-> (4,1004,'小猪');
查询结果:
- 插入时,只有不指定该字段,才能显示以默认值的形式插入,如果指定,哪怕是
null ,也会真实的插入,如上所示;
mysql> insert into student (id,sn) values(7,1008);
查询结果:

primary key—>主键约束
not null 和 unique 的结合体,确保某列(多列)有唯一标识,便于查询、删除、修改数据 ;
举例:
创建学生表结构,id 设为主键;
mysql> create table student(
-> id int primary key,
-> sn int unique,
-> name varchar(20) default 'unknown'
-> );

对于整数类型的主键,常常搭配 auto_increme 来使用; 表示从1开始自增,但插入数据时,不要指定主键字段 ;
场景:
创建课程表,id 为整形数字的主键,如下所示:
mysql> create table course(
-> id int primary key auto_increment,
-> name varchar(20)
-> );
插入数据,但不要指定主键字段:
mysql> insert into course(name) values
-> ('高等数学'),
-> ('大学英语'),
-> ('智能控制');
查询结果: 
foreign key---->外键约束
foreign key :用于关联其他表的主键或唯一键; 语法 : foreign key (本表字段名) references (关联表的表名)(关联的字段名)
举例:
- 创建班级表
classes ,id 为主键; - 创建学生表
student ,一个学生对应一个班级,一个班级对应多个学生,使用id 为主键,classes_id 为外键,关联班级表id ;
mysql> create table classes(
-> id int primary key auto_increment,
-> name varchar(20)
-> );
Query OK, 0 rows affected (0.01 sec)
mysql>
mysql> drop table if exists student;
Query OK, 0 rows affected (0.00 sec)
mysql> create table student(
-> id int primary key auto_increment,
-> sn int unique,
-> name varchar(20) default 'unknown',
-> classes_id int,
-> foreign key (classes_id) references classes(id)
-> );
插入数据:
 查询结果:
mysql> insert into student (sn,name,classes_id) values
-> (1001,'李宁',1),
-> (1002,'张伟',1),
-> (1003,'乔丹',2);
查询结果:
李宁、张伟均在计算机1班,乔丹在计算机2班;
表的设计
一对一

一对多

多对多
 注意:
- 表的直接关系只有:1对1 、1对多;
多对多的关系,是中间表产生的中间关系 ;
举例:
班级表、学生表、考试成绩表,总共有三张表,在考试的场景发生后,就有学生和课程多对多的对应关系了!


- 班级表


插入数据:
mysql> insert into score values
-> (null,59,8,1),
-> (null,70,8,2),
-> (null,87,9,2),
-> (null,69,10,1),
-> (null,99,8,1);
结果查询:
内容总结
约束类型 | 说明 |
---|
not null | 表示某列不能存储 null 值 | unique | 保证某列的每行必须有唯一的值 | default | 规定没有给列赋值时的默认值 | primary key | not null 和unique 的结合 | foreign key | 保证一个表中的数据匹配另一个表中的值的参照完整性 |
|