【MySQL】表约束(二)

自增长

自增长就是能让主键列自动增长, 并且可以不指定主键列的数据。注意:自增长必须配合主键来使用。 下面为示例:

mysql> create table if not exists t21(
-> id int unsigned primary key auto_increment,
-> name varchar(20) not null
-> );

【MySQL】表约束(二)

然后我们进行插入数据的时候就可以不指定id, id也会从1开始自增长, 如下:

【MySQL】表约束(二)

但是, 如果我们插入了一个值后, 那么这个值就是新的起始值, 下一次插入就是从这个数字开始。

【MySQL】表约束(二)

唯一键

  一张表中有些数据需要唯一性, 数据不能重复。但是一张表中只能有一个主键, 所以这就不能让所有的信息列都变成主键, 那么如何保证这些列的信息的唯一性, 这个就用到了唯一键。下面为示例:

mysql> create table stu(
-> id char(20) unique comment'这是一个学生的唯一键',
-> name varchar(32) not null
-> );

【MySQL】表约束(二)

【MySQL】表约束(二)

插入数据时如果插入到的id重复, 他就会给我们不报错, 说有一个地方重复, 为id。 但是如果我们把id设为NULL,就不会重复。——这个区别于主键, 主键不能为空, 不能重复。 但是唯一键可以为空。

并且如果设置了唯一健, desc的时候的Key列就会显示UNI。

外键
外键更强调的是表与表之间的关联, 表与表之间的约束。外键应该叫做外键约束。就比如我们有一个班级表, 一个学生表。 学生表达内部有一列信息为隶属班级class_id。那么此时学生表和班级表就形成了关联关系。——》这个就是外键约束。

如果没有外键的情况下我们如果要将两个表的内容联系起来, 那么我们就得创建一个student表:

mysql> create table if not exists student(
-> id int unsigned primary key auto_increment,
-> name varchar(20) not null,
-> telphone varchar(32) not null,
-> class_id int
-> );

再创建一个class表:

然后先给class插入新数据:

insert into class values(1, '103');

insert into class values(2, '104');

【MySQL】表约束(二)

再给student插入数据:

insert into student values(2, '李四', '11112', 1);

insert into student values(1, '张三', '11111', 2);

但是, 问题是我们的班级只有两个, 如果有人插入的时候, 插入了一个3号班级, 是不是就错了?而且, 我们说过, 表的约束是来倒逼程序员规范插入的。 那么我们有没有一种约束来让程序员在这种情况下规范插入呢?——这里就要用到外键。

下面是带有外键的表:

mysql> create table if not exists newstudent(
-> id int unsigned primary key,
-> name varchar(20) not null,
-> telphone varchar(32) unique key,
-> class_id int,
-> foreign key(class_id) references class(id)
-> );

然后我们再插入, 就会发现, 如果我们插入不是class里面的存在的数据的话就会报错:

【MySQL】表约束(二)

这就是外键约束。

另外还要注意的点就是, 从表里面有的数据, 在主表里面是不能删除的。 就比如现在我们从表里面只有一个张三的信息, 张三是2班的。 那么删除class表里面的数据的时候, 就不能把2班删除, 只能删除1班。

阅读剩余
THE END