Mysql数据库的约束类型

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Mysql数据库的约束类型

Mysql数据库的约束类型有:主键约束(Primary Key),外键约束(Foreign Key),非空约束(Not Null),唯一性约束(Unique),默认约束(Default)。

MySQL关键字 含义
NULL 数据列可包含NUL值
NOT NULL 数据列不允许包含NULL值
DEFAULT 默认值
PRIMARY KEY 主键
AUTO_INCREMENT 自动递增,适用于整数类型 UNSIGNED 无符号
CHARACTER SET name 指定一个字符集

1.非空约束

就是限制数据库中某个字段中的值是否可以为空,null字段值表示可以为空,not null字段值表示不能为空.

create table testnull(
id int,
username varchar(20) not null
)charset=utf8;
insert into testnull(id,username) values(1,'catgod007');
insert into testnull(id) values(2);
select * from testnull;
desc testnull;      

2.唯一约束.

字段添加唯一约束之后,该字段的值不能重复,也就是说在一列当中不能出现一样的值。

例:添加唯一约束

alter table testnull add unique(id);
insert into testnull(id,username) values(1,'cat');
select * from testnull;

例:取消唯一约束

Alter table  testnull drop index id;
insert into testnull(id,username) values(1,'cat');
select * from testnull;

3.主键约束

主键保证记录的唯一性,主键自动为not null

每张数据表只能存在一个主键 not null + unique key

一个unique key又是一个not null的时候,那么它被当做PRIMARY KEY主键

当一张表里没有一个主键的时候,第一个出现的非空且为唯一的列被视为有主键。

create table user(
id int primary key,
name varchar(20),
number int)
charset=utf8;
insert into user(id,name,number)values(1,'catgod007',1);
select * from user;
select * from user;
select * from user;

4.自增长

自增auto_increment自动编号,且必须与主键组合使用默认情况下,起始值为1,每次的增量为1。当插入记录时,如果为auto_increment数据列明确指定了一个数值,则会出现两种情况:

如果插入的值与已有的编号重复,则会出现出错信息,因为AUTO_INCREMENT数据列的值必须是唯一的;

如果插入的值大于已编号的值,则会把该插入到数据列中,并使在下一个编号将从这个新值开始递增。也就是说,可以跳过一些编号。

如果自增序列的最大值被删除了,则在插入新记录时,该值被重用。

例:添加自增长

alter table user change id id int not null auto_increment;
desc user;
select * from user;
insert into user(name,number)values('catgod007',1);
select * from user

例:删除自增长

desc user;
alter table user change id id int not null ;
desc user;

5.默认约束

例:设置默认值

alter table user alter number set default 0;
desc user;
select * from user;
insert into user(id,name)values(6,'catgod');
select * from user;

6.外键约束

外键约束要求数据表的存储引擎只能为InnoDB

查看当前mysq服务器支持的存储引擎

show engines;

编辑数据表的默认存储引擎

vi /etc/my.cnf

将带engines的小字段改为INNODB,并保存退出

重启数据库

systemctl restart mysqld

create table teacher(
id int primary key auto_increment,
name varchar(20) not null)
charset=utf8;
create table student(
id int primary key auto_increment,
name varchar(20) not null,
teacher_id int,
foreign key(teacher_id) references teacher(id))
charset=utf8;
insert into teacher(id,name)values(1,'catgod007');
select * from teacher;
insert into student(id,name,teacher_id)values(3,'catgod7',1);
select * from teacher;
select * from student;

注意:

如果约束不生效可以先设置一下sql_mode

set session sql_mode='STRICT_TRANS_TABLES';

感谢大家,点赞,收藏,关注,评论!

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
NoSQL 关系型数据库 MySQL
2024Mysql And Redis基础与进阶操作系列(4-2)作者——LJS[含MySQL非空、唯一性、PRIMARY KEY、自增列/自增约束举例说明等详解步骤及常见报错问题对应的解决方法]
24MySQL非空、唯一性、PRIMARY KEY、自增列/自增约束举例说明等详解步骤及常见报错问题对应的解决方法(4-2) 学不会你来砍我!!!
|
13天前
|
存储 SQL 关系型数据库
【MySQL基础篇】MySQL约束语法
文章介绍了MySQL中表的约束概念,包括非空、唯一、主键、默认和外键约束,以及如何在创建和修改表时指定这些约束。外键约束用于保持数据的一致性和完整性,文章通过示例展示了添加、删除外键的语法,并讨论了不同的删除/更新行为,如CASCADE和SETNULL。
【MySQL基础篇】MySQL约束语法
|
24天前
|
存储 关系型数据库 MySQL
mysql怎么查询longblob类型数据的大小
通过本文的介绍,希望您能深入理解如何查询MySQL中 `LONG BLOB`类型数据的大小,并结合优化技术提升查询性能,以满足实际业务需求。
89 6
|
12天前
|
存储 关系型数据库 MySQL
MySQL(条件约束)
为了校验数据,让数据的正确性能够得到保证,约束,能够引进更多的检查操作,但是也会增加系统的成本开销
|
2月前
|
关系型数据库 MySQL 数据处理
MySQL函数与约束
MySQL 提供了丰富的函数和强大的约束机制,用于数据处理和完整性维护。通过掌握这些工具,可以有效地管理和分析数据库中的数据,确保数据的一致性和准确性。无论是在日常数据查询中使用内置函数,还是在数据库设计中应用各种约束,都是确保数据库系统稳定、高效运行的关键。希望本文对您理解和应用 MySQL 函数与约束有所帮助。
37 1
|
2月前
|
分布式计算 关系型数据库 MySQL
SpringBoot项目中mysql字段映射使用JSONObject和JSONArray类型
SpringBoot项目中mysql字段映射使用JSONObject和JSONArray类型 图像处理 光通信 分布式计算 算法语言 信息技术 计算机应用
62 8
|
3月前
|
关系型数据库 MySQL
用dbeaver创建一个enum类型,并讲述一部分,mysql的enum类型的知识
这篇文章介绍了如何在DBeaver中创建MySQL表的枚举(ENUM)字段,并探讨了MySQL中ENUM类型的一些行为特点,例如ENUM值的默认排序和在插入重复值时的表现。
65 1
用dbeaver创建一个enum类型,并讲述一部分,mysql的enum类型的知识
|
3月前
|
Ubuntu 关系型数据库 MySQL
ubuntu使用aliyun源+mysql删除有外键约束的数据+查看特定目录的大小
ubuntu使用aliyun源+mysql删除有外键约束的数据+查看特定目录的大小
91 4
|
3月前
|
存储 移动开发 数据库
HTML5 Web IndexedDB 数据库常用数据存储类型
IndexedDB 支持多种数据存储类型,满足复杂数据结构的存储需求。它包括基本数据类型(如 Number、String、Boolean、Date)、对象(简单和嵌套对象)、数组、Blob(用于二进制数据如图像和视频)、ArrayBuffer 和 Typed Arrays(处理二进制数据)、结构化克隆(支持 Map 和 Set 等复杂对象),以及 JSON 数据。尽管不直接支持非序列化数据(如函数和 DOM 节点),但可以通过转换实现存储。开发者应根据具体需求选择合适的数据类型,以优化性能和使用体验。
|
2月前
|
关系型数据库 MySQL Java
SpringBoot项目中mysql字段映射使用JSONObject和JSONArray类型
SpringBoot项目中mysql字段映射使用JSONObject和JSONArray类型
39 0

热门文章

最新文章

推荐镜像

更多