MySQL表的约束
迪丽瓦拉
2024-04-24 20:16:54
0

为防止数据表中插入错误的数据,MySQL定义了一些维护数据库完整性的规则,即表的约束。常用的约束分为五种:默认约束、非空约束、主键约束、唯一约束和外键约束

目录

默认约束

非空约束

唯一约束

主键约束

自动增长


默认约束

默认约束用来为数据表中的字段指定默认值,即没有给字段赋值时系统会自动给它一个默认值

默认值用DEFAULT关键字定义的,其语法格式:

字段名 数据类型 DEFAULT 默认值;

注意:BLOB、TEXT数据类型不支持默认约束

//创建表时添加默认约束

mysql>CREATE TABLE mytable(

->        age INT UNSIGNED DEFAULT 18 //添加默认约束

->        );

//为现有表添加或删除默认约束

//删除默认约束

mysql>ALTER TABLE mytable MODIFY age INT UNSIGNED;

//添加默认约束

musql>ALTER TABLE mytable MODIFY age INT UNSIGNED DEFAULT 18;

非空约束

非空约束是指字段的值不能为NULL

在MySQL中,非空约束是通过NOT NULL来定义的,其语法格式:

字段名 数据类型 NOT NULL

注意:非空约束与值为NULL的默认约束不能同时存在,否则数据表会创建失败

//创建表时添加非空约束

mysql>CREATE TABLE mytable(

->        name VHAR(10) NOT NULL,

->        age INT NOT NULL DEFAULT 18 //添加非空约束

->        );

//为现有表添加或删除非空约束

//删除非空约束

mysql>ALTER TABLE mytable MODIFY age INT NOT NULL;

//添加非空约束

musql>ALTER TABLE mytable MODIFY age INT NOT NULL DEFAULT 18;

唯一约束

 唯一约束用于保证数据表中字段的唯一性,即表中字段的值不能重复出现,MySQL的唯一约束允许存在多个NULL值

唯一约束用过UNIQUE定义,其语法格式:

#列级约束

字段名 数据类型 UNIQUE;

#表级约束

UNIQUE(字段名1,字段名2,...);

列级约束和表级约束为MySQL中两种定义约束的方式:列级约束定义在一个列上,只对该列起约束作用,表级约束独立于列的定义,可应用于表的多个列上

#列级约束

mysql>CREATE TABLE mytable ( 

->        id INT UNSIGNED UNIQUE,

->        name VARCHAR(10) UNIQUE

->        );

#表级约束

mysql>CREATE TABLE mytable ( 

->        id INT UNSIGNED ,

->        name VARCHAR(10) ,

->        UNIQUE (id),

->        UNIQUE(name)

->        );

注意:当表级列表仅建立在一个字段上时,其作用效果与列级约束相同

#删除唯一约束

mysql>ALTER TABLE mytable DROP INDEX id;

#添加唯一约束

mysql>ALTER TABLE mytable ADD UNIQUE (id);

创建复合唯一约束:只有多个字段的值相同时才视为重复记录

mysql>CREATE TABLE mytable (

->        id INT UNSIGNED,username VARCHAR(10),

->        UNIQUE(id,username)

->        );

主键约束

主键主要用来唯一标识表中的记录,类似于指纹、身份证用于标识人的身份一样

主键约束通过PRIMARY KEY定义,相当于唯一约束和非空约束的组合

主键约束也分为列级和表级,其语法格式如下:

#列级约束

字段名 数据类型 PRIMARY KEY

#表级约束

PRIMARY KEY(字段名1,字段名2......)

mysql>CREATE TABLE mytable (

->        id INT PRIMARY KEY,

->        name VARCHAR(10)

->        );

删除主键约束

mysql>ALTER TABLE mytable DROP PRIMARY KEY;

注意:为某字段添加主键约束后,该字段相当于有了非空约束和唯一约束,但是删除它的主键约束后,该字段的非空约束并没有删除

自动增长

在为表设置主键约束后,每次插入数据都要检查主键的值,为了防止插入值重复导致插入失败,我们可以使用自动增长功能来自动生成主键的值

自动增长功能用AUTO_INCREMENT来实现,其基本语法如下:

字段名 数据类型 AUTO_INCREMENT

mysql>CREATE TABLE mytable (

->        id INT PRIMARY KEY AUTO_INCREMENT,

->        name VARCHAR(20)

->        );

使用AUTO_INCREMENT时需注意以下四点:

  1. 一个表只能有一个自动增长字段,并且该字段的数据类型是整数类型且必须定义为键,如UNIQUE KEY、PRIMARY KEY
  2. 若为自动增长字段插入NULL、0、DEFAULT或在插入时省略该字段,该字段都会自动使用自动增长值;若插入为具体值,则不会使用自动增长值
  3. 自动增长值从1开始自增并且每次加1,若插入的值大于自动增长的值,则下次插入的自动增长值会自动使用最大值加1;若插入的值小于自动增长值,则不会对自动增长值产生影响
  4. 使用DELETE删除记录时,自动增长值不会减小或填补空缺

#修改自动增长值

mysql>ALTER TABLE mytable AUTO_INCREMENT = 10;

#删除自动增长

mysql>ALTER TABLE mytable MODIFY id INT;

#添加自动增长

mysql>ALTER TABLE mytable MODIFY id INT AUTO_INCREMENT;

在为字段删除自动增长并重新添加自动增长后,自动增长的初始值主动设为该列现有的最大值+1

修改自动增长值时,若自动增长值小于该列现有的最大值则修改不会生效

相关内容