not null 指示某列不能存储 NULL 值,也就是插入数据不能为空。
create table student ( id int, -- 学生姓名不能为空 name varchar(20) not null );
保证某列的每行必须有唯一的值
create table student ( -- id不能为空 id int not null, -- 学号不能重复 sn int unique );
当数据没有指定值的时候,会给一个默认值。如果不显示指定默认值,默认值就为null
create table student ( -- id不能为空 id int not null, -- 学号不能重复 sn int unique, -- 没给学生指定名字则为默认值 未命名 name varchar(15) default '未命名' );
主键就相当于: not null + unique
一张表只能有一个主键,主键就相当于一条记录的唯一身份标识,不能为且是唯一的
create table student ( -- id设置为主键 id int primary key, -- 不能重复 sn int unique, -- 默认值 name varchar(15) default '未命名' );
对于整数类型的主键,常配搭自增长auto_increment来使用。插入数据对应字段不给值时,使用最大值+1
create table student ( -- id设置为主键 id int primary key auto_increment, -- 不能重复 sn int unique, -- 默认值 name varchar(15) default '未命名' );
当
自增主键,在MySQL内部维护了一个全局变量,每次插入的记录如果指定的是null,全局变量++
即使你删除了前面的一些数据,全局变量也不受影响,会继续++。
如果手动插入的值,超过当前的全局变量,全局变量就会直接更新。
就算表的数据清空了,全局变量还是会保存。除非把表删除。
注意:这样自增主键策略只是局限于单台数据库,如果是多个数据库(分表分库的情况),自增主键就无能为力了(没法保证id不重复)。
语法:
foreign key (字段名) references 主表(列)
外键是MySQL中比较复杂的一个约束,外键一般和主键搭配使用。
主键所在的表就是主表,而外键所在的表就是父表
定义外键需要注意几个点:
代码示例:
创建一张学生表
-- 创建一个班级表,id为主键 create table class ( id int primary key auto_increment, name varchar(20) );
再创建一张班级表,通过学生表里的 class_id 字段来关联班级表中的主键id。
一个班级对应多个学生,一个学生对应一个班级
-- 创建一张学生表 create table student ( id int primary key auto_increment, sn int unique, name varchar(15) not null, class_id int, foreign key (class_id) references class(id) );
这样学生表就依赖于班级表存在了
注意:在MySQL中使用此约束不会报错,但时没有任何效果。所以请忽略此约束。