365 - 表的完整性约束

9 篇文章 0 订阅
订阅专栏

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

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

一、非外键约束

1、代码演示非外键约束

/*
建立一张用来存储学生信息的表
字段包含学号、姓名、性别,年龄、入学日期、班级,email等信息
约束:
建立一张用来存储学生信息的表
字段包含学号、姓名、性别,年龄、入学日期、班级,email等信息
【1】学号是主键 = 不能为空 +  唯一 ,主键的作用:可以通过主键查到唯一的一条记录【2】如果主键是整数类型,那么需要自增
【3】姓名不能为空
【4】Email唯一
【5】性别默认值是男
【6】性别只能是男女
【7】年龄只能在18-50之间
*/
-- 创建数据库表:
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(age>=18 and age<=50),
        enterdate date,
        classname varchar(10),
        email varchar(15) unique
);
-- 添加数据:
--  1048 - Column 'sname' cannot be null 不能为null
-- 3819 - Check constraint 't_student_chk_1' is violated. 违反检查约束
insert into t_student values (1,'张三','男',21,'2023-9-1','java01班','zs@126.com');
-- 1062 - Duplicate entry '1' for key 't_student.PRIMARY' 主键重复
-- > 1062 - Duplicate entry 'ls@126.com' for key 't_student.email' 违反唯一约束
insert into t_student values (2,'李四','男',21,'2023-9-1','java01班','ls@126.com');
insert into t_student values (3,'露露','男',21,'2023-9-1','java01班','ls@126.com');
-- 如果主键没有设定值,或者用null.default都可以完成主键自增的效果
insert into t_student (sname,enterdate) values ('菲菲','2029-4-5');
insert into t_student values (null,'小明','男',21,'2023-9-1','java01班','xm@126.com');
insert into t_student values (default,'小刚','男',21,'2023-9-1','java01班','xg@126.com');
-- 如果sql报错,可能主键就浪费了,后续插入的主键是不连号的,我们主键也不要求连号的
insert into t_student values (null,'小明','男',21,'2023-9-1','java01班','oo@126.com');
-- 查看数据:
select * from t_student;

实操时,出现性别年龄检查约束失败 ??? 

原因:

        Check约束是MySQL8(即5.8)中提供的支持,实操时用的是MySQL5.7。

实操代码:

## 表的完整性约束
/*
建立一张用来存储学生信息的表
字段包含学号、姓名、性别,年龄、入学日期、班级,email等信息
 
约束: 
建立一张用来存储学生信息的表
字段包含学号、姓名、性别,年龄、入学日期、班级,email等信息
【1】学号是主键 = 不能为空 +  唯一 ,主键的作用:可以通过主键查到唯一的一条记录【2】如果主键是整数类型,那么需要自增
【3】姓名不能为空
【4】Email唯一
【5】性别默认值是男
【6】性别只能是男女
【7】年龄只能在18-50之间
*/
-- 创建数据库表:
create table t_student2(
        sno int(6) primary key auto_increment, -- 主键,自增
        sname varchar(5) not null, -- 非空
        -- sex char(1) default '男' check(sex='男' || sex='女'), -- 默认“男”,只能是男女
				sex char(1) default '男' check(sex='男' || sex='女'),
        age int(3) check(age>=18 and age<=50),-- 限定年龄区间 
        enterdate date, 
        classname varchar(10),
        email varchar(15) unique -- 唯一
);

-- 验证:

-- 添加数据
insert into t_student2 values(1,'张三','男',20,'2020-9-1','java1班','zs@126.com');
-- ??? 为什么性别限制不了???
insert into t_student2 values(2,'张三','哈',60,'2020-9-1','java1班','ls33@126.com');
-- ??? 为什么年龄限制不了???
insert into t_student2 values(null,'张三','女',70,'2020-9-1','java1班','ls2@126.com');

insert into t_student2 (sname,enterdate) values ('小明','2021-9-1');
-- 主键没设置值、或设置 null 和 default —— 也可以实现自增
insert into t_student2 values(null,'小红','男',20,'2020-9-1','java1班','xh@126.com');
insert into t_student2 values(default,'小刚','男',20,'2020-9-1','java1班','xg@126.com');

