MySQL表操作:提高数据处理效率的秘诀(进阶)(1)

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

💕“生命不在于相信奇迹,而在于创造奇迹。”——朱学恒💕
🐼作者:不能再留遗憾了🐼
🎆专栏:MySQL学习🎆
🚗本文章主要内容:MySQL对表操作进阶。数据库约束、表的设计、新增,后续会更新进阶表的查询🚗
在这里插入图片描述

@[toc]

前言

前面我们已经介绍过初识MySQL以及MySQL对库和对表操作(初阶),那么今天我将为大家分享MySQL对表操作(进阶)。如果大家觉得对你有帮助的话。记得点个赞哦。😊

1.数据库约束

NULL约束

指定某列不能存储NULL值。

在之前我们创建一个表的时候,我们会发现除了我们指定的表名、列名和列名对应的数据类型外,还会额外展现其他的信息,那么这些信息代表什么意思呢?我将会为大家一一介绍。
在这里插入图片描述
NULL这一列的YES说明,该列内容可以为null,那么如果我们不想让该列出现null该怎么办呢?

NOT NULL 使得指定列的内容不能为null。

create table 表名 (列名 类型 not null);
AI 代码解读
 create table student (id int not null,name varchar(20));
 desc student;
 insert into student values (1,'张三');
  insert into student values (null,'李四');
AI 代码解读

在这里插入图片描述
当我们使用 NOT NULL 约束了列之后,如果插入该列的内是null就会报错

UNIQUE:唯一约束

在日常很多情况下,我们会要求数据的唯一性,也就是说不出现重复的数据,而在MySQL中也可以对表操作保证数据的唯一性。

create table 表名 (列名 类型 unique);
AI 代码解读

UNIQUE唯一约束会在插入数据之前检测列中的数据是否已经存在,如果存在就不能插入,不存在就允许插入。

create table student (id int unique,name varchar(20));
desc student;
insert into student values (1,'张三');
insert into student values (1,'李四');
AI 代码解读

在这里插入图片描述

key中的UNI表示该列存在UNIQUE唯一约束,该列不能出现重复数据。

DEFALUT:默认值约束

在这里插入图片描述
在这里插入图片描述

当进行指定列插入的时候,那么那些未插入数据的列的内容将会被默认DEFAULT为null,如果我们不想默认值为null怎么办呢?

create table 表名 (列名 类型 default 默认值);
AI 代码解读

DEFAULT设置默认值

create table student (id int,name varchar(20) default '无名氏');
desc student;
insert into student (id) values (1);
select * from student;
AI 代码解读

在这里插入图片描述

primary key:主键约束

primary key主键约束就类似于我们的身份证和学生证,是每个人所特有的,也就是说primary key是每行的关键数据,它不可为null,也不可重复。 ==一个表中只能有一个主键==

create table 表名 (列名 类型 primary key);
AI 代码解读
create table student (id int primary key,name varchar(20));
desc student;
insert into student values (null,'张三');
 insert into student values (1,'张三');
  insert into student values (1,'李四');
AI 代码解读

在这里插入图片描述

primary key 通常搭配着 auto_increment 使用,表示自增主键。如果我们想要使用自增主键,只需要在插入数据的时候插入的内容是null就行了。

 create table student (id int primary key auto_increment,name varchar(20));
 desc student;
 insert into student values (null,'张三');
 insert into student values (null,'李四');
 select * from student;
AI 代码解读

在这里插入图片描述

primary key auto_increment 自增的规律是:当前面数据都为null时,从1开始自增,当前面有数据不为null时,从前面数据的最大值开始自增。

insert into student values (100,'王五');
insert into student values (4,'赵六');
insert into student values (null,'猫猫');
AI 代码解读

在这里插入图片描述

foreign key:外键约束

在学校中,我们都知道每个学生都有对应的班级,同样在MySQL中也可以将这种类似的关系体现出来。

外键用于关联其他表的主键或唯一键

create table 表名 (列名 类型 foreign key (列名) references 另一个表名(关联的列名));
AI 代码解读
create table class (classId int primary key auto_increment,name varchar(20));
create table student (studentId int primary key auto_increment,name varchar(20),classId int,
     foreign key (classId) references class(classId));
desc student;
AI 代码解读

在这里插入图片描述

既然是学生,那么肯定要先有班级然后学生才能进入班级,并且学生不能进入不存在的班级。

insert into class (null,'高三1班');
insert into class values (null,'高三2班');
insert into class values (null,'高三3班');
insert into student values (null,'张三',1);
insert into student values (null,'李四',4);
AI 代码解读

