SQL 的执行顺序

作者: 时间: 2026-05-23 评论: 暂无评论

原始表

FROM (获取数据源)

ON (筛选连接前的行)

JOIN (生成连接表)

WHERE (过滤行)

GROUP BY (分组)

HAVING (过滤分组)

SELECT (计算列、聚合、别名)

DISTINCT (去重)

ORDER BY (排序)

LIMIT (限制行数)

最终结果

FROM – 确定数据源表

ON – 筛选连接前的行(对 JOIN 而言)

JOIN – 执行连接操作,生成虚拟表

WHERE – 对连接后的行进行过滤

GROUP BY – 将行分组

HAVING – 对分组后的结果进行过滤

SELECT – 选择列、计算表达式、聚合函数

DISTINCT – 去除重复行

ORDER BY – 排序

LIMIT / OFFSET – 限制返回行数

注意:ON 只对 JOIN 有效,WHERE 则在连接完成后整体过滤。SELECT 中的列别名通常无法在 WHERE / GROUP BY / HAVING 中使用,因为它们在 SELECT 之后才生成。

WHERE和ON区别:ON 的过滤发生在连接前,而 WHERE 发生在连接后。

WHERE 和 HAVING 的区别:
WHERE 过滤行,在分组前;HAVING 过滤分组,在 GROUP BY 后,可使用聚合函数。

关于or 和UNION ALL 的性能对比

作者: 时间: 2025-02-28 评论: 暂无评论

当 www_92game_net_d_ecms_app表67472条的时候,性能对比

SELECT id FROM www_92game_net_d_ecms_app where classid ='49' or newstime ='1577808000'

OK
时间: 0.174s

SELECT id FROM www_92game_net_d_ecms_app WHERE classid = '49' UNION ALL ( SELECT id FROM www_92game_net_d_ecms_app WHERE newstime = '1577808000' )

OK
时间: 0.109s

UNION ALL 在有复杂查询的时候,性能更加优秀,小表性能差不多

mysql创建用户并授权

作者: 时间: 2023-12-21 评论: 暂无评论
CREATE USER '用户名'@'localhost' IDENTIFIED BY '密码';#如果是本地用户可用localhost,如果想让该用户可以从任意 远程主机登陆,可以使用通配符%
GRANT all privileges ON 数据库.* TO '用户名'@'localhost'; #授权
FLUSH PRIVILEGES;#刷新权限

mysql 【innodb】隔离级别测试

作者: 时间: 2022-04-28 评论: 暂无评论

在mysql设计一个张表event,引擎是innodb,开启2个控制台,按照 t1 t2 t3 t4 t5 t6 顺序执行

id  num
1   18

开启控制台1

begin;  
select num from event where id=1;   //t1
select num from event where id=1;   //t4 
select num from event where id=1;   //t6

开启控制台2

begin; 
update event set num=20 where id=1  //t2
select num from event where id=1;   //t3
commit                              //t5

【可重复读】结果:18 20 20 18
【不可重复读】结果:18 20 20 18

观察得出结论:
【可重复读】(mysql默认隔离级别)
事务开始后不被其它【已提交】【未提交】的SQL 影响
单个事务中,修改值影响后面操作

【不可重复读】
事务开始后不被【未提交】的SQL影响,会被【已提交】的SQL影响
单个事务中,修改值影响后面操作

【补充】
mysql查看当前的隔离级别

show variables like 'transaction_isolation';

mysql设置隔离级别

set session/global transaction isolation level read uncommitted | read committed | repeatable read | serializable ;

mysql主从同步

作者: 时间: 2021-06-18 评论: 暂无评论

主库ip 172.22.230.212
从库ip 172.22.230.213
数据库备份

mysqldump -uroot -p --databases xhjgame>xhjgame.sql

主库

>CREATE USER 'slave'@'172.22.230.213' IDENTIFIED BY '密码';
>GRANT REPLICATION SLAVE ON *.* TO 'slave'@'172.22.230.213';
>flush privileges;
> show master status

从库 注意两个值 mysql-bin.00058 和MASTER_LOG_POS

>CHANGE MASTER TO MASTER_HOST='172.22.230.212',  
MASTER_USER='slave', 
MASTER_PASSWORD='密码', 
MASTER_LOG_FILE='mysql-bin.000587',  MASTER_LOG_POS=0;

>start slave

>show slave status