首页 > 数据库 >MySQL

MySQL

时间:2025-01-21 16:54:32浏览次数:1  
标签:MySQL 查询 索引 表名 TABLE 主键 连接

数据查询语句(DQL - Data Query Language)

执行顺序:

from --> where -->group by -->select -->having-->order by-->limit

单表查询

没啥好说的,了解基本的关键字用法和函数的功能即可实现快速查询。

表连接

内连接 inner join

只返回满足连接条件的记录

外连接 outer join

  • 左连接 left join

    返回左表的所有记录,满足连接条件的显示对应值,不满足显示null

  • 右连接 right join

    返回右表的所有记录,满足连接条件的显示对应值,不满足显示null

  • 全外连接 full join

    返回左表和右表的所有记录,满足连接条件的显示对应值,不满足显示null

自连接 self join

应用场景

  • 层次结构查询

    查询每个员工的上级名称

  • 数据纵向比较

    对同一表中不同行数据的比较:时间序列、查找重复值等等

交叉连接 cross join

返回两张表的笛卡尔积,即一张表的每一行都会与另一张表的所有行进行匹配,此时写连接条件已经没有意义。

子查询

  • 标量子查询:返回一个值
  • 列子查询:返回一列值
  • 行子查询:返回一行值
  • 表子查询:返回一个临时表

根据实际查询需求,确定需要子查询返回的结果,再编写相应的子查询。

函数

单行函数

操作多少行返回多少行

  • 字符函数

    concat replace substring……

  • 日期函数

    year month day now date_add datediff……

  • 数值函数

    abs round ceil floor……

聚合函数

操作多行返回一行

max min sum count avg

窗口函数

  • rank()

    有并列排名时,实际会占用后续排名的位置

  • dense_rank()

    有并列排名时,不会占用后续排名的位置,所以叫密集排名

  • row_number()

    每行一个排名

  • ntile()

    将数据分配到指定数量的数据桶中,每个桶中的数据量大致相同

  • lag() lead()

    访问前一行或后一行的值

  • max min sum count avg

    实现窗口内部的聚合运算

窗口函数和group by的核心区别:

  • group by的结果是一张聚合结果表,不保留原表的数据
  • 窗口函数只是在原表数据上增加计算结果,查询结果行数与原表相同

因此,窗口函数更适用于在原始数据基础上的分析场景,如累计求和、移动平均、排名等。

数据操作语句(DML - Data Manipulation Language)

插入

INSERT INTO 表名 (列1, 列2, ...)
VALUES (值1, 值2, ...);

更新

UPDATE 表名
SET 列1 = 新值1, 列2 = 新值2, ...
WHERE 条件;

删除

DELETE FROM 表名
WHERE 条件;

数据定义语句(DDL - Data Definition Language)

创建

  • 创建数据库
CREATE DATABASE 数据库名;
  • 创建表
CREATE TABLE 表名 (
    列1 数据类型 [约束],
    列2 数据类型 [约束],
    ...
);
  • 创建视图
CREATE VIEW 视图名 AS
SELECT 列1, 列2, ...
FROM 表名
WHERE 条件;
  • 创建索引
CREATE INDEX 索引名
ON 表名 (列名);

修改

  • 添加列
ALTER TABLE 表名
ADD 列名 数据类型 [约束];
  • 删除列
ALTER TABLE 表名
DROP COLUMN 列名;
  • 修改列
ALTER TABLE 表名
MODIFY COLUMN 列名 数据类型 [约束];

删除

  • 删除数据库
DROP DATABASE 数据库名;
  • 删除表
DROP TABLE 表名;
  • 删除试图
DROP VIEW 视图名;
  • 删除索引
DROP INDEX 索引名 ON 表名;

清空

TRUNCATE TABLE 表名;

delete from 相较于truncate,可以结合where条件进行删除,也可以支持事务的回滚操作

重命名

RENAME TABLE 原表名 TO 新表名;

数据约束语句(DCL - Data Constraint Language)

主键约束 PRIMARY KEY

  • 主键列非空不重复
  • 主键列还可以单独设置自增功能,又称“自增主键”
  • 主键既有单字段主键又有多字段联合主键

非空约束 NOT NULL

唯一性约束 UNIQUE

默认值约束 DEFAULT

外键约束 FOREIGN KEY

从表外键列的值必须引用主表主键列的值,是一种“级联”操作,从而确保数据的一致性。

从表的外键列可以为空,但非空值必须来自于主表主键列

事务控制语句(TCL - Transaction Control Language)

ACID原则

增删改操作会触发事务,MySQL当中执行增删改语句会自动进行提交。

  • 原子性(Atomicity):事务中的所有操作要么全部成功,要么全部失败,不存在部分成功的情况。
  • 一致性(Consistency):事务执行前后,数据库的状态必须保持一致,符合所有预定义的规则。
  • 隔离性(Isolation):多个事务并发执行时,每个事务的操作不会互相干扰,事务之间是隔离的。
  • 持久性(Durability):一旦事务提交成功,其结果将永久保存在数据库中,即使系统崩溃也不会丢失。

从转账的角度来理解以上四条原则:

