自学内容网 自学内容网

MySQL - 表的约束


真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。比如有一个字段是email,要求是唯一的。

1、空约束

  1. 两个值:null(默认的)和not null(不为空),不写时默认null。
  2. 数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算。
  3. 使用:字段 数据类型 […] null / not null […] 。

例子:假如在一份名单里,姓名和编号这两个字段是肯定不能为空的。

CREATE TABLE t1(
    -> name varchar(20) not null,
    -> id varchar(20)  not null
    -> );

在这里插入图片描述
在这里插入图片描述
解释:如果一个字段设置为null时,插入时可以进行省略,反之,不能省略。

2.默认值

  1. 默认值:某一种数据会经常性的出现某个具体的值,可以在一开始就指定好,在需要真实数据的时候,用户可以选择性的使用默认值。
  2. 使用:字段 数据类型 […] default 默认值 […]

例子:设置性别时默认为男或者女。

CREATE TABLE t2( name varchar(20) not null,
 id varchar(20) null,
  sex char(1) not null default '男' );

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
解释:如果设置为null但不设置默认值,系统会为我们添加默认值为null,如果设置not null但不设置默认值,系统不会为我们添加默认值,此时插入时不能省略该字段,如果设置not null且设置默认值,在我们插入时可以省略该字段了,该字段的数值设置为默认值。

3.列描述

  1. 列描述:comment,没有实际含义,专门用来描述字段,会根据表创建语句保存,用来给程序员或DBA 来进行了解(相当于注释了)。
  2. 使用:字段 数据类型 […] comment 描述

例子:给字段进行备注

CREATE TABLE t3(
 name varchar(20) comment '姓名', 
 id varchar(20) comment '编号'
 );

在这里插入图片描述

4.zerofill

  1. zerofill属性是对整数类型后面的括号内的数值进行处理,如果没有zerofill属性,那么括号内的数值没有意义,添加该属性后,会对该整数前面补0,具体看下面案例。
  2. 字段 数据类型 […] zerofill […]

例子:给字段添加zerofill属性后观察变化

CREATE TABLE t4(
 name varchar(20) ,
  id int zerofill 
  );

在这里插入图片描述
在这里插入图片描述
解释:加了zerofill属性后,插入后不够整数类型后面的括号内的数值位数就会在前面补0。

5.主键

  1. 主键:primary key用来唯一的约束该字段里面的数据,不能重复,不能为空,一张表中最多只能有一个 主键;主键所在的列通常是整数类型。
  2. 建表时添加主键:字段 数据类型 […] primary key […]
  3. 作为主键的字段会被添加not null。

例子:添加主键

CREATE TABLE t5(
 name varchar(20) , 
 id int primary key 
 );

在这里插入图片描述
在这里插入图片描述
解释:当作为主键的字段的数据存在时,不允许重复插入。

复合主键

  1. 在创建表的时候,在所有字段之后,使用primary key(主键字段列表)来创建主键,如果有多个字段作为主键,可以使用复合主键。
  2. 使用:建表 primary key(字段列表)。

例子:

CREATE TABLE t6(
 name varchar(20) ,
  id int, 
  primary key(name,id)
   );

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
解释:当使用复合主键时,只有作为主键的字段都相同时才不允许插入。

补充

  1. 在建表后添加主键
    alter table 表名 add primary key(字段列表)
  2. 删除主键
    alter table 表名 drop primary key;

6.自增长

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

例子:给id添加为自增长

CREATE TABLE t9( 
id int  primary key auto_increment,
name varchar(20) 
);

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
解释:作为自增长的字段,在指定插入时可以省略不写,默认从1开始,数据库也会记录它下一次插入的值(这个值是表中最大值+1),并且插入比数据库记录的值大时,数据库记录的值就会被更新。

补充:
通过ALTER TABLE语句来实现设置初始值

ALTER TABLE table_name AUTO_INCREMENT = new_initial_value;

table_name是要修改的表名,new_initial_value是要设置的新的自增初始值。

在这里插入图片描述

在建表时设置初始值

CREATE TABLE t11
( id int  primary key auto_increment  ,
name varchar(20) 
)AUTO_INCREMENT=1000 ;//这里设置

在这里插入图片描述

7.唯一键

  1. 一张表中有往往有很多字段需要唯一性,数据不能重复,但是一张表中只能有一个主键:唯一键就可以解决表中有多个字段需要唯一性约束的问题。
  2. 唯一键的本质和主键差不多,唯一键允许为空,而且可以多个为空,空字段不做唯一性比较。
  3. 使用:字段 数据类型 […] unique […]

例子:一个学生的信息,如id主要作为区分学生,可以设置为主键,但是我们每个人的qq号码也是唯一的,这时候就可以通过唯一键解决了。

CREATE TABLE t12(
 id int  primary key auto_increment  ,
  name varchar(20),
  qq varchar(20) unique 
  ) ;

在这里插入图片描述
在这里插入图片描述
解释:作为唯一键的字段可以为null,当插入相同的值时会被拒接插入。

8.外键

  1. 外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束或unique约束。当定义外键后,要求外键列数据必须在主表的主键列存在或为null。
  2. 使用:foreign key (字段名) references 主表(列)。

例子:一名学生是属于一个班级的,所以学生的表可以作为从表,班级的表可以作为主表。
主表:

CREATE TABLE myclass(
 id int  primary key auto_increment  , 
 name varchar(20)
 ) ;

从表:

create table stu (
    -> id int primary key,
    -> name varchar(30) not null 
    -> class_id int,
    -> foreign key (class_id) references myclass(id)
    -> );

在这里插入图片描述

先插入2个班级
在这里插入图片描述
插入学生
在这里插入图片描述
删除一个有有学生的班级
在这里插入图片描述
总结:收到外键的约束,学生必须要插入到存在的班级里,班级删除时只能选择无学生的班级,这样两张表就形成了约束。


原文地址:https://blog.csdn.net/2302_79539362/article/details/143877751

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!