MySQL基础一篇打通,图文并茂

news2025/1/11 12:51:14

准备工作

直接使用MySQL提供的数据,下载MySQL示例数据库

MySQL示例数据库模式由以下表组成:

  • Customers:存储客户的数据。
  • Products:存储比例模型车列表。
  • ProductLines:存储产品系列类别列表。
  • Orders:存储客户下达的销售订单。
  • OrderDetails:存储每个销售订单的销售订单行项目。
  • Payments:存储客户根据其帐户进行的付款。
  • Employees:存储所有员工信息以及组织结构。
  • Offices:存储销售办公室数据。

1、SELECT

SELECT语句可以控制要查看的列和行,基本语法如下:

SELECT
column_1, column_2, ...
FROM
table_1
[INNER | LEFT |RIGHT] JOIN table_2 ON conditions
WHERE
conditions
GROUP BY column_1
HAVING group_conditions
ORDER BY column_1
LIMIT offset, length; 
  • SELECT 后跟逗号分隔列或星号(*)列表,表示返回所有列。
  • FROM 指定要查询数据的表或视图。
  • JOIN 根据特定的连接条件从其他表中获取相关数据。
  • WHERE 子句过滤结果集中的行。
  • GROUP BY 子句将一组行分组到组中,并在每个组上应用聚合函数。
  • HAVING 子句根据GROUP BY子句定义的组过滤组。
  • ORDER BY 子句指定用于排序的列的列表。
  • LIMIT 约束返回的行数。

在查询语句中要求必须包含SELECT和FROM ,其它都是可选项。另外不建议使用SELECT *,不需要的列会增加数据传输时间和网络开销。对于无用的大字段,如 varchar、blob、text,会增加 io 操作。

2、DISTINCT

从表中查询数据时,可能会出现重复的行。要删除这些重复的行,在SELECT子句中请使用DISTINCT 语句。相关语法:

SELECT DISTINCT
    columns
FROM
    table_name
WHERE
    conditions; 

如果字段中有NULL值并且要对该列使用DISTINCT 子句,则MySQL仅保留一个NULL值。

如果DISTINCT 与多个列一起使用,MySQL使用这些列中的值组合来确定结果集中行的唯一性。

3、ORDER BY

通常我们在查询数据时需要对结果集进行排序,ORDER BY 允许的操作:

  • 按单列或多列对结果集进行排序。
  • 按升序或降序对不同列的结果集进行排序。

相关语法:

SELECT column1, column2,...
FROM tbl
ORDER BY column1 [ASC|DESC], column2 [ASC|DESC],... 

ASC代表升序 和 DESC代表降序,默认情况下是升序。

比如查询客户表数据,按姓 降序 ,名 升序

4、WHERE,AND,OR

只想获取满足条件的结果集,那么就需要通过where筛选。基本语法:

SELECT 
    select_list
FROM
    table_name
WHERE
    search_condition AND boolean_expression_1 OR boolean_expression_2

AND运算符还用于 JOIN子句中关联条件。

5、IN

IN 运算符允许你确定一个指定的值在一组值匹配的任何值或子查询。相关语法:

SELECT 
    column1,column2,...
FROM
    table_name
WHERE 
 (expr|column_1) IN ('value1','value2',...); 

上述我们使用OR的情况就可以改为

6、BETWEEN

BETWEEN运算符是一个逻辑运算符,用来筛选值在某个区间范围内的结果集。基本语法:

expr [NOT] BETWEEN begin_expr AND end_expr; 

expr 是在 begin_exprend_expr定义的范围内测试的表达式。三个表达式:exprbegin_exprend_expr 必须具有相同的数据类型。从查询结果中可以看出是包括边界值的,所以它是等价于expr >= AND expr <=

7、LIKE

LIKE运算符检测一个字符串是否包含指定的值

MySQL提供了两个通配符供 LIKE 使用:百分号%和下划线_

  • 百分号(%)通配符匹配任何零个或多个字符的字符串。
  • 下划线(_)通配符匹配任何单个字符。