付款:从付款方账户扣钱 收款:为收款方账户加钱

  • 原子性:扣钱和加钱的操作必须都成功,否则就会执行回滚操作;
  • 一致性:转账完成后,付款方和收款方的账户的总金额是不变的;
  • 隔离性:收款方同时接收多个付款方的转账,是互不干扰的;
  • 持久性:转账成功后,将永久保存在数据库中。

COMMIT:提交事务

ROLLBACK:回滚事务

SAVEPOINT:设置事务的保存点

数据控制语句(DCL - Data Control Language)

GRANT:授权权限

REVOKE:撤销权限

设计优化

表设计的三范式

表与表的关系

一对一

一般很少见,因为一对一的情况下完全可以合并成一张表

一对多

一般多见于事实表(多表)和维度表(一表)

多对多

一般需要一个中间表

索引

类型:主键索引、唯一索引、普通索引、复合索引等等

CREATE INDEX 索引名称 ON 表名(字段名);
  • 索引可以提高查询效率,但其本身是一种数据结构,会占用一定的存储空间
  • mysql中默认的索引数据结构是Btree,是一种多路搜索树

视图

通过封装来提高代码的复用性

标签:MySQL,查询,索引,表名,TABLE,主键,连接
From: https://www.cnblogs.com/wy56297/p/18683820

相关文章

  • centos死机导致mysql无法启动解决
    3306端口没被占用2.查看日志sudocat/var/log/mysqld.log从错误日志来看,MySQL启动失败的主要原因是InnoDB存储引擎的初始化失败。具体错误信息如下:复制[ERROR]InnoDB:IgnoringtheredologduetomissingMLOG_CHECKPOINTbetweenthecheckpoint111575434andthe......
  • Mysql并发控制和日志
    MySQL是一个广泛使用的关系数据库管理系统,在高并发环境中,如何有效地控制并发和管理日志至关重要。本文将详细介绍MySQL的并发控制机制和日志管理策略,以帮助开发人员和数据库管理员更好地理解和优化数据库性能。一、并发控制并发控制是指在多用户环境下管理对数据库的并发访问......
  • sqlite3 mysql每秒查询性能
     数据库的查询性能(如每秒查询次数,QPS,即QueriesPerSecond)取决于多种因素,包括数据库引擎、硬件配置、查询复杂度、数据量以及系统优化程度等。以下是对SQLite和MySQL每秒查询能力的比较和分析:SQLite每秒查询能力性能特点:SQLite是一个轻量级、文件系统级的数......
  • MySQL架构总览_查询执行流程_SQL解析顺序
    目录MySQL架构总览查询执行流程连接处理结果SQL解析顺序准备工作FROMWHEREGROUPBYHAVINGSELECTORDERBYLIMIT总结参考书籍MySQL架构总览架构最好看图,再配上必要的说明文字。下图根据参考书籍中一图为原本,再在其上添加上了自己的理解。从上图中我们可以看到,整个架构分为两......
  • MySQL数据库开启远程访问权限
    1、背景描述默认情况下,MySQL只允许本地登录,即只能在安装MySQL数据库所在的主机环境中访问。在实际开发和使用中,一般需要访问远程服务器的数据库,此时就需要开启服务器端MySQL的远程访问权限。2、查看MySQL的用户表如上图所示,Host列指定了允许用户登录所使用的IP,比如u......
  • MySQL 中单独获取已知日期的年月日
    在MySQL中,处理日期和时间是一项常见任务。通常,我们需要从已知的日期中提取年、月、日等部分信息。MySQL提供了一些内置函数,可以方便地进行这些操作。本文将详细介绍如何在MySQL中单独获取已知日期的年、月、日部分。一、提取年份(Year)要从日期中提取年份,可以使用 YEAR() 函数......
  • mysql 获取当前时间戳13
    mysql获取当前时间戳13在MySQL中,您可以使用CURRENT_TIMESTAMP或NOW()函数来获取当前的时间戳。这将以'YYYY-MM-DDHH:MM:SS'格式返回当前的日期和时间。如果您需要的是一个UNIX时间戳(即自1970年1月1日以来的秒数),您可以使用UNIX_TIMESTAMP()函数。以下是获取当前UN......
  • MySQL Switch Case
    MySQLSwitchCase123 在MySQL中,CASE语句用于根据条件返回值。当第一个条件满足时,它就会停止读取并返回结果。如果没有条件为真,则返回ELSE子句中的值。如果没有ELSE部分且没有条件为真,则返回NULL1。示例SELECT OrderID,Quantity,CASEWHEN Quantity>30 ......
  • 【数据库】详解MySQL数据库索引
    目录1.介绍2.索引概述2.1.优缺点3.索引结构3.1.B+Tree索引3.2.Hash索引4.索引分类5.索引语法5.1.创建索引5.2.查看索引5.3.删除索引6.SQL性能分析6.1.慢查询日志6.2.profile详情6.3.explain执行计划7.索引使用7.1索引使用原则7.1.1.最左前缀法则7.1.2.索引......
  • Mysql的学习
    Mysql建立索引优化:sql优化:为了解决下面的索引失效问题序列索引优化:解决orderby的关键在于提前在索引中就给好排序解决limit优化:利用id的子查询解决了回表查询然后提升了效能。关于count()的优化:`关于COUNT()的效率问题:COUNT()是用来统计记录数量的函数。不同写法的......