MySql从入门到精通

第一部分 基础篇

1.概述

1.1 启动与停止MySql
  • 启动

    net start mysql80

  • 停止

    net stop mysql80

注意: mysql开机默认启动

1.2 客户端连接
  • 方法一:使用MySQL提供的命令行客户端
  • 方法二:系统自带的命令行工具执行指令
    mysql [-h 127.0.0.1] [-p 3306] -u root -p
1.3 CentOS下MYSQL的登录、启动、停止、重启命令
MySql登录

mysql -u root -p

MySql配置文件

/etc/my.cnf
可配置端口3306,sql-model等信息。

在CentOS根目录下执行命令
启动

1、使用 service 启动:service mysql start

service mysqld start

systemctl start mysqld.service

2、使用 mysqld 脚本启动:/etc/inint.d/mysql start

3、使用 safe_mysqld 启动:safe_mysql&

停止

1、使用 service 启动:service mysql stop

service mysqld stop

systemctl stop mysqld.service

2、使用 mysqld 脚本启动:/etc/inint.d/mysql stop

3、mysqladmin shutdown

重启

1、使用 service 启动:service mysql restart

service mysqld restart

systemctl restart mysqld.service

2、使用 mysqld 脚本启动:/etc/inint.d/mysql restart

状态查询

1、使用 service 启动:service mysql status

service mysqld status

systemctl status mysqld.service

2.SQL语句

  • 注释 单行注释用–或者#,多行注释用/* */
  • SQL语句一般以分号结尾
  • MySql数据库的SQL语句不区分大小写
  • SQL语句分类
    • DDL :Data DefinitionLanguage 数据定义语言,用来定义数据库对象(数据库,表, 字段)
    • DML:Data Manipulation Language 数据操作语言,用来对数据库表中的数据进行增删改
    • DQL: Data Query Language 数据查询语言,用来查询数据库中表的记录
    • DCL: Data Control Language 数据控制语言,用来创建数据库用户、控制数据库的 访问权限。
2.1 DDL 用来定义数据库对象(数据库,表, 字段)
2.1.1 DDL-数据库操作

在这里插入图片描述

2.1.2 DDL-表-操作

在这里插入图片描述

在这里插入图片描述

2.1.3 DDL-表-增删修改
对字段进行操作
  • 增加字段
    ALTER TABLE 表名 ADD 字段名 类型(长度) 【comment 注释】【约束】;
  • 修改数据类型
    ALTER TABLE 表名 MODIFY 字段名 新的类型(长度);
  • 修改字段名和数据类型
    ALTER TABLE 表名 CHANGE 原字段名 新字段名 数据类型(长度);
  • 删除字段
    ALTER TABLE 表名 DROP 字段名
对表进行操作
  • 修改表名
    ALTER TABLE 表名 RENAME TO 新表名
  • 删除指定表
    DROP TABLE [IF EXISTS] 表名
  • 删除指定表,并且重新创建该表(表的数据内容会被清除)
    TRUNCATE TABLE 表名
2.2 DML 用来对数据库表中的数据进行增删改
2.2.1 DML-添加数据

在这里插入图片描述
注意:

  • 插入的值应该和字段顺序一致
  • 插入的字符串和日期数据应该要用引号
2.2.2 DML-修改数据

UPDATE 表名 SET 字段名1=值1,字段名2=值2,……[WHERE 条件]
注意:

  • 没有加where条件默认修改整张表上该字段名的所有值
2.2.3 DML-删除数据

DELETE FROM 表名 [WHERE 条件]
注意:

  • 没有加where条件默认删除整张表上的所有数据
  • delete语句不能删除某一个字段的值,可以用update语句将该字段修改为null
2.3 DQL 用来查询数据库中表的记录
2.3.1 DQL-基础查询

在这里插入图片描述

2.3.2 DQL-条件查询

在这里插入图片描述
注意:

  • between …and… 需要小的数字放在前面,大的数字放在后面
2.3.3 DQL-聚合函数

在这里插入图片描述
注意:

  • 所有的null值不参与聚合函数的计算
2.3.4 DQL-分组查询

在这里插入图片描述
注意:

  • having 指分组之后在过滤的条件
  • 执行顺序:where>聚合函数>having
  • 分组之后,查询的字段一般为聚合函数或分组字段,查询其他字段无任何意义
2.3.5 DQL-排序查询

在这里插入图片描述
注意:

  • 如果按多个字段查询,当第一个字段的值相同时,按照第二个字段排序