查询员工姓氏以B开头的

8、LIMIT

SELECT语句中使用LIMIT 子句来约束结果集中的行数。LIMIT子句接受一个或两个参数。两个参数的值必须为零或正整数。基本语法:

SELECT 
    column1,column2,...
FROM
    table
LIMIT offset , count; 

比如结果集排序后取前五条数据:

9、IS NULL

顾名思义,筛选值为null的,所以IS NOT NULL 就是查值不为null的。

10、别名

要为列提供别名,请使用AS关键字后跟别名,如果别名包含空格,必须使用``。基本语法:

SELECT 
 [column_1 | expression] AS `descriptive name`
FROM table_name; 

11、JOINS

MySQL连接是一种基于表之间的公共列的值在一个(自连接)或更多表之间链接数据的方法。

MySQL支持以下类型的连接:

  1. CROSS JOIN
  2. INNER JOIN
  3. LEFT JOIN
  4. RGIHT JOIN

第一种:CROSS JOIN使得从多个表行笛卡尔积

第二种:INNER JOIN必需要一个连接字段条件。INNER JOIN要求两个连接表中的行具有匹配的值。INNER JOIN返回的记录是通过两表连接字段相同的记录。

第三种:LEFT JOIN 会读取左边数据表的全部数据,即使右边表无对应数据。对于不满足连接条件的行,右表中相关字段值为null。

第四种:RIGHT JOIN 会读取右边数据表的全部数据,即使左边表无对应数据。

12、GROUP BY

GROUP BY 语句根据一个或多个列对结果集进行分组。和DISTINCT一样也可以起到去重效果,通常和聚合函数一起使用,例如SUM,AVG,MAX,MIN,和COUNT。基本语法:

SELECT 
    c1, c2,..., cn, aggregate_function(ci)
FROM
    table
WHERE
    where_conditions
GROUP BY c1 , c2,...,cn; 

比如统计订单表中不同状态下的订单数量:

13、HAVING

HAVING子句通常与GROUP BY 子句一起使用,以根据指定的条件过滤组。

14、ROLLUP

主要作用就是对GROUP BY分组后的结果再进行汇总

15、UNION

UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中,会删除重复的数据。

UNION ALL的话就不会删除重复数据。基本语法:

SELECT column_list
UNION [ALL]
SELECT column_list

要使用UNION运算符组合两个或多个查询的结果集,必须遵循以下基本规则:

  • 首先,所有SELECT语句中出现的列的数量和顺序 必须相同。
  • 其次,列的数据类型必须相同或可转换。

16、子查询

是指一个查询嵌套在另一个查询内,分为form子句的子查询、where子句的子查询。

17、EXISTS

EXISTS经常使用的在一个子查询,以测试一个“存在”状态。NOT EXISTS子查询没有返回任何行时返回true。比如查找至少有一个销售订单的客户:

18、CTE

公用表表达式【CTE】是一个命名的临时结果集,仅在单个SQL语句(例如select、insert、delete和update)的执行范围内存在,仅在MySQL 8.0或更高版本中可用。基本语法:

WITH cte_name (column_list) AS (
    query
) 
SELECT * FROM cte_name; 

query中的列数必须与column_list中的列数相同。如果省略column_list,则默认用query中的查询列。

递归CTE 是不断调用自己,直到满足终止条件才输出所有数据,由三个主要部分组成:

  • 初始查询,形成CTE结构的基本结果集。初始查询部分称为锚成员。
  • 递归查询部分是引用CTE名称的查询,因此,它被称为递归成员。递归成员由UNION ALLUNION 运算符与锚成员连接。
  • 终止条件,确保递归成员不返回任何行时停止递归。

比如下例:如果递归成员没有汇报对象,则递归停止

19、MINUS

由于MySQL不支持MINUS,所以我们通过LEFT JOIN模拟实现。基本语法

