13_MySQL中的约束(一)

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 13_MySQL中的约束(一)

1. 约束(constraint)概述


1.1 为什么需要约束


数据完整性(Data Integrity)是指数据的 精确性 (Accuracy)和 可靠性 (Reliability)。它是防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的。 为了保证数据的完整性,SQL 规范以约束的方式对 表数据进行额外的条件限制 。从以下四个方面考虑:

实体完整性( Entity Integrity ) :例如,同一个表中,不能存在两条完全相同无法区分的记录

域完整性( Domain Integrity ) :例如:年龄范围 0-120 ,性别范围 “ 男 / 女 ”

引用完整性( Referential Integrity ) :例如:员工所在部门,在部门表中要能找到这个部门

用户自定义完整性( User - defined Integrity ) :例如:用户名唯一、密码不能为空等,本部门经理的工资不得高于本部门职工的平均工资的5 倍。


1.2 什么是约束


约束是表级的 强制规定 。

可以在 创建表时规定约束(通过 CREATE TABLE 语句) ,或者在 表创建之后通过 ALTER TABLE 语句规定 约束 。


1.3 约束的分类


根据约束数据列的限制,约束可分为:

单列约束:每个约束只约束一列

多列约束:每个约束可约束多列数据

根据约束的作用范围,约束可分为:

列级约束:只能作用在一个列上,跟在列的定义后面

表级约束:可以作用在多个列上,不与列一起,而是单独定义

                  位置                       支持的约束类型                             是否可以起约束名

列级约束: 列的后面                语法都支持,但外键没有效果       不可以

表级约束: 所有列的下面         默认和非空不支持,其他支持       可以(主键没有效果)

根据约束起的作用,约束可分为:

NOT NULL 非空约束,规定某个字段不能为空

UNIQUE 唯一约束,规定某个字段在整个表中是唯一的

PRIMARY KEY 主键(非空且唯一)约束

FOREIGN KEY 外键约束

CHECK 检查约束

DEFAULT 默认值约束

注意:MySQL不支持check约束,但可以使用check约束,而没有任何效果

查看某个表已有的约束


#information_schema数据库名(系统库)
#table_constraints表名称(专门存储各个表的约束)
SELECT * FROM information_schema.table_constraints
WHERE table_name = '表名称';


SELECT * FROM information_schema.table_constraints
WHERE table_name = 'employees';


5d7614b59b99ff47b6486e7ec719a632_41f5a68b5f8b4c3e8d5aaa79328deb75.png


2. 非空约束


2.1 作用


限定某个字段 / 某列的值不允许为空


fc1b00898c332b9e879ffb5a7d110320_38cdb607d2a642929e0e4257da4860d9.png


2.2 关键字


NOT NULL


2.3 特点


默认,所有的类型的值都可以是NULL,包括INT、

FLOAT等数据类型

非空约束只能出现在表对象的列上,只能某个列单独限定非空,不能组合非空

一个表可以有很多列都分别限定了非空

空字符串''不等于NULL,0也不等于NULL


2.4 添加非空约束


(1)建表时


CREATE TABLE 表名称(
字段名 数据类型,
字段名 数据类型 NOT NULL,
字段名 数据类型 NOT NULL
);


(2)建表后


alter table 表名称 modify 字段名 数据类型 not null;


2.5 删除非空约束


alter table 表名称 modify 字段名 数据类型 NULL;#去掉not null,相当于修改某个非注解字段,
该字段允许为空
alter table 表名称 modify 字段名 数据类型;#去掉not null,相当于修改某个非注解字段,
该字段允许为空


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
存储 关系型数据库 MySQL
【MySQL】6. 表的约束
【MySQL】6. 表的约束
19 0
|
4月前
|
关系型数据库 MySQL 数据库
MySQL数据库——约束
MySQL数据库——约束
|
2月前
|
SQL 关系型数据库 MySQL
【MySQL 数据库】2、MySQL 的数据控制语言、函数和约束
【MySQL 数据库】2、MySQL 的数据控制语言、函数和约束
33 0
|
1月前
|
SQL 关系型数据库 MySQL
轻松入门MySQL:深入学习数据库表管理,创建、修改、约束、建议与性能优化(3)
轻松入门MySQL:深入学习数据库表管理,创建、修改、约束、建议与性能优化(3)
|
1月前
|
存储 关系型数据库 MySQL
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
|
3天前
|
SQL 关系型数据库 MySQL
MySQL数据库的约束+进阶版新增与查询-2
MySQL数据库的约束+进阶版新增与查询
12 1
|
3天前
|
关系型数据库 MySQL 测试技术
MySQL数据库的约束+进阶版新增与查询-1
MySQL数据库的约束+进阶版新增与查询
13 1
|
13天前
|
关系型数据库 MySQL 数据库
【MySQL】:约束全解析
【MySQL】:约束全解析
24 0
|
14天前
|
NoSQL 关系型数据库 MySQL
【MySQL探索之旅】MySQL数据表的增删查改——约束
【MySQL探索之旅】MySQL数据表的增删查改——约束
|
16天前
|
存储 关系型数据库 MySQL
{MySQL} 数据库约束& 表的关系& 新增&&删除& 修改& 查询
{MySQL} 数据库约束& 表的关系& 新增&&删除& 修改& 查询
20 0