2.3.5 DQL-分页查询

SELECT 字段列表 FROM 表名 LIMIT 起始索引,分页记录数;
注意:

  • 起始索引从0开始,起始索引=(查询页码-1)*每页显示记录数
  • 分页查询是数据库的方言,不同数据库有不同的实现,MySql中使用limit实现
  • 如果起始索引是0,可以省略不写,例如limit 10;
2.3.6 DQL-执行顺序
  • 编写顺序
    在这里插入图片描述
  • 执行顺序
    在这里插入图片描述
2.4 DCL 用来创建数据库用户、控制数据库的访问权限
2.4.1 DCL-用户管理

在这里插入图片描述
注意:

  • 主机名可以用%通配,表示任意地址都可以
  • 这类SQL开发人员操作的较少,主要是DBA(Database Administrator数据库管理人员)使用
2.4.2 DCL-权限控制

在这里插入图片描述
在这里插入图片描述
注意:

  • 多个权限要用逗号分割
  • 授权时,数据库名和表名可以使用*通配,表示所有

3.函数

3.1 字符串函数

MySql有很多内置字符串函数
在这里插入图片描述

3.2 数值函数

在这里插入图片描述

3.3 日期函数

在这里插入图片描述

3.4 流程控制函数

在这里插入图片描述

4.约束

4.1 约束-概述
  • 概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据
  • 目的:保证数据库中数据的正确,有效性和完整性
  • 分类

约束

描述

关键字

非空约束

限制该字段的数据不能为null

NOT FULL

唯一约束

保证该字段的所有数据都是唯一的,不重复的

UNIQUE

主键约束

主键是一行数据的唯一标识,要求非空且唯一

PRIMARY KEY

默认约束

保存数据时,如果未指定该字段的值,则采用默认值

DEFAULT

检查约束

保证字段值满足某一个条件

CHECK

外键约束

用来让两张表的数据之间建立连接,保证数据的一致性和完整性

FOREIGEN KEY

注意:约束是作用于表中字段的,可以在创建表和修改表是增加

4.2增加约束
4.2.1 创建表时增加约束-案例分析

在这里插入图片描述

create table teachers(id int primary key  auto_increment comment 'id',name varchar(10) not null unique comment '姓名',age int check(age>=0 && age <=120) comment '年龄',status char(1) default '1' comment '状态',gender char(1) comment '性别'
)comment '驾驶表';
4.2.2 对已有的表增加约束
  • 增加主键/唯一约束
    ALTER TABLE 表名 ADD PRIMARY KEY(字段名) / UNIQUE(字段名)
  • 增加非空/自动增长/默认约束(修改字段的数据类型)
    ALTER TABLE 表名 MODIFY 字段名 数据类型 NOT NULL/AUTO_INCREMENT/DEFAULT '默认值'
  • 增加检查约束
    ALTER TABLE 表名 ADD CONSTRIANT 字段名 check(条件)
4.3 外键约束
4.3.1 增加外键
  • 创建表时增加外键
    在这里插入图片描述
  • 对已经创建过的表增加外键
    ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名)
4.3.2 删除外键

ALTER TABLE 表名 DROP CONSTRAINT 外键名称

4.3.3 外键删除和更新规则(行为)

在这里插入图片描述
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名)ON DELETE 规则 ON UPDATE 规则

5.多表查询

5.1 多表查询-概述
5.1.1 多表关系分类

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

在这里插入图片描述

5.1.2 多表查询-分类
  • 连接查询
    • 内连接:查询两表交集部分数据
    • 外连接
      • 左外连接:查询左表所有数据,以及两表交集部分数据
      • 右外连接:查询右表所有数据,以及两表交集部分数据
    • 自连接 :当前表与自身连接查询,自连接必须使用别名
  • 子查询
5.2 多表查询-连接查询
5.2.1 连接查询-内连接

内连接查询语法:

  • 隐式内连接
    SELECT 字段列表 FROM 表一,表二 WHERE 条件
  • 显示内连接
    SELECT 字段列表 FROM 表一 [INNER] JOIN 表二 ON 连接条件
5.2.2 连接查询-外连接

在这里插入图片描述

5.2.3 连接查询-自连接

在这里插入图片描述

5.3 联合查询

在这里插入图片描述
注意:

  • 对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致
  • union all 会将所有的数据直接合并在一起,union 会对合并之后的数据去重
5.4 子查询