SELECT 
    column_list 
FROM 
    table_1
    LEFT JOIN table_2 ON join_predicate
WHERE 
    table_2.id IS NULL; 

我这里删除了几条数据,方便演示效果:

20、INSERT

INSERT语句可以将一行或多行数据插入到表中。基本语法:

INSERT INTO table(c1,c2,...)
VALUES 
   (v11,v12,...),
   (v21,v22,...),
    ...
   (vnn,vn2,...); 

21、INSERT IGNORE

使用INSERT语句向表中添加多行时,如果在处理过程中发生错误,MySQL将终止语句并返回错误。结果就是没有行插入表中。如果使用INSERT IGNORE语句,将忽略导致错误的包含无效数据的行,并将具有有效数据的行插入到表中。基本语法:

INSERT IGNORE INTO table(column_list)
VALUES( value_list),
      ( value_list),
      ... 

22、INSERT INTO SELECT

当你想把表1的数据复制到表2时可以使用,基本语法:

INSERT INTO table_name(column_list)
SELECT 
   select_list 
FROM 
   another_table; 

23、UPDATE

修改表中数据使用,这里需要谨慎一点,该加WHERE子句时一定不能忘记!基本语法:【IGNORE的用途和上述一样】

UPDATE [IGNORE] table_name 
SET 
    column_name1 = expr1,
    column_name2 = expr2,
    ...
[WHERE
    condition]; 

24、DELETE

需要删除数据时使用,删除表中所有数据可使用TRUNCATE TABLE,基本语法:

DELETE FROM table_name
WHERE condition; 

要注意WHERE条件的正确性,或者删除前备份数据。

25、ALTER TABLE

ALTER TABLE 语句修改现有表的结构。它允许您添加列,删除列,更改列的数据类型,添加主键,重命名表等等。

修改某一列:

ALTER TABLE  `orderdetails` 
MODIFY COLUMN `productCode` varchar(16) NOT NULL COMMENT '商品编号';

删除某一列:

ALTER TABLE table
DROP COLUMN column; 

添加某一列:MySQL允许您通过指定FIRST关键字将新列添加为表的第一列。它还允许您使用AFTER existing_column子句在现有列之后添加新列。如果您没有明确指定新列的位置,MySQL会将其添加为最后一列。

ALTER TABLE table
ADD [COLUMN] column_name column_definition [FIRST|AFTER existing_column]; 

26、DROP—TRUNCATE

DROP TABLE语句从数据库中永久删除表结构及其数据;

TRUNCATE只删除数据和释放空间,也就是如果表具有AUTO_INCREMENT列,则TRUNCATE TABLE语句会将自动增量值重置为零。

27、PRIMARY KEY

主键是一列或一组列,用于唯一标识表中的每一行。一张表只有一个主键,主键列不能包含NULL值,为表定义主键时,MySQL会自动创建一个索引名为PRIMARY

28、FOREIGN KEY

外键是表中与另一个表的另一个字段匹配的字段。一张表可以有多个外键,外键可以是一个列或一组列。子表中的列通常引用父表中的主键列。

  • RESTRICT(默认) 当父表删除|更新记录时,首先检查记录是否有对应的外键,有,报错。
  • NO ACTION 同RESTRICT
  • SET NULL 当父表删除|更新记录时,首先检查记录是否有对应的外键,有,则设置子表对应的外键值为null(外键允许为null)。
  • CASCADE 当父表删除|更新记录时,首先检查记录是否有对应的外键, 有,则设置子表对应的外键值跟随(父表)外键来源表相应的值而变化。

29、字符集与排序规则

字符集:就是用来定义字符在数据库中的编码的集合。

排序规则:就是指字符比较时是否区分大小写,以及是按照字符编码进行比较还是直接用二进制数据比较。

MySQL服务器级别的默认字符集和排序规则分别是latin1和latin1_swedish_ci。