-- 查看数据
select * from t_student2;

-- 删除表
drop table t_student2;

结果:???  —— 原因见上

2、约束从作用上可以分为两类

(1)   表级约束:可以约束表中任意一个或多个字段。与列定义相互独立,不包含在列定义中;   

        多个定义(约束)之间用‘,’分隔;必须指出要约束的列的名称;

(2)   列级约束:包含在列定义中,直接跟在该列的其它定义之后 ,用空格分隔;不必指定列名;

列级约束—— 见上面

表级约束 —— 示例:
注意自增约束非空约束默认值约束 只能通过 列级约束 进行添加

-- 创建数据库表:
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)
);
-- 添加数据:
insert into t_student values (1,'张三','男',21,'2023-9-1','java01班','zs@126.com');
-- > 3819 - Check constraint 'ck_stu_sex' is violated.
-- > 3819 - Check constraint 'ck_stu_age' is violated.
-- > 1062 - Duplicate entry 'zs@126.com' for key 't_student.uq_stu_email'
insert into t_student values (3,'李四','男',21,'2023-9-1','java01班','zs@126.com');
-- 查看数据:
select * from t_student;

3、在创建表以后添加约束

示例:

-- 创建数据库表:
create table t_student(
        sno int(6), 
        sname varchar(5) not null, 
        sex char(1) default '男',
        age int(3),
        enterdate date,
        classname varchar(10),
        email varchar(15)
);
-- > 1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key
-- 错误的解决办法:就是auto_increment去掉
-- 在创建表以后添加约束:
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);
-- 查看表结构:—— 可以看到约束条件
desc t_student;

验证约束添加成功: —— 查看表结构

 也可以: 选定表—>右键选择 “设计表”

4、总结

1)主键约束 

        主键约束(PRIMARY KEY,缩写PK),是数据库中最重要的一种约束,其作用是约束表中的某个字段可以唯一标识一条记录。因此,使用主键约束可以快速查找表中的记录。就像人的身份证、学生的学号等等,设置为主键的字段取值不能重复(唯一),也不能为空(非空),否则无法唯一标识一条记录。

        主键可以是单个字段,也可以是多个字段组合对于单字段主键的添加可使用表级约束,也可以使用列级约束;而对于多字段主键的添加只能使用表级约束。

2)非空约束 

        非空约束(NOT NULL,缩写NK)规定了一张表中指定的某个字段的值不能为空(NULL)。设置了非空约束的字段,在插入的数据为NULL时,数据库会提示错误,导致数据无法插入。

无论是单个字段还是多个字段,非空约束的添加只能使用列级约束(非空约束无表级约束)。

为已存在表中的字段添加非空约束 :

alter table t_student modify sex char(1) not null;  

使用ALTER TABLE语句删除非空约束 :

alter table t_student modify sex vchar(1) null;  

3)唯一约束

        唯一约束(UNIQUE,缩写UK)比较简单,它规定了一张表中指定的某个字段的值不能重复,即这一字段的每个值都是唯一的。如果想要某个字段的值不重复,那么就可以为该字段添加为唯一约束。

        无论单个字段还是多个字段唯一约束的添加均可使用列级约束和表级约束。

4)检查约束

        检查约束(CHECK)用来限制某个字段的取值范围,可以定义为列级约束,也可以定义为表级约束。MySQL8开始支持检查约束。 

5)默认值约束 

        默认值约束(DEFAULT)用来规定字段的默认值。如果某个被设置为DEFAULT约束的字段没插入具体值,那么该字段的值将会被默认值填充。

     默认值约束的设置与非空约束一样,也只能使用列级约束。

6)字段值自动增加约束

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

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

为已存在表中的字段添加自增约束 

alter  table t_student3  modify sno int(6)  auto_increment;

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

alter table t_studen3  modify  sno int(6);

二、外键约束