在这里插入图片描述

5.4.1 标量子查询

子查询返回的结果是单个值(数字,字符串,日期等),最简单的形式
常用的操作符:= <> > >= < <=

  • 案例一
    在这里插入图片描述
  • 案例二
    在这里插入图片描述
5.4.2 列子查询

子查询返回的结果是一列(可以是多行)
常用的操作符: IN、NOT、ANY、SOME、ALL
在这里插入图片描述

  • 案例一
    在这里插入图片描述
  • 案例二
    在这里插入图片描述
  • 案例三
    在这里插入图片描述
5.4.3 行子查询

子查询返回的结果是一行(可以是多列)
常用的操作符: =、<>、IN、NOT IN

  • 案例一
    在这里插入图片描述
5.4.4 表子查询

子查询返回的结果是多行多列
常用的操作符: IN

  • 案例一
    在这里插入图片描述
  • 案例二
    在这里插入图片描述
    注意:
  • 如果返回的子表需要作为一张新的表被查询,要给这张子表起别名,否则会Every derived table must have its own alias报错。

6.事务

6.1 事务简介

事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败

  • 开启事务
  • 如果执行没有异常,则提交事务
  • 如果执行中出现异常,回滚事务,退到执行事务前。
  • 默认MySQL的事务是自动提交的,也就是说,当执行一条DML语句,MySQL会立即隐式地提交事务。
事务四大特性(ACID)

在这里插入图片描述

6.2 事务操作
  • 方式一
    在这里插入图片描述

  • 方式二
    在这里插入图片描述

6.3 并发事务问题

在这里插入图片描述

  • 脏读
    在这里插入图片描述

  • 不可重复读
    在这里插入图片描述

  • 幻读
    在这里插入图片描述

6.4 事务的隔离级别

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

  • 隔离级别越高数据越安全,执行效率越低。

第二部分 进阶篇

1.存储引擎

1.1 MySql体系结构

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

1.2 存储引擎
  • 存储引擎是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎又称为表类型
  • MySql默认存储引擎为InnoDB
    在这里插入图片描述
1.3 存储引擎的特点
1.3.1 InnoDB


在这里插入图片描述

1.3.2 MyISAM

在这里插入图片描述

1.3.3 Memory

在这里插入图片描述

1.3.4 区别

在这里插入图片描述

1.3.5 存储引擎的选择

在这里插入图片描述

2.索引

2.1 索引-概述
  • 索引是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找方法,这种数据结构就是索引。
  • 优缺点

在这里插入图片描述

2.2 索引结构
2.2.1 B+Tree索引

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

2.2.2 Hash索引

在这里插入图片描述

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

2.3 索引分类

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

  • 回表查询:先通过二级索引找到主键,然后通过主键
    在这里插入图片描述
2.4 索引-语法

在这里插入图片描述

  • 案例
    在这里插入图片描述
2.5 索引-性能分析
2.5.1 SQL执行频率

在这里插入图片描述
(7个下划线)

2.5.2 慢查询日志

在这里插入图片描述
慢查询日志需要手动打开
在这里插入图片描述

方式二:进入MySQL控制台,用命令行设置

mysql -u root -p

#查看一下默认为慢查询的时间10秒
show variables like "%long%";
#设置成2秒
set global long_query_time=2;
#查看一下慢查询是不是已经开启
show variables like "%slow%";
#启用慢查询
set global slow_query_log='ON';

/usr/local/mysql/data/localhost-slow.log

2.5.3 show profiles

show profiles 能够在做SQL优化时帮助我们了解时间都耗费到哪里去了。通过have_profiling参数,能够看到当前MySQL是否支持profile操作:
SELECT @@have_profiling ;
可以通过set语句在session/global级别开启profiling:
set profiling = 1;
开关打开后,接下来,我们所执行的SQL语句,都会被MySQL记录,并记录执行时间消耗到哪儿去了。

#查看每一条SQL的耗时基本情况
show profiles;
#查看指定query_id的SQL语句各个阶段的耗时情况
show profile for query query_id;
#查看指定query_id的SQL语句CPU的使用情况
show profile cpu for query query_id;
2.5.4 explain执行计划

EXPLAIN 或者 DESC命令获取 MySQL 如何执行 SELECT 语句的信息,包括在 SELECT 语句执行过程中表如何连接和连接的顺序。
语法:(直接在select语句前面加上关键字explain/desc)
EXPLAIN SELECT 字段列表 FROM 表名 WHERE 条件 ;
在这里插入图片描述

