MySQL数据库常用操作:从入门到进阶的复习笔记

🔥MySQL数据库常用操作:从入门到进阶的复习笔记🔥

文章目录

  • 🔥MySQL数据库常用操作:从入门到进阶的复习笔记🔥
    • 一、数据库设计(DDL)
    • 二、知识表
    • 三、表设计(DDL)
    • 四、增删改(DML)
    • 五、查询(DQL)
      • 5.1 基本查询
      • 5.2 条件查询
      • 5.3 聚合查询
      • 5.4 分组查询
      • 5.5 排序查询
      • 5.6 分页查询
      • 5.7 流程控制函数
    • 六、多表查询
      • 6.1 内连接(A、B交集)
      • 6.2 外连接
      • 6.3 子查询

🚀 开篇寄语:
还在为MySQL数据库操作头疼吗?别担心,这篇复习笔记将带你从登录数据库开始,一步步掌握数据库设计、表设计、增删改查等核心操作,让你的MySQL技能瞬间起飞!

📖 精彩预告:
登录数据库: 教你如何快速登录MySQL,隐藏密码更安全!
数据库设计(DDL): 创建、删除数据库,轻松管理你的数据世界。
数据类型详解,从数值到字符串,再到日期时间,一网打尽。
表约束讲解,非空、唯一、主键等,让你的表结构更严谨。
表设计(DDL): 创建、查询、修改、删除表,一切尽在掌握。
字段添加、修改、删除,表名更改,操作简便快捷。
增删改(DML): 数据插入、删除、更新,让你的数据随心所欲地变化。
查询(DQL): 基本查询、条件查询、聚合查询、分组查询、排序查询、分页查询、多表查询,满足你所有查询需求。流程控制函数,让你的查询结果更加智能、人性化。

💡 为什么值得一读:
精炼内容:去除冗长,直击要点,让你快速掌握MySQL核心操作。
实战导向:大量实例,边学边练,快速提升你的实践能力。
大学生气质:语言简洁明了,符合大学生口味,让你一读难忘。
🔥 结语:
别再犹豫了,赶快跟随这篇复习笔记,一起开启MySQL数据库操作的大门吧!相信在不久的将来,你也能成为数据库操作的高手!

登录数据库

  • 普通登录:
mysql -u你的账号 -p你的密码
  • 隐藏密码登录:
mysql -u你的账号 -p
Enter password:你的密码

一、数据库设计(DDL)

  1. 查询
-- 查询当前所有数据库
show databases;
  1. 使用
use 数据库名;
  1. 创建
create database [if not exists] 数据库名;
  1. 删除
drop database [if exists] 数据库名;

二、知识表

数据类型

  1. 数值类型
类型大小byte描述
tinyint1小整数数值
smallint2大整数数值
mediumint3大整数数值
int4大整数数值
bigint8极大整数数值
float4单精度浮点数
double8双精度浮点数
decimal小数值(精度更高)
  1. 字符串类型
类型大小byte描述
char0-255定长字符串
varchar0-65535变长字符串
tinyblob0-255不超过255个字符的二进制数据
tinytext0-255短文本字符
blob0-65535二进制长文本数据
text0-65535长文本数据
mediumblob0-16777215二进制中等长文本
mediumtext0-16777215中等长文本
longblob0-4294967295二进制极大文本
longtext0-4294967295极大文本数据
  1. 日期时间类型
类型大小byte格式描述
date3YYYY-MM-DD日期值
time3HH:MM:SS时间值
year1YYYY年份值
datetime8YYYY-MM-DD HH:MM:SS混合日期和时间值
timestamp4YYYY-MM-DD HH:MM:SS混合日期和时间值,时间戳

表约束

约束描述关键字
非空约束字段不能为nullnot null
唯一约束字段唯一、不能重复unique
主键约束非空且唯一primary key
默认约束未指定值采用默认default
外键约束连接两张表foreign key

id 自增:primary key 后加auto_increment

三、表设计(DDL)

  1. 创建
create table 表名(
字段1 字段类型 [约束] [comment 字段1注释],
字段2 字段类型 [约束] [comment 字段1注释],
...
)[comment 表注释]
  1. 查询