1、什么是外键约束?

        外键约束(FOREIGN KEY,缩写FK)是用来实现数据库表的参照完整性的。外键约束可以使两张表紧密的结合起来,特别是针对修改或者删除的级联操作时,会保证数据的完整性。
        外键是指表中某个字段的值依赖于另一张表中某个字段的值,而被依赖的字段必须具有主键约束或者唯一约束。被依赖的表我们通常称之为父表或者主表,设置外键约束的表称为子表或者从表。

        举个例子:如果想要表示学生和班级的关系,首先要有学生表和班级表两张表,然后学生表中有个字段为stu_clazz(该字段表示学生所在的班级),而该字段的取值范围由班级表中的主键cla_no字段(该字段表示班级编号)的取值决定。那么班级表为主表,学生表为从表,且stu_clazz字段是学生表的外键。通过stu_clazz字段就建立了学生表和班级表的关系。

主表(父表):班级表  -  班级编号 - 主键
从表(子表):学生表 - 班级编号 - 外键

2、sql语言示例

-- 先建父表:班级表
create table t_class(
	cno int(4) primary key auto_increment,
	cname varchar(10) not null,
	room char(4)
);

-- 查看表格数据
select * from t_class;

-- 添加班级数据
insert into t_class values(null,'java001','r803');
insert into t_class values(null,'java002','r259');
insert into t_class values(null,'大数据001','r651');
-- 上面依次添加 比较麻烦
-- 可以一次性添加多条数据
insert into t_class values(null,'java001','r803'),(null,'java002','r259'),(null,'大数据001','r651');

-- 查看表结构:—— 可以看到约束条件
desc t_class;
-- 删除表:
drop table t_class;

-- 创建子表,学生表:
create table t_student4(
        sno int(6) primary key auto_increment, 
        sname varchar(5) not null, 
				-- classname varchar(10), -- 这个就不用了
				-- -- 取值参考t_class表中的cno字段,不要求字段名字完全重复,但是类型长度定义 尽量要求相同。
        classno int(4)  -- 取值参考t_class表中的cno字段,不要求字段名字完全重复,但是类型长度定义 尽量要求相同。
);
select * from t_student4;

desc t_student4;
drop table t_student4;

-- 添加学生信息
insert into t_student4 values(null ,'张三',1),(null ,'李四',1),(null ,'王五',2);


-- 出现问题:
-- 1.添加一个学生对应的班级编码为4:
insert into t_student4 values (null,'丽丽',4);-- 但是根本就没有班级编码为4的班级
-- 2.删除班级2:
delete from t_class where cno = 2; -- 但是对应班级下的学生根本删除不掉
-- 出现问题的原因:
-- 因为你现在的外键约束,没用语法添加进去,现在只是逻辑上认为班级编号是外键,没有从语法上定义

-- 解决办法,添加外键约束:
-- 注意:外键约束只有表级约束,没有列级约束: —— 创建表的时候就添加外键约束(并且只有表级约束)
create table t_student4(
        sno int(6) primary key auto_increment, 
        sname varchar(5) not null, 
        classno int(4),-- 取值参考t_class表中的cno字段,不要求字段名字完全重复,但是类型长度定义 尽量要求相同。
        constraint fk_stu_classno foreign key (classno) references t_class (cno)
);

-- 或者,这样:
create table t_student4(
        sno int(6) primary key auto_increment, 
        sname varchar(5) not null, 
        classno int(4)
);
-- 在创建表以后添加外键约束:
alter table t_student4 add constraint fk_stu_classno foreign key (classno) references t_class (cno)

-- 上面的两个问题都解决了:
-- 添加学生信息:
-- > 1452 - Cannot add or update a child row: a foreign key constraint fails (`mytestdb`.`t_student`, CONSTRAINT `fk_stu_classno` FOREIGN KEY (`classno`) REFERENCES `t_class` (`cno`))
insert into t_student4 values (null,'张三',1),(null,'李四',1),(null,'王五',2);