通常项目中我们使用utf8utf8_general_ci就足够了。而utf8是utf8mb4的子集,要在 Mysql 中保存 4 字节长度的 UTF-8 字符,就可以使用 utf8mb4 字符集和utf8mb4_general_ci排序规则了。例如可以用utf8mb4字符编码直接存储emoj表情,而不是存表情的替换字符。

30、数据类型

INT 数据类型可以是有符号和无符号的。下表说明了每种整数类型的特征,包括以字节为单位的存储,最小值和最大值。通常主键列的类型是INT或者BIGINT 。布尔类型的列就使用TINYINT

DECIMAL数据类型用于在数据库中存储精确的数值,比如和钱相关的数据。基本语法:

column_name  DECIMAL(P,D); 
  • P是表示有效位数的精度。P的范围是1到65。
  • D是表示小数点后的位数的刻度。D的范围是0和30.MySQL要求D小于或等于(<=)P。

INT数据类型,DECIMAL类型也有UNSIGNEDZEROFILL属性。如果我们使用 UNSIGNED属性,则列DECIMAL UNSIGNED不会接受负值。

如果我们使用ZEROFILL,MySQL会将显示值填充0,直到列定义指定的显示宽度。另外,如果我们使用ZERO FILLDECIMAL列,MySQL将在列自动添加 UNSIGNED属性。

MySQL分别为整数和小数部分分配存储空间。MySQL使用二进制格式来存储DECIMAL值。它将9位数字打包成4个字节。例如,DECIMAL(19,9)小数部分有9位数,整数部分有19-9 = 10位数。小数部分需要4个字节。整数部分对于前9位需要4个字节,对于1个剩余数字,它需要1个以上的字节,所以DECIMAL(19,9)列需要9个字节。

Boolean :MySQL没有内置的布尔类型。但是,我们可以使用TINYINT(1)

CHAR:是MySQL中的固定长度的字符类型,如果要存储的数据是固定大小,则应使用CHAR数据类型。与VARCHAR这种情况相比,可以获得更好的性能。CHAR使用比较运算符(如=,<>,>,<等)比较值时,MySQL不考虑尾随空格。使用CHAR值进行模式匹配时,LIKE运算符会考虑尾随空格。

VARCHAR:是可变长度的字符串,其长度最多可达65,535。MySQL将VARCHAR值存储为1字节或2字节长度前缀加上实际数据。长度前缀指定值中的字节数。MySQL在存储VARCHAR值时不会填充空间。此外,MySQL在插入或选择VARCHAR值时会保留尾随空格。

TEXT:使用TEXT列的类型时,不必指定存储长度。MySQL的提供了四种TEXT类型:TINYTEXT【可存储255个字符】,TEXT【可存储65,535个字符】,MEDIUMTEXT【可存储16,777,215个字符】,和LONGTEXT【可存储4,294,967,295个字符】。

DATE:是用于管理日期值的五种时态数据类型之一。MySQL使用yyyy-mm-dd 格式存储日期值。

TIME:MySQL使用'HH:MM:SS'格式查询并显示表示一天中24小时内的时间的时间值。

DATETIME:来存储包含日期和时间的值。

TIMESTAMP:它包含日期和时间的组合。 YYYY-MM-DD HH:MM:SS格式 其被固定在19个字符。TIMESTAMP值范围从1970-01-01 00:00:01 UTC2038-01-19 03:14:07 UTC。如果要存储超过2038的时间值,则应使用DATETIME而不是TIMESTAMP

JSON:可以直接存储JSON数据,JSON列不能具有默认值。

更多数据类型可查阅官网:MySQL :: MySQL 8.0 Reference Manual :: 11 Data Types

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【前端工程化】Git入门指南:轻松掌握从安装到操作!

git入门指南 安装和基本配置Bash&#xff0c;CMD和GUI用户名和邮箱的配置 Git仓库本地Git仓库文件状态的划分文件状态检测git忽略文件的配置&#xff08;了解&#xff09;文件更新提交git校验和-日志和版本回退git loggit resetgit reflog 远程仓库远程仓库的操作获取远程仓库远…