-- 查询当前数据库所有表
show tables; -- 查询表结构
desc 表名; -- 查询建表语句
show create table 表名; 
  1. 修改
-- 添加字段
alter table 表名 add 字段名 类型 [comment 注释] [约束]; -- 修改字段类型
alter table 表名 modify 字段名 新数据类型; -- 修改字段名和字段类型
alter table 表名 change 旧字段名 新字段名 类型 [comment 注释] [约束];-- 删除字段
alter table 表名 drop column 字段名;-- 修改表名
rename table 表名 to 新表名; 
  1. 删除
drop table [if exists] 表名;

四、增删改(DML)

  1. 增insert
-- 指定字段添加数据
insert into 表名(字段名1,字段名2) values(值1,值2);-- 全部字段添加数据
insert into 表名 values (值1,值2,...);-- 指定字段批量添加数据
insert into 表名(字段名1,字段名2) values(值1,值2),(值1,值2);-- 全部字段批量添加数据
insert into 表名 values (值1,值2, ...),(值1,值2, ...);
  1. 删delete
delete from 表名 [where 条件];
  1. 改 update
update 表名 set 字段名1=值1, 字段名2=值2, ...[where 条件];

五、查询(DQL)

select 字段列表 from 表名列表
where  条件列表 
group by 字段分组列表
having 分组后条件列表 
order by排序字段列表
limit 分页参数

5.1 基本查询

-- 查询多个字段
select 字段1,字段2,字段3 from 表名; -- 查询所有字段
select * from 表名;-- 设置别名
select 字段 [as 别名] from 表名;-- 去除重复记录
select distinct 字段列表 from 表名;

5.2 条件查询

select 字段列表 from 表名 where 条件列表;
-- eg
-- 1.查询姓名为小明的员工
select * from emp where name = '小明';-- 2.查询id小于5的员工信息
select * from emp where id<5;-- 3.查询没有分配职位的员工信息
select * from emp where job is null;-- 4.查询入职日期在'2000-01-01'到'2010-01-01'之间的员工信息
select * from emp where entrydate>='2000-01-01' and entrydate<='2010-01-01';
select * from emp where entrydate between '2000-01-01' and '2010-01-01';-- 5.查询职位是 2(讲师),3(学生主管),4(教研主管)的员工信息
select * from emp where job in (2,3,4);

5.3 聚合查询

聚合函数

函数功能
count统计数量
max最大值
min最小值
avg平均值
sum求和
select 聚合函数(字段列表) from 表名;
-- eg
-- 1.统计员工数量
select count(*) from emp;-- 2.统计最早入职员工
select min(entrydate) from emp;-- 3.统计最迟入职员工
select max(entrydate) from emp;-- 4.统计企业员工id的平均值
select avg(id) from emp;-- 5.统计企业员工的id之和
select sum(id) from  emp;

5.4 分组查询

select * from 表名 [where 条件] group by 分组字段名 [having 分组后过滤条件];
-- eg
-- 1.根据性别分组,统计男性和女性员工的数量
select gender, count(*) from emp group by gender;-- 2.先查询入职时间在'2015-01-01'及以前的员工,并且根据职位进行分组,获取各职位员工数
select job,count(*) from emp where entrydate <= '2015-01-01' group by job;-- 3.先查询入职时间在'2015-01-01'及以前的员工,并且根据职位进行分组,获取员工数量大于等于2的职位
select job,count(*) from emp where entrydate <= '2015-01-01' group by job having  count(*)>=2;

5.5 排序查询

-- ASC:升序(默认)
-- DESC:降序
select 字段列表 from 表名 order by 字段1 排序方式1,字段2 排序方式2, ...;-- eg
-- 1.根据入职时间,对员工进行升序排序
select * from emp order by entrydate asc;-- 2.根据入职时间降序排序
select * from emp order by entrydate desc;-- 3.根据 入职时间 对员工进行 升序排序, 如果入职时间想同,按照 更新时间 进行 降序排序
select * from emp order by entrydatea asc , update_time desc ;

