【MySQL数据库】表的约束
目录
1,空属性
2,默认值
3,列描述
4,zerofill
5,主键primary key
6,自增长auto_increment
7,唯一键unique
8,外键foreign key
在MySQL中,表的约束是指用于插入的数据必须遵循特定的规则,使其插入正确的数据,以保持数据库的数据是符合预期的。约束可以应用于列或整个表。
表的约束很多,这里主要介绍如下几个:null/not null,default,comment,zerofill,primary key,auto_increment,unique,foreign key。
1,空属性
两个值:null(默认的)和 not null(不为空)。
数据库默认字段基本都是字段为空,因为约束字段默认为null。若是 not null 属性,那么插入时将不允许为空。
2,默认值
默认值:default [数据]
默认值是插入数据时默认的数值。某一种数据会经常性的出现某个具体的值,可以在一开始就指定好,在需要真实数据的时候, 用户可以选择性的使用默认值。
3,列描述
列描述:comment [列的描述]。没有实际含义,专门用来描述字段,用来给程序员进行了解。
可发现,comment 注释信息通过desc查看不到,但通过show可以看到。
4,zerofill
zerofill 的主要用于数值类型的字段(如 int、bigint 等),用于将其格式化输出数据。具体来说,它的作用是用前导零填充数值,使得该列的显示宽度达到指定的长度。
平常所看到如 int(10) 的数值类型就与该字段相关,int占比4字节,这里的10表示填充的宽度,若没有 zerofill 这个属性,括号内的数字是毫无意义的。
create table t4(id int(5) zerofill);
insert into t4 (id) values (3);insert into t4 (id) values (123456);
此时,id列的数据为:00003、123456
5,主键primary key
主键 primary key 用来唯一的约束该字段里面的数据,表示该数据不能重复,不能为空。主键所在的列通常是整数类型。
上面 t4表的描述里 key 对应的 PRI 表示主键。 创建表时,一张表中最多只能有一个主键,但这个主键可以由多个列组成,即复合主键。
复合主键形式为:primary key(主键字段列表),如果有多个字段作为主键,可以使用复合主键。若创建表时没有添加主键,这里可运用相关指令追加主键,或者删除主键。
删除表下的所有主键:alter table 表名 drop primary key;
对没有主键的表追加主键:alter table 表名 add primary key(要追加列的名称);
6,自增长auto_increment
当对应的字段不给值时,它会自动的被系统触发,系统会从当前字段中已经有的最大值 +1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。
注意:首先,auto_increment修饰的列必须是表的主键或唯一键的一部分,如果没有将列定义为主键或唯一键MySQL不允许使用 auto_increment 属性。其次,auto_increment 和 default 不能同时使用,因为 auto_increment 列的值是由数据库自动生成的,通常从 1 开始递增,它的行为已经隐含了默认值的生成机制,而 default 也是MySQL默认值的自动生成,因此,这两个字段不能同时使用。上面这两点是自增长的约束。
7,唯一键unique
唯一键作用与主键差不多,都是保证一列中的所有值都是唯一的,不同的是主键不可以为空(null),但唯一键可以为空,且一个表中可以有多个唯一键。
主键和唯一键的运用场景主要是在业务上。主键更多的是标识唯一性的,比如身份证号,而而唯一键更多的是保证在业务数据上,表示不要和别的信息出现重复。
8,外键foreign key
外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束或unique 约束。当定义外键后,要求外键列数据必须在主表的主键列存在或为null。在MySQL中,外键是一种用于建立和加强两个表数据之间连接的列。通过确保一个表中的数据与另一个表中的数据匹配。
外键语法:foreign key (字段列名) references 主表(列名);
由于外键约束,如果主表或从表存在依赖项的话,它会拒绝删除或更新操作。
上面,我们设计了主表——班级表myclass 和从表——学生表stu,让学生表的 class_id 和班级表 id 形成关联关系,即在外表中建立外键约束。当向从表 stu 的 class_id 插入不存在于主表 myclass 的 id 列中的数据时,这里将插入失败。当然,插入 null 会插入成功,表示当前还未进行分配班级。