整合Springboot+MybatisPlus+达梦数据库

1、安装Windows环境的达梦数据库可视化软件 这里不做安装介绍 安装步骤很简单&#xff0c;提供的软件也很全面&#xff0c;特别是数据库迁移工具&#xff0c;支持市面上许多主流的大型数据库&#xff0c;例如&#xff1a;Oracle、SQLServer、MySQL、DB2、PostgreSQL、Informix…

Axure 原型模板素材哪里下载

1、Axure 原型模板素材哪里下载 如果你想要下载 Axure 原型模板素材&#xff0c;可以前往即时设计资源广场进行一键复用。在即时设计资源广场&#xff0c;你可以免费使用所有的 Axure 原型模板素材&#xff0c;而且没有文件数量、团队或项目数量的限制。这大大降低了资源共享的…

医疗平台,专攻医学软件方向,病历云、影像学、实验室检验

一、开源项目简介 JEHC 本开源平台重点打造医疗&#xff08;专攻医学软件Web方向&#xff0c;病历云&#xff0c;影像学&#xff0c;实验室检验等等&#xff09;&#xff0c;IOT方向&#xff0c;工作流Workflow等。 JEHC-CLOUD基于Spring Cloud 2.X版本&#xff0c;采用前后…

当BIM遇见建筑,设计灵感无限,欣赏有趣的BIM建筑

人们常用“罗马是怎样建成的”来形容建成伟大城邦的复杂和艰辛&#xff0c;也因此&#xff0c;优秀的建筑是如何通过科学严密的设计建成&#xff0c;就成了值得研究的经验。随着国际化交流合作的日益增多&#xff0c;以及BIM先驱者标准院的技术经验引进&#xff0c;BIM在我们的…

zigbee 无线发送数据,呼吸灯

控制端代码&#xff1a; #include "hal_defs.h" #include "hal_cc8051.h" #include "hal_int.h" #include "hal_mcu.h" #include "hal_board.h" #include "hal_led.h" #include "hal_rf.h" #include &…

【服务器数据恢复】IBM服务器虚拟磁盘文件被误删除的数据恢复案例

服务器数据恢复环境&#xff1a; IBM X系列服务器柏科某型号存储。服务器上部署VMware ESXi虚拟主机&#xff0c;存储上存放虚拟机文件。 虚拟主机采用的Windows Server操作系统&#xff0c;部署宏桥和索菲2套应用&#xff0c;数据库是SQL Server。 虚拟磁盘&#xff1a;数据盘…

已经有MySQL了,干嘛还要学MongoDB?

三分钟的时间&#xff0c;通过本文你将学会 1.MongoDB主要特征 2.MongoDB优缺点&#xff0c;扬长避短 3.何时选择MongoDB&#xff1f;为啥要用它&#xff1f; 4.MongoDB与MySQL关键字对比 5.下载与安装MongoDB 6.Java整合MongoDB&#xff0c;实现增删改查 MongoDB和MySQ…

PyTorch-TensorBoard

一、介绍&#xff1a; TensorBoard&#xff1a;是一组用于数据可视化的工具。 SummaryWriter&#xff1a;类&#xff0c;用于提供一个高级API&#xff0c;并在给定目录中创建事件文件&#xff0c;向其中添加摘要和事件。 1. SummaryWriter(log_dir)&#xff1a;log_dir表示Tens…

MySQL 索引(w字)

目录 关于索引 关于磁盘 磁盘 ​扇区 结论 MySQL 与磁盘交互基本单位 MySQL 整体轮廓 结论 关于索引 建立测试表 关于 Page 为何IO交互要是 Page 理解单个Page 理解多个Page ​页目录 复盘一下 ​B树 ​B树 聚簇索引 VS 非聚簇索引 总结(重点) …

就业内推 | 地产行业招运维,最高30k*15薪,有住房交通补贴