5.6 分页查询

select 字段列表 from 表名 limit 起始索引,查询记录数;-- eg
-- 1.查询第1页数据,每页展示5条记录
select * from emp limit 0,5;-- 2.查询第2页数据,每页展示5条记录
select * from emp limit 5,5;-- 3.查询第3页数据,每页展示5条记录
select * from emp limit 10,5;
-- 查询第n页起始索引计算公式
-- 起始索引 = (页码-1) * 每页展示记录数

5.7 流程控制函数

if(条件表达式, true取值,false取值)
-- 1.统计员工性别信息,并且用中文表示(gender 1:'男性员工',2:'女性员工')
select if(gender = 1, '男性员工', '女性员工')性别 , count(*) from  emp group by gender;-- 2.统计各职位员工数 1(班主任),2(讲师),3(学生主管),4(教研主管)
select (case jobwhen 1 then '班主任'when 2 then '讲师'when 3 then '学生主管'when 4 then '教研主管'else '未分配职位' end) as 职位,count(*)
from emp group by job;

六、多表查询

6.1 内连接(A、B交集)

-- 隐式内连接:
select 字段 from 表1,表2 where 条件;-- 显式内连接:
select 字段 from 表1 [inner] join 表2 on 条件;-- eg
-- 1.查询员工姓名,及所属的部门名称(隐式内连接)
select emp.name,dept.name from emp,dept where  emp.dept_id = dept.id;-- 2.查询员工姓名,及所属的部门名称(显式内连接)
select emp.name,dept.name from emp inner join dept on emp.dept_id = dept.id;

6.2 外连接

-- 左外连接:以左表为基准,完全包含左表数据
select 字段 from 表1 left [outer] join 表2 on 连接条件;-- 右外连接:以右表为基准,完全包含左表数据
select 字段 from 表1 right [outer] join 表2 on 连接条件;-- eg
-- 1.查询员工表 所有 员工的姓名,和对应的部门名称(左外连接)
select emp.name,dept.name from emp left join dept  on emp.dept_id = dept.id;-- 2.查询部门表 所有 部门的名称,和对应的员工名称(右外连接)
select emp.name,dept.name from emp right join dept  on emp.dept_id = dept.id;

6.3 子查询

-- 形式如下:
select * from t1 where column1 = (select column1 from t2 ...);
-- 子查询的外部语句可以是insert/update/delete/select的任何一个,最常见是select
-- 分类:
-- 标量子查询:子查询返回结果是单个值
-- 列子查询: 子查询返回结果为一列
-- 行子查询:子查询返回结果为一行
-- 表子查询:子查询返回结果为多行多列
-- 标量子查询
-- 1.查询”教研部“的所有员工子信息
-- a.先拿到教研部id
select id from dept where name = '教研部';
-- b.根据得到的id即可查询该部门所有员工信息
select * from emp where dept_id = 2;
-- 使用标量子查询
select * from emp where dept_id = (select id from dept where  name = '教研部');-- 2.查询在”方东白“入职后的员工信息
-- a.获取方东白入职时间
select entrydate from emp where name = '方东白';
-- b.获取该时间之后入职的员工信息
select * from emp where entrydate > '2012-11-01';
-- c.合并为一条语句
select * from emp where entrydate > (select entrydate from emp where name = '方东白');
-- 列子查询
-- 1.查询”教研部“和”咨询部“的所有员工信息
-- a.获取教研部和咨询部的id
select id from dept where name = '教研部' or name = '咨询部';
-- b.根据id获取员工信息
select * from emp where id in (2,3);
-- c.合并
select * from emp where id in  (select id from dept where name = '教研部' or name = '咨询部');
-- 行子查询
-- 1.查询与”韦一笑“的入职日期及职位都相同的员工信息;
select * from emp where (entrydate,job)=(select entrydate,job from emp where name = '韦一笑');
-- 表子查询
-- 1.查询入职日期是”2006-01-01“之后的员工信息,及部门名称
-- a.获取入职日期在”2006-01-01“之后的员工信息
select * from emp where entrydate > '2006-01-01';
-- b.查询这部分的员工以及部门名称
select e.*,d.name from (select * from emp where entrydate > '2006-01-01') as e, dept as d where e.dept_id = d.id;

