ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL 8.0 Query Rewrite支持DML

2019-12-10 16:55:22  阅读:258  来源: 互联网

标签:8.0 Rewrite rewrite DML sbtest1 limit mysql query SELECT


MySQL 8.0 Query Rewrite支持SELECT INSERT UPDETE DELETE REPLACE语句重写


这个功能要点赞,比如开发上线时,有个SQL查询字段索引忘记加了,直接把线上CPU打满,此时,你可以将SQL重写,让业务先报错,别打死数据库,然后马上通知开发回滚,等加完索引后再上线。


安装插件

mysql -S /tmp/mysql_hcy.sock -p123456 <./install_rewriter.sql



查看是否生效

SHOW GLOBAL VARIABLES LIKE 'rewriter_enabled';


编写重写规则

insert into query_rewrite.rewrite_rules(pattern, replacement, 
pattern_database) values (
"SELECT * from sbtest1 limit ?",
"SELECT k,c from sbtest1 limit ?",
"test");

意思为:

将以下语句

SELECT * from sbtest1 limit ?;

改写成:

SELECT k,c from sbtest1 limit ?;

注:问号?为变量


执行规则生效

CALL query_rewrite.flush_rewrite_rules();


演示

mysql> SELECT * from sbtest1 limit 1\G;
*************************** 1. row ***************************
k: 499284
c: 83868641912-28773972837-60736120486-75162659906-27563526494-20381887404-41576422241-93426793964-56405065102-33518432330
1 row in set, 1 warning (0.00 sec)
 
ERROR: 
No query specified
 
mysql> show warnings\G
*************************** 1. row ***************************
  Level: Note
   Code: 1105
Message: Query 'SELECT * from sbtest1 limit 1' rewritten to 'SELECT k,c from sbtest1 limit 1' by a query rewrite plugin
1 row in set (0.00 sec)



标签:8.0,Rewrite,rewrite,DML,sbtest1,limit,mysql,query,SELECT
来源: https://blog.51cto.com/hcymysql/2457485

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有