-- 删除班级1:
-- 2.删除班级2:
insert into t_student4 values (null,'张三',3),(null,'李四',3),(null,'王五',3);
-- > 1451 - Cannot delete or update a parent row: a foreign key constraint fails (`mytestdb`.`t_student`, CONSTRAINT `fk_stu_classno` FOREIGN KEY (`classno`) REFERENCES `t_class` (`cno`))
delete from t_class where cno = 3; -- 有学生在3班,故不能轻易的删除

3、外键策略

示例:

-- 学生表删除:
drop table t_student;
-- 班级表删除:
drop table t_class;
-- 注意:先删除从表,再删除主表。(视频中这个位置笔误,笔记现在已经更正)
-- 先创建父表:班级表:
create table t_class(
        cno int(4) primary key auto_increment,
        cname varchar(10) not null,
        room char(4)
)
-- 可以一次性添加多条记录:
insert into t_class values (null,'java001','r803'),(null,'java002','r416'),(null,'大数据001','r103');
-- 添加学生表,添加外键约束:
create table t_student(
        sno int(6) primary key auto_increment, 
        sname varchar(5) not null, 
        classno int(4),-- 取值参考t_class表中的cno字段,不要求字段名字完全重复,但是类型长度定义 尽量要求相同。
        constraint fk_stu_classno foreign key (classno) references t_class (cno)
);
-- 可以一次性添加多条记录:
insert into t_student values (null,'张三',1),(null,'李四',1),(null,'王五',2),(null,'朱六',3);
-- 查看班级表和学生表:
select * from t_class;
select * from t_student;
-- 删除班级2:如果直接删除的话肯定不行因为有外键约束:
-- 加入外键策略:
-- 策略1:no action 不允许操作
-- 通过操作sql来完成:
-- 先把班级2的学生对应的班级 改为null 
update t_student set classno = null where classno = 2;
-- 然后再删除班级2:
delete from t_class where cno = 2;
-- 策略2:cascade 级联操作:操作主表的时候影响从表的外键信息:
-- 先删除在重新添加:
-- 先删除之前的外键约束:
alter table t_student drop foreign key fk_stu_classno;
-- 重新添加外键约束:
alter table t_student add constraint fk_stu_classno foreign key (classno) references t_class (cno) on update cascade on delete cascade;

-- 试试更新:—— 直接更新不行,必须先执行上面两步
update t_class set cno = 5 where cno = 3;
-- 试试删除:
delete from t_class where cno = 5;
-- 策略3:set null  置空操作:
-- 先删除之前的外键约束:
alter table t_student drop foreign key fk_stu_classno;
-- 重新添加外键约束:
alter table t_student add constraint fk_stu_classno foreign key (classno) references t_class (cno) on update set null on delete set null;
-- 试试更新:
update t_class set cno = 8 where cno = 1;
-- 注意:
-- 1. 策略2 级联操作  和  策略3 的  删除操作  可以混着使用:
-- 如:后面用(混着写):on update cascade on delete set null -- 即更新的时候为级联,删除的时候为置空
alter table t_student add constraint fk_stu_classno foreign key (classno) references t_class (cno) on update cascade on delete set null ;
-- 2.应用场合:
-- (1)朋友圈删除,点赞。留言都删除  --  级联操作
-- (2)解散班级,对应的学生 置为班级为null就可以了,-- set null

三、DDL和DML的补充

1、SQL示例

-- 创建表:
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(age>=18 and age<=50),
        enterdate date,
        classname varchar(10),
        email varchar(15) unique
);
-- 添加数据:
insert into t_student values (null,'张三','男',21,'2023-9-1','java01班','zs@126.com');
insert into t_student values (null,'李四','男',21,'2023-9-1','java01班','ls@126.com');
insert into t_student values (null,'露露','男',21,'2023-9-1','java01班','ll@126.com');
-- 查看学生表:
select * from t_student;
-- 添加一张表:快速添加:结构和数据跟t_student 都是一致的
create table t_student2
as
select * from t_student;
select * from t_student2;
-- 快速添加,结构跟t_student一致,数据没有:
create table t_student3
as
select * from t_student where 1=2;
select * from t_student3;
-- 快速添加:只要部分列,部分数据:
create table t_student4
as
select sno,sname,age from t_student where sno = 2;
select * from t_student4;
-- 删除数据操作 :清空数据 (不是删除表,删除表用drop)
delete from t_student;
-- 或:
truncate table t_student;