🔥🔥🔥 欢迎批评指正🔥🔥🔥

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/475304.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Scala之Array数组

可修改的Array import scala.collection.mutable.ArrayBuffer //Array:数组 //可修改的&#xff1a;ArrayBuffer //不可修改的&#xff1a;Array object Test1 {//可修改的&#xff1a;ArrayBufferdef main(args: Array[String]): Unit {//1.新建val arr1 ArrayBuffer(1,2,3)…

贴代码框架PasteForm特性介绍之select,selects,lselect和reload

简介 PasteForm是贴代码推出的 “新一代CRUD” &#xff0c;基于ABPvNext&#xff0c;目的是通过对Dto的特性的标注&#xff0c;从而实现管理端的统一UI&#xff0c;借助于配套的PasteBuilder代码生成器&#xff0c;你可以快速的为自己的项目构建后台管理端&#xff01;目前管…

麒麟网络负载均衡与高可用方案实践

安装 teamd 包。 yum -y install teamd Copy 一、配置TEAMING 查看两个网卡信息 ifconfig Copy 注意&#xff1a;根据实际网卡设备名称情况调整代码&#xff01;不同环境下网卡名称略有不同&#xff01; 根据查询的结果&#xff0c;两张网卡设备名称分别为 enp0s2 和 enp…

Python学习29天

二分查找 # 定义函数冒泡排序法从大到小排列 def bbble_sort(list):# i控制排序次数for i in range(len(list) - 1):# j控制每次排序比较次数for j in range(len(list) - 1 - i):if list[j] < list[j 1]:list[j], list[j 1] list[j 1], list[j] # 定义二分查找函数 def…

路由协议——iBGP与EBGP

一、适用场景 1、企业需要连接总部与分部&#xff0c;但总部与分部运行着不同的路由协议&#xff0c;总部到分部有自建的专线&#xff0c;端到端的设备支持BGP路由协议。 2、网络运营商&#xff0c;如电信、联通、移动等&#xff0c;各区域的ip路由表庞大&#xff0c;若要完成…

09.事件风暴

学习视频来源&#xff1a;DDD独家秘籍视频合集 https://space.bilibili.com/24690212/channel/collectiondetail?sid1940048&ctype0 文章目录 概念组成部分具体场景事件风暴寻找聚合 改进具体流程 参考 概念 事件风暴是Alberto Brandolini 发明的一种头脑风暴方法&#x…

蓝队技能-应急响应篇日志自动采集日志自动查看日志自动化分析Web安全内网攻防工具项目

知识点&#xff1a; 1、应急响应-系统日志收集-项目工具 2、应急响应-系统日志查看-项目工具 3、应急响应-日志自动分析-项目工具 演示案例-蓝队技能-工具项目-自动日志采集&自动日志查看&自动日志分析 系统日志自动采集-观星应急工具(Windows系统日志) SglabIr_Co…

【C++】绘制内存管理的地图

生活是属于每个人自己的感受&#xff0c;不属于任何人的看法。 前言 这是我自己学习C的第二篇博客总结。后期我会继续把C学习笔记开源至博客上。 上一期笔记是关于C的类与对象础知识&#xff0c;没看的同学可以过去看看&#xff1a; 【C】面向对象编程的艺术之旅-CSDN博客https…

在 CentOS 系统上直接安装 MongoDB 4.0.25

文章目录 步骤 1&#xff1a;配置 MongoDB 官方源步骤 2&#xff1a;安装 MongoDB步骤 3&#xff1a;启动 MongoDB 服务步骤 4&#xff1a;验证安装步骤 5&#xff1a;可选配置注意事项 以下是在 CentOS 系统上直接安装 MongoDB 4.0.25 的详细步骤&#xff1a; 步骤 1&#x…

core 不可变类型 线程安全 record