01 宝能 &#x1f537;招聘岗位&#xff1a;网络运维高级工程师 &#x1f537;职责描述&#xff1a; 1、负责集团各数据中心和职场网络的设计规划、实施落地和持续优化&#xff1b; 2、负责集团网络的日常运维工作&#xff0c;如服务请求和变更的处理、网络相关故障解决&#…

JSP详解

JSP的概念&#xff1a; 概念&#xff1a;Java Serve Pages Java服务端页面 一种动态的网页技术&#xff0c;其中可以定义Html、css、js等静态内容。还可以定义Java代码的动态内容。 JSPHtmljava JSP的存在使我们可以不用在servlet里面用输出流一行一行的写字符串&#xff0…

拿下7家大厂offer后,整理出来的笔记.....

我第一次接触自动化是在2016年。那时刚毕业一年有余&#xff0c;组内一直做手工功能测试&#xff0c;大概在2018年9月&#xff0c;部门领导要求测试组引入自动化。组内之前从没有开展过任何自动化&#xff0c;测试主管安排了一个刚入职不久的研究生同事去研究。 当时自己内心还…

Jmeter性能测试 -3数据驱动实战

什么是数据驱动&#xff1f; 从数据文件中读取测试数据&#xff0c;驱动测试过程的一种测试方法。数据驱动可以理解为更高级的参数化。 特点&#xff1a;测试数据与测试代码分离&#xff1b;数据控制过程 好处&#xff1a;降低开发和维护成本&#xff0c;减少代码量&#xf…

原型设计工具

常见原型图设计工具 Sketch(国内外通用) 仅支持mac系统&#xff0c;无window系统软件。 Figma(国外) Figma是一个基于浏览器的协作式UI设计工具。 即时设计(国内) 墨刀(国内) 墨刀采用简便的拖拽连线操作&#xff0c;作为一款在线原型设计软件&#xff0c;墨刀支持云端保存…

Docker 设置国内镜像源

Docker 镜像加速 国内从 DockerHub 拉取镜像有时会遇到网络问题&#xff0c;此时可以配置国内的镜像加速来下载。Docker 官方和国内很多云服务商都提供了国内加速器服务&#xff0c;例如如下&#xff1a; 科大镜像&#xff1a;https://docker.mirrors.ustc.edu.cn/网易&#…

SpringSecurity 硅谷通用权限系统:权限管理

由于项目需要 快速入门一下 看的是这篇 比较新比较快 硅谷通用权限系统&#xff1a;权限管理 一、权限管理 1、权限管理介绍 每个系统的权限功能都不尽相同&#xff0c;各有其自身的业务特点&#xff0c;对权限管理的设计也都各有特色。不过不管是怎样的权限设计&#xff0c;大…

Flutter 笔记 | Flutter 容器组件

Padding 这个组件最能体现Flutter与其他UI框架的一个不同点&#xff0c;那就是在其他UI框架中padding基本都是作为组件的一个属性&#xff0c;例如在html中常见的布局标签都有padding属性&#xff0c;Android中也是如此&#xff0c;但是在Flutter中组件并没有一个叫padding的属…

财务共享时代企业数智化应用能帮我们做些什么?

随着企业规模的不断扩大和业务范围的逐步扩展&#xff0c;财务工作的难度和复杂度也在不断提高&#xff0c;传统的手工录入和处理方式呈现出流程长、效率低、易出错等问题。为了提升财务工作的效率和准确性&#xff0c;越来越多的企业开始利用数智化应用打造企业内部的财务数智…

初识web自动化测试,快速成长指南!

目录 自动化 说明 优点 自动化测试 自动化测试能解决什么问题&#xff1f; 相关知识 Web自动化测试 定义 什么Web项目适合做自动化测试? Web自动化测试在什么阶段开始? 所属分类 Web自动化测试工具选择 主流的Web自动化测试工具 Selenium 概念 特点 环境搭建…