在这里插入图片描述
在这里插入图片描述
当插入的数据在外键对应的列中不含有时,就会报错。并且在以上的外键关系中,class为父表,student为子表,子表的插入和删除都受到父表的约束,同时父表的删除也受到子表的约束。

update student set classId = 5;
delete from class where classId = 1;
AI 代码解读

在这里插入图片描述
子表的修改,对应的列修改后的数据还是需要在父表中存在。父表删除的时候,如果子表与其有关联,那么就删除不了,只能先删除掉子表的对应行,然后再删除父表。

check约束

check约束在本篇文章就不过多解释了,大家有兴趣的话,可以自己去了解了解哦。

2.表的设计

一对一

两者之间是一对一的关系

在这里插入图片描述

一对多

一个人可以拥有多个宠物,但是一个宠物不可以有多个主人。
在这里插入图片描述

多对多

两者之间除了他们之间有关系外,他们还可以与其他的事物具有其他关系。
在这里插入图片描述

3.新增

如果我们想要从将一个表中的数据复制到另一个类型相同的表当中,我们可以在查询的同时就插入数据,这样就极大地提高了效率。

insert into 表名 select (列名) from 另一个表名;
AI 代码解读

需要注意的是,当从一个表中向另一个表中插入数据时,表的结构应该相同或兼容。也就是说,目标表中的所有列都应该存在于源表中,并且具有相似的数据类型和长度,否则插入将会失败。
🙌 整列复制插入

create table student (id int,name varchar(20));
insert into student values (1,'张三');
insert into student values (2,'李四');
insert into student values (3,'王五');
select * from student;
create table student1 (id int,name varchar(20));
insert into student1 select * from student;
select * from student1;
AI 代码解读

在这里插入图片描述
🙌指定列复制插入

insert into student1 (name) select name from student;
select * from student1;
AI 代码解读

在这里插入图片描述

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
3
分享
相关文章
MySQL 中 GRANT 操作会引起复制中断吗?
GRANT 操作并不是一个原子性操作,不管执行成功与否,都会触发一个隐式重载授权表的行为。 在生产环境中需要规范用户创建及授权的操作,不推荐使用 DML 语句去直接变更 mysql.user 表,可能会引发其他的问题,若使用了 DML 语句进行变更, 需要手工执行 flush privileges。
104 4
创建nodejs项目并接入mysql,完成用户相关的增删改查的详细操作
创建nodejs项目并接入mysql,完成用户相关的增删改查的详细操作
97 0
"深入探索MySQL临时表:性能优化利器,数据处理的灵活之选"
【8月更文挑战第9天】MySQL临时表专为存储临时数据设计,自动创建与删除,仅在当前会话中存在,有助于性能优化。它分为本地临时表和全局临时表(通过特定逻辑模拟)。创建语法类似于普通表,但加TEMPORARY或TEMP关键字。适用于性能优化、数据预处理和复杂查询,需注意内存占用和事务支持问题。合理使用可大幅提升查询效率。
387 2
面试题MySQL问题之简单的SELECT操作在MVCC下加锁如何解决
面试题MySQL问题之简单的SELECT操作在MVCC下加锁如何解决
66 2
实时计算 Flink版操作报错合集之从mysql读数据写到hive报错,是什么原因
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
实时计算 Flink版操作报错合集之运行mysql to doris pipeline时报错,该如何排查
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
"揭秘阿里数据同步黑科技Canal:从原理到实战,手把手教你玩转MySQL数据秒级同步,让你的数据处理能力瞬间飙升,成为技术界的新晋网红!"
【8月更文挑战第18天】Canal是一款由阿里巴巴开源的高性能数据同步系统,它通过解析MySQL的增量日志(Binlog),提供低延迟、可靠的数据订阅和消费功能。Canal模拟MySQL Slave与Master间的交互协议来接收并解析Binary Log,支持数据的增量同步。配置简单直观,包括Server和Instance两层配置。在实战中,Canal可用于数据库镜像、实时备份等多种场景,通过集成Canal Client可实现数据的消费和处理,如更新缓存或写入消息队列。
1046 0
MySQL设计规约问题之为什么应尽量避免使用子查询,而可以考虑将其优化为join操作
MySQL设计规约问题之为什么应尽量避免使用子查询,而可以考虑将其优化为join操作
MySQL设计规约问题之在数据库设计中,为什么要适当考虑反范式的表设计
MySQL设计规约问题之在数据库设计中,为什么要适当考虑反范式的表设计
MySQL设计规约问题之如何处理日志类型的表
MySQL设计规约问题之如何处理日志类型的表
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等