2、delete和truncate的区别

        从最终的结果来看,虽然使用TRUNCATE操作和使用DELETE操作都可以删除表中的全部记录,但是两者还是有很多区别的,其区别主要体现在以下几个方面:
(1)DELETE为数据操作语言DML;TRUNCATE为数据定义语言DDL。
(2) DELETE操作是将表中所有记录一条一条删除直到删除完;TRUNCATE操作则是保留了表的结构,重新创建了这个表,所有的状态都相当于新表。因此,TRUNCATE操作的效率更高
(3)DELETE操作可以回滚;TRUNCATE操作会导致隐式提交,因此不能回滚(在第十章中会讲解事务的提交和回滚)。
(4)DELETE操作执行成功后会返回已删除的行数(如删除4行记录,则会显示“Affected rows:4”);截断操作不会返回已删除的行量,结果通常是“Affected rows:0”。DELETE操作删除表中记录后,再次向表中添加新记录时,对于设置有自增约束字段的值会从删除前表中该字段的最大值加1开始自增;TRUNCATE操作则会重新从1开始自增。

刨析数据库完整性——检查约束(Check)
emowater
02-21 4298
检查约束概念 Review:数据完整性约束完整性约束中列的完整性、特定的数据类型或约束,可以使用非空、默认值、数据类型和检查(Check)来实现 创建学生检查约束 1.为学生设置检查约束(Check) 设计器 - 右击- CHECK 约束 为性别字段设置检查约束: 控制性别只能输入男和女,输入:sex = ‘男’ or sex = '女’ 为email 为 telephone 设置检查约束:控制电话号码的长度为11位,使用长度函数length,输入len(telephone) =
MySql系列04:MySql完整性约束
weixin_40964170的博客
01-31 803
为防止不符合规范的数据存入数据库,在用户对数据进行插入、修改、删除等操作时,MySQL提供了一种机制来检查数据库中的数据是否满足规定的条件,以保证数据库中数据的准确性和一致性,这种机制就是完整性约束。 MySQL中主要支持以下几种种完整性约束,如所示。 其中Check约束是MySQL8中提供的支持。 约束条件 约束描述 PRIMARY KEY 主键约束约束字段的值可唯一地标识对应的记录 NOT NULL 非空约束约束字段的值不能为空 UNIQUE 唯一约束约束字段的值是唯一的
10.24 知识总结(创建的完整语法、约束条件)
最新发布
weixin_66010453的博客
10-24 86
create table 名(字段名1 类型[(宽度) 约束条件],字段名2 类型[(宽度) 约束条件],字段名3 类型[(宽度) 约束条件]#解释:类型:使用限制字段必须以什么样的数据类型传值约束条件:约束条件是在类型之外添加一种额外的限制# 注意:1. 在同一张中,字段名是不能相同2. 宽度和约束条件(可选),字段名和类型是必须的3、最后一个字段后不加逗号。
完整运动约束和非完整运动约束
weixin_44370585的博客
04-12 6545
运动规划的有很多分类方式, 按完整运动约束和非完整运动约束来分类也是其中之一。 能够消除位置空间自由度的叫做完整运动约束, 如:关节型机器人,每个关节会消除一定量的自由度; 不能够消除位置空间自由度但能消除如速度空间自由度的,叫非完整运动约束。如:车型机器人,它在轮的轴向方向不能运动,这个约束就是非完整运动约束。这只是非完整运动约束的形象描述,至于严格定义就不说了。 但总的来说:非完整运动约束比完整运动约束复杂,但解决完整运动约束的方法可以通过引申应用到非完整运动约束中。 质点系的约束是指对系统内各质点运动
MySQL学习记录
qq_44787950的博客
07-19 1887
MySQL学习记录 一、sql语言入门 我们都知道,数据库管理人员(DBA)通过数据库管理系统(DBMS)可以对数据库(DB)中的数据进行操作,但具体是如何操作的呢?这就涉及到我们本节要讲的SQL语言。 SQL(Structured Query Language)是结构化查询语言的简称,它是一种数据库查询和程序设计语言,同时也是目前使用最广泛的关系型数据库操作语言。在数据库管理系统中,使用SQL语言来实现数据的存取、查询、更新等功能。SQL是一种非过程化语言,只需提出“做什么”,而不需要指明“怎么做”。 S
精通SQL--结构化查询语言详解
12-11
14.1.2 完整性约束的类型 281 14.2 与有关的约束 282 14.2.1 列约束约束的创建 282 14.2.2 not null(非空)约束 282 14.2.3 unique(惟一)约束 284 14.2.4 primary key(主键)约束 285 14.2.5 ...
快学 scala 中文版 带完整目录
12-10
15.6.2 跳转生成与内联 252 15.6.3 可省略方法 253 15.6.4 基本类型的特殊化 254 15.7 用于错误和警告的注解 255 练习 256 第16章 XML处理 A2 259 16.1 XML字面量 260 16.2 XML节点 260 16.3 元素属性 262...
MySQL主键约束(PRIMARY KEY ,PK)
weixin_43270539的博客
02-24 2492
MySQL主键约束(PRIMARY KEY ,PK)MySQL主键约束(PRIMARY KEY ,PK)
Mysql中触发器的创建和效果 - 场景2:实现约束
weixin_45580903的博客
10-22 579
假设有个需求,向employee中新增员工时,工资不准低于5000元。 1、使用check约束来实现 2、使用触发器来实现(触发器一般用来实现更复杂的约束,比如需要同时对多个中的数据进行判断等,我们这里简单示例一下) 1、用check约束来实现 create table employee_1( eno int primary key, ename varchar(100), deptno varchar(100), job varchar(100), sal float, check (sal>=
mysql check constraint doesn't work
hsnotebook的专栏
09-01 530
问题今天创建了一个,想对其中一个字段进行数值范围限定,如:create table persons ( id int primary key auto_increment, name varchar(255) not null, age int, check (age > 0 and age < 150) );那好后,还是能插入age不为0~150范围内的值的记录
mysql 主
puspos的博客
07-20 493
班级和学生:班级和学生是1对多的关系,学生中有个外键class_id references到班级的id 则班级是主,学生是从
主键约束(primary key,简称PK)
qq_37753562的博客
01-20 8947
主键约束的相关术语? 主键约束:就是一种约束。 主键字段:该字段上添加了主键约束,这样的字段叫做:主键字段 主键值:主键字段中的每一个值都叫做:主键值。 什么是主键?有啥用? 主键值是每一行记录的唯一标识。 主键值是每一行记录的身份证号!!! 记住:任何一张都应该有主键,没有主键,无效!! 主键的特征:not null + unique(主键值不能是NULL,同时也不能...
完整性约束
wei7a7a7a的博客
02-24 1594
一张中只能有一个自增长字段,并且该字段必须定义了约束(该约束可以是主键约束、唯一约束以及外键约束),如果自增字段没有定义约束,数据库则会提示“Incorrect table definition;主键约束(PRIMARY KEY,缩写PK),是数据库中最重要的一种约束,其作用是约束中的某个字段可以唯一标识一条记录。唯一约束(UNIQUE,缩写UK)比较简单,它规定了一张中指定的某个字段的值不能重复,即这一字段的每个值都是唯一的。与定义用‘,’分隔;默认值约束的设置与非空约束一样,也只能使用列级约束
mysql3819错误_MySQL 8 中检查约束的使用
weixin_42328834的博客
01-20 4216
什么是“检查约束”?这是一项新功能,用于指定在插入或更新到一行之前检查值的条件。如果的任何行的搜索条件的结果为 FALSE,则约束可能返回错误(但如果结果为 UNKNOWN 或 TRUE,则约束不会返回错误)。此功能开始在 MySQL 8.0.16 上运行,在以前的版本中,我们可以创建它,但它不起作用,这意味着支持语法,但不起作用。要牢记的使用规则:AUTO_INCREMENT 自增列不允许使用...
数据库学习记录(下)
jigsaw_zyx的博客
05-24 1169
约束与索引 完整性约束子句 constraint 约束约束条件 -- 增加约束 sno varchar(20) constraint c1 check(sno between 900 and 999) -- 删除约束条件 alter table student drop constraint c1; 修改中的完整性限制 -- 为Student的Sage列添加约束,使其取值小于30岁(约束名:stu_chk_sage) alter table student add constraint stu_
SQL基础语法
buzhidao2333shuosha的博客
11-25 383
待续
主键约束(PRIMARY KEY, PK)
zby2018的博客
02-05 8933
主键约束(PRIMARY KEY, PK) 主键约束=非空约束+唯一约束。也就是说设置为主键列,不能够为空,不能够重复。 范例:定义主键约束 --删除数据 DROP TABLE member PURGE; --清空回收站 PURGE RECYCLEBIN; --创建数据 CREATE TABLE member( mid NUMBER, name VARCHAR2(20) NOT NU...
sql server 数据完整性约束
10-10
SQL Server 数据完整性约束是用来保证数据的一致性和有效性。它们定义了一些规则,限制了对中数据的修改操作。以下是几种常见的完整性约束: 1. 主键约束(Primary Key Constraint):用于唯一标识中的每一行数据,并确保每个值都是唯一的。主键约束要求列中的值不能为空。 2. 外键约束(Foreign Key Constraint):用于建立之间的关系。外键约束要求一个中的列值必须在另一个的主键中存在。 3. 唯一约束(Unique Constraint):用于确保列中的值是唯一的,但允许空值。 4. 默认约束(Default Constraint):用于在插入新行时自动为列提供默认值。 5. 非空约束(Not Null Constraint):用于确保列中的值不为空。 6. 检查约束(Check Constraint):用于定义列中允许的值的范围或条件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • super关键字的使用 4177
  • C语言命令行参数讲解 3367
  • this关键字的使用 1268
  • APR教程 - 1 1232
  • 4 - spring对象的获取及属性赋值方式 - 1 1190

分类专栏

  • JavaSE 56篇
  • 工具 10篇
  • 数据库 9篇
  • spring 14篇
  • springboot 1篇
  • 多线程 6篇
  • SpringMVC  3篇
  • C语言基础知识 2篇

最新评论

  • springboot 创建第一个项目

    哆啦A梦的_梦: 我也是个菜鸟表情包

  • springboot 创建第一个项目

    get嘤嘤嘤: 文章内容丰富,条理清晰,值得一波关注,如沐春风,配图也很有趣,希望作者也指点我一番!🍒🍒🍒

大家在看

  • 大数据分析-二手车用户数据可视化分析 1051
  • 整理好了!2024年最常见 20 道设计模式面试题(三)
  • 从11个视角看全球Rust程序员3/4:深度解读JetBrains最新报告
  • BootStrap 31
  • 【Keil5+STM32F1报错记录(长期更新)】

最新文章

  • springboot - 原理初探
  • springboot 创建第一个项目
  • 6 - 线程池 综合案例
2022年101篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

聚圣源在难搞的日子笑出声来猫石对话今年小男孩起名字王氏的男孩起名大全数理起名最佳笔画组合定字起名称程立雪男孩起名字测试打分免费天刀父母有姓氏起名以史为鉴开创未来2020起名字女儿想吃你的糖曹操字什么爬山梗适合女孩起名的诗句词门头起名测试打分惠普电脑怎么样起名缺火缺木女孩子莽荒纪动画qq等级排名泰胜风能股票美食广场起名香草天空儿童起名 五行2个字品牌起名大全起名多少笔画属火有创意烟酒商业起名谈判专家演员表贾起名字淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化