Explain 执行计划中各个字段的含义:

字段

含义

id

select查询的序列号,表示查询中执行select子句或者是操作表的顺序(id相同,执行顺序从上到下;id不同,值越大,越先执行)。

select_type

表示 SELECT 的类型,常见的取值有 SIMPLE(简单表,即不使用表连接或者子查询)、PRIMARY(主查询,即外层的查询)、UNION(UNION 中的第二个或者后面的查询语句)、SUBQUERY(SELECT/WHERE之后包含了子查询)等

type

表示连接类型,性能由好到差的连接类型为NULL、system、const、eq_ref、ref、range、 index、all 。

possible_key

显示可能应用在这张表上的索引,一个或多个。

key

实际使用的索引,如果为NULL,则没有使用索引。

key_len

表示索引中使用的字节数, 该值为索引字段最大可能长度,并非实际使用长度,在不损失精确性的前提下, 长度越短越好 。

rows

MySQL认为必须要执行查询的行数,在innodb引擎的表中,是一个估计值,可能并不总是准确的。

filtered

表示返回结果的行数占需读取行数的百分比, filtered 的值越大越好。

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

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

相关文章

自己部署 DeepSeek 助力 Vue 开发:打造丝滑的时间线(Timeline )

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 自己…

基于Java SpringBoot以及vue前后端分离的旅游景区网站系统设计与实现

基于Java SpringBoot以及vue前后端分离的旅游景区网站系统设计与实现 本项目是一款基于Spring Boot和Vue.js开发的旅游景区管理系统&#xff0c;前端合后端的架构&#xff0c;支持用户在线浏览景区信息、预订门票&#xff0c;并提供完善的后台管理功能&#xff0c;包括订单管理…

HTML的入门

一、HTML HTML&#xff08;HyperText Markup Language&#xff0c;超文本标记语言&#xff09;是一种用来告知浏览器如何组织页面的标记语言。 超文本&#xff1a;就是超越了文本&#xff1b;HTML不仅仅可以用来显示文本(字符串、数字之类)&#xff0c;还可以显示视频、音频等…

【原创】springboot+vue考试考场座位安排管理系统设计与实现

个人简介&#xff1a;从事开发多年&#xff0c;Java、Php、Python、前端开发均有涉猎 博客内容&#xff1a;Java项目实战、项目演示、技术分享 文末有作者名片&#xff0c;希望和大家一起共同进步&#xff0c;你只管努力&#xff0c;剩下的交给天意。 研究背景&#xff1a; 随…

zyNo.23

SQL注入漏洞 1.SQL语句基础知识 一个数据库由多个表空间组成&#xff0c;sql注入关系到关系型数据库&#xff0c;常见的关系型数据库有MySQL,Postgres,SQLServer,Oracle等 以Mysql为例&#xff0c;输入 mysql-u用户名-p密码 即可登录到MySQL交互式命令行界面。 既然是…

Okay, But Please Don’t Stop Talking

Okay, But Please Don’t Stop Talking 研发背景 现有问题&#xff1a;像ChatGPT的高级语音模式这类先进的语音对语音系统&#xff0c;容易被“我明白”“嗯哼”等在人类对话中常见的插入语打断。这表明现有语音交互系统在处理自然对话中的语音重叠情况时存在不足。 新的尝试&…

Jenkins | Jenkins安装

Jenkins安装 一、前置准备二、启动三、登录 一、前置准备 下载安装包 war包 下载地址: https://www.jenkins.io/ 安装jdk 要求jdk11版本以上 集成maven项目的话 需要有maven 与 git 二、启动 启动命令 需要注意使用jdk11以上的版本 /usr/java/jdk17/bin/java -Xms2048m -X…

Unity UI 道路线跟随:让图标沿道路轨迹移动

在 Unity UI 开发中&#xff0c;有时需要让图标沿着一条道路轨迹移动&#xff0c;比如地图上的车辆行驶动画、导航路径指示等。本文介绍如何基于 UI 图片中的道路线生成曲线&#xff0c;并使用 Slider 控制图标沿轨迹运动&#xff0c;适用于 UI 导航、路径跟随动画等场景。 1. …

「软件设计模式」建造者模式(Builder)

深入解析建造者模式&#xff1a;用C打造灵活对象构建流水线 引言&#xff1a;当对象构建遇上排列组合 在开发复杂业务系统时&#xff0c;你是否经常面对这样的类&#xff1a;它有20个成员变量&#xff0c;其中5个是必填项&#xff0c;15个是可选项。当用户需要创建豪华套餐A&…

