【MySQL】表的完整性约束——非外键约束

一、表的完整性约束

        为防止不符合规范的数据存入数据库,在用户对数据进行插入、修改、删除等操作时,MySQL提供了一种机制来检查数据库中的数据是否满足规定的条件,以保证数据库中数据的准确性和一致性,这种机制就是完整性约束

        MySQL中主要支持以下几种种完整性约束,如表所示。 其中Check约束是MySQL8中提供的支持。

二、非外键约束

1、主键约束和自增约束

主键约束是指,如果为一个字段添加主键约束,那么这个字段的值就可以唯一标识一段记录。自增约束是指,约束的字段的值会自动递增。主键约束和自增约束一般一起使用,常用在约束序号列。

自增约束(AUTO_INCREMENT)可以使表中某个字段的值自动增加。一张表中只能有一个自增长字段,并且该字段必须定义了约束(该约束可以是主键约束、唯一约束以及外键约束),如果自增字段没有定义约束,数据库则会提示“Incorrect table definition; there can be only one auto column and it must be defined as a key”错误。

由于自增约束会自动生成唯一的ID,所以自增约束通常会配合主键使用,并且只适用于整数类型。一般情况下,设置为自增约束字段的值会从1开始,每增加一条记录,该字段的值加1。

create   table student(
       stu_id int(10) primary key,
       stu_name varchar(3),
       stu_sex varchar (1)
);
/*为student表中的主键字段添加自增约束*/
alter   table student11 modify stu_id int(10) auto_increment;

使用ALTER TABLE语句删除自增约束 :

alter table student modify stu_id int(10);

2、非空约束

约束的字段值不能为空。

3、唯一约束

添加了唯一约束的字段的值不可以重复。

4、检查约束

添加检查约束时,可以设置值的范围,不符合范围的值将不能被添加到数据库表中。

5、默认值约束

为字段添加默认值约束后,如果该字段没有传入值,则使用默认值。

三、非外键约束的分类

非外键约束从作用上可以分为两类:

  • 表级约束:可以约束表中任意一个或多个字段。与列定义相互独立,不包含在列定义中;与定义用逗号分隔;必须指出要约束的列的名称;如:
    constraint pk_stu primary key (sno)  -- pk_stu 主键约束的名字
  • 列级约束:包含在列定义中,直接跟在该列的其它定义之后 ,用空格分隔;不必指定列名;例如:
    sno int(6) primary key auto_increment

1、使用列级约束建表,语法结构是:列名 列类型 约束名

创建包含学生数据的表时,为其添加各种非外键约束:

create table t_student(
	sno int(6) primary key auto_increment, -- 自增约束+主键约束
	sname varchar(5) not null, -- 非空约束
	sex char(1) default '男' check(sex='男' || sex='女'), -- 检查约束+默认值约束
	age int(3) check(18<=age<35),
	enterdate date,
	classname varchar(10),
	email varchar(15) unique -- 唯一约束
);

2、使用表级约束建表,语法结构是:constraint 给本次约束起的名字 约束名 (字段名+条件)

创建包含学生数据的表时,为其添加各种非外键约束:

create table t_student(
        sno int(6) auto_increment, 
        sname varchar(5) not null, 
        sex char(1) default '男',
        age int(3),
        enterdate date,
        classname varchar(10),
        email varchar(15),
        constraint pk_stu primary key (sno),  -- pk_stu 主键约束的名字
        constraint ck_stu_sex check (sex = '男' || sex = '女'),
        constraint ck_stu_age check (age >= 18 and age <= 50),
        constraint uq_stu_email unique (email)
);

表级约束还有另外一种写法,就是在创建表以后通过SQL语句添加约束,例如:

alter table t_student add constraint pk_stu primary key (sno) ; -- 主键约束
alter table t_student modify sno int(6) auto_increment; -- 修改自增条件
alter table t_student add constraint ck_stu_sex check (sex = '男' || sex = '女');
alter table t_student add constraint ck_stu_age check (age >= 18 and age <= 50);
alter table t_student add constraint uq_stu_email unique (email);

猜你喜欢

转载自blog.csdn.net/hold_on_qlc/article/details/129806437