当一个类型的对象在创建时被指定状态后&#xff0c;就不会再变化的对象&#xff0c;我们称之为不可变类型。这种类型是线程安全的&#xff0c;不需要进行线程同步&#xff0c;非常适合并行计算的数据共享。它减少了更新对象会引起各种bug的风险&#xff0c;更为安全。 System.D…

OceanBase Shell开放内核运维接口,运维更便捷

DBA在日常业务中面临着繁琐的运维管理任务&#xff0c;亟需高效的工具和灵活的解决方案帮助他们简化操作、提升效率。因此&#xff0c;命令行操作和维护工具&#xff08;CLI工具&#xff09;&#xff0c;因其高效、灵活、可远程管理以及技术深度等特点&#xff0c;成为DBA和开发…

基于Amazon Bedrock:一站式多模态数据处理新体验

目录 引言 关于Amazon Bedrock 基础模型体验 1、进入环境 2、发现模型及快速体验 3、打开 Amazon Bedrock 控制台 4、通过 Playgrounds 体验模型 &#xff08;1&#xff09;文本生成 &#xff08;2&#xff09;图片生成 关于资源清理 结束语 引言 在云计算和人工智能…

go 学习网站,go例子 go demo go学习视频

1. 代码例子&#xff1a; Go by Example 2. b站 视频&#xff1a; 尚硅谷视频&#xff1a; 004_尚硅谷_程序的基本概念_哔哩哔哩_bilibili 3. go技术文档&#xff1a; fmt Go语言中文文档

Django基础配置

一.前言 前面我们说完了前端基础&#xff0c;现在我们开始讲后端框架了&#xff0c;我们今天说的是django&#xff0c;当然今天主要还是和大家了解一下框架和django的基础配置 二.web框架 2.1 web框架初始 在我们学习web框架的时候&#xff0c;我们首先得了解到web框架的本…

Hive分桶超详细!!!

1、分桶的意义 数据分区可能导致有些分区,数据过多&#xff0c;有些分区,数据极少。分桶是将数据集分解为若干部分(数据文件)的另一种技术。 分区和分桶其实都是对数据更细粒度的管理。当单个分区或者表中的数据越来越大&#xff0c;分区不能细粒度的划分数据时&#xff0c;我…

【AI大模型引领变革】探索AI如何重塑软件开发流程与未来趋势

文章目录 每日一句正能量前言流程与模式介绍【传统软件开发 VS AI参与的软件开发】一、传统软件开发流程与模式二、AI参与的软件开发流程与模式三、AI带来的不同之处 结论 AI在软件开发流程中的优势、挑战及应对策略AI在软件开发流程中的优势面临的挑战及应对策略 结论 后记 每…

根据条件 控制layui的table的toolbar的按钮 显示和不显示

部分代码&#xff1a; <!-----查询条件-----> <input type"date" id"StartDate" onchange"PageList()" /> <input type"date" id"EndDate" onchange"PageList()" /><!-----表格Table-----&…

uniApp项目运行到鸿蒙手机,应用图标一直是H,应用名一直是HBuilder问题

项目运行到鸿蒙手机&#xff0c;应用图标一直是H,应用名一直是HBuilder问题 应用运行到鸿蒙手机和鸿蒙模拟器&#xff0c;应用图标一直是H,应用名一直是HBuilder&#xff0c;在自动生成的harmony-configs文件夹下也没有配置的文件&#xff0c; 这时候需要你将DevEco Studio 下…

使用element-plus el-table中使用el-image层级冲突table表格会覆盖预览的图片等问题

在日常开发项目中 使用element-plus 中表格中使用 el-image的点击图片出现图片预览 会出现以下问题 表格一行会覆盖预览的图片 鼠标滑过也会显示表格 el-image 的预览层级和表格的层级冲突导致的。 解决方法&#xff1a;有两种一种是直接使用样式穿透 第二种推荐方法 使用官网推…

vue--响应式数据

1、建一个vue应用程序&#xff08;简约&#xff09; 引入外链式 <title>第一个Vue程序</title><script src"../vue.global.js"></script> </head> {{}}插值表达式 <body><!-- {{ }} 插值表达式, 可以将 Vue 实例中定义的…