有哪些免费的SEO软件优化工具

随着2025年互联网的不断发展&#xff0c;越来越多的企业意识到在数字营销中&#xff0c;网站的曝光度和排名至关重要。无论是想要提高品牌知名度&#xff0c;还是想要通过在线销售增加收益&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;都是一项不可忽视的关键策略。而要…

DeepSeek从入门到精通:提示词设计的系统化指南

目录 引言&#xff1a;AIGC时代的核心竞争力 第一部分 基础篇&#xff1a;提示词的本质与核心结构 1.1 什么是提示词&#xff1f; 1.2 提示词的黄金三角结构 第二部分 类型篇&#xff1a;提示词的六大范式 2.1 提示语的本质特征 2.2 提示语的类型 2.2.1 指令型提示词 …

单智能体到多智能体智能体任务规划有什么变化

单智能体到多智能体智能体任务规划有什么变化 核心原理 单智能体任务规划:大模型利用其强大的自然语言理解和生成能力,结合多模态信息,将自然语言描述的任务分解为可执行子任务,并能根据环境反馈调整执行策略。在规划过程中,可通过不同方式生成或优化任务计划,如端到端规…

算法之 跳跃游戏

文章目录 55.跳跃游戏思路参考&#xff1a;56.合并区间 55.跳跃游戏 55.跳跃游戏 灵神思路 思路分析&#xff1a; 两种思路&#xff0c;思路1是我们可以直接维护当前到达i的时候所能到达的最右的边界mr&#xff0c;如果i>mr就说明无法到达i,否则就是可以到达&#xff1b;…

Ubuntu22.04通过Docker部署Jeecgboot

程序发布环境包括docker、mysql、redis、maven、nodejs、npm等。 一、安装docker 1、用如下命令卸载旧Docker: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done 2、安装APT环境依赖包…

STM32 ADC介绍(硬件原理篇)

目录 背景 AD转换器 采样与保持 量化 编码 AD转换器转换原理 DA转换原理 AD转换原理 1.逐次逼近型AD转换器 2.并联比较型AD转换器 编码器 同步D触发器和边沿D触发器 基本RS触发器 同步RS触发器 同步D触发器 边沿型D触发器&#xff08;维持-阻塞D触发器&#xff…

DeepSeek4j 已开源,支持思维链,自定义参数,Spring Boot Starter 轻松集成,快速入门!建议收藏

DeepSeek4j Spring Boot Starter 快速入门 简介 DeepSeek4j 是一个专为 Spring Boot 设计的 AI 能力集成启动器&#xff0c;可快速接入 DeepSeek 大模型服务。通过简洁的配置和易用的 API&#xff0c;开发者可轻松实现对话交互功能。 环境要求 JDK 8Spring Boot 2.7Maven/Gr…

编程技巧:VUE 实现接口返回数据的流式处理

一、写在前面 ChatGPT 的问答响应界面相信大家都见过&#xff0c;内容是一点一点追加式的显示。不是等好了一起发给你&#xff0c;然后一次性展示出来。这种效果和我们平常开发的展示渲染模式有点区别。可能有的同学会说&#xff0c;前端拿到报文后&#xff0c;我们做成这样的…

Django 创建表 choices的妙用:get_<field_name>_display()

1.定义choices 我在创建表时&#xff0c;对于性别这个字段&#xff0c;定义了choices 选项&#xff0c;1代表男&#xff0c;2代表女 mysql中表的数据如下&#xff0c;里面存储的是1或2 如果我们在网页上展示的时候&#xff0c;想展示“男”或“女”&#xff0c;而不是数字1或2…

Mac安装JD-GUI

Mac安装反编译工具步骤如下&#xff1a; 打开官网https://java-decompiler.github.io/ 选择下载mac的安装包解压下载好的压缩包&#xff0c;点击JD-GUI安装 有可能会遇到如下错误。请先检查是否安装JDK&#xff0c;通过java -version命令查看是否是1.8版本的jdk如果jdk没问题&…

[免费]Springboot+Vue医疗(医院)挂号管理系统【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringbootVue医疗(医院)挂号管理系统&#xff0c;分享下哈。 项目视频演示 【免费】SpringBootVue医疗(医院)挂号管理系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 在如今社会上&#xff0c;关于信息上…