千家信息网

怎么使用Mysql的Query-rewrite

发表于:2025-01-22 作者:千家信息网编辑
千家信息网最后更新 2025年01月22日,本篇内容介绍了"怎么使用Mysql的Query-rewrite"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学
千家信息网最后更新 2025年01月22日怎么使用Mysql的Query-rewrite

本篇内容介绍了"怎么使用Mysql的Query-rewrite"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

1 启用或禁用

  1. /usr/local/mysql/bin/mysql -uroot -p`cat /etc/sqlpass ` -P3306 -h227.0.0.1 < $BASEDIR/share/install_rewriter.sql

  2. /usr/local/mysql/bin/mysql -uroot -p`cat /etc/sqlpass ` -P3306 -h227.0.0.1 < $BASEDIR/share/uninstall_rewriter.sql

  3. mysql> show variables like 'rewrite_%';
    +------------------+-------+
    | Variable_name | Value |
    +------------------+-------+
    | rewriter_enabled | ON |
    | rewriter_verbose | 1 |
    +------------------+-------+

  4. mysql> use query_rewrite;
    mysql> show tables;
    +-------------------------+
    | Tables_in_query_rewrite |
    +-------------------------+
    | rewrite_rules |
    +-------------------------+
    1 row in set (0.00 sec)

    [mysqld]
    rewriter_enabled=ON


2 简单练习

  1. mysql> insert into rewrite_rules(pattern,pattern_database,replacement) values('select ?','test','select ?+1');
    mysql> call flush_rewrite_rules();

  2. mysql> select 1;
    +-----+
    | 1+1 |
    +-----+
    | 2 |
    +-----+


3 去除类型转换

  1. mysql> show create table tb\G;
    *************************** 1. row ***************************
    Table: tb
    Create Table: CREATE TABLE `tb` (
    `id` int(10) DEFAULT NULL,
    `name` varchar(20) DEFAULT NULL,
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8


    mysql> select * from tb;
    +------+----------+
    | id | name |
    +------+----------+
    | 1 | 12345678 |
    | 1 | 12345671 |
    | 1 | 12345672 |
    | 1 | 12345673 |
    | 1 | 12345674 |
    | 1 | 12345675 |
    | 1 | 12345676 |
    | 1 | 12345677 |
    | 1 | 12345679 |
    +------+----------+

mysql> explain select * from tb where name=12345677;
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+
| 1 | SIMPLE | tb | NULL | ALL | idx_name | NULL | NULL | NULL | 9 | 11.11 | Using where |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+

mysql> insert into rewrite_rules(pattern,pattern_database,replacement) values("select * from tb where name=?","test","select * from tb where name = cast(? as char character set utf8)");
Query OK, 1 row affected (0.08 sec)
思考:为什么不直接写?替换为'?' ,因为?如果被单引号包起来就失效了!

mysql> call flush_rewrite_rules();
Query OK, 0 rows affected (0.09 sec)

mysql> select * from tb where name=12345678;
mysql> show warnings;
+-------+------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Level | Code | Message |
+-------+------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Note | 1105 | Query 'select * from tb where name=12345678' rewritten to 'select * from tb where name = cast(12345678 as char character set utf8)' by a query rewrite plugin |
+-------+------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)


4 改字段名后兼容报错



  1. mysql> select * from tb where uid=1;
    ERROR 1054 (42S22): Unknown column 'uid' in 'where clause'

  2. mysql> insert into rewrite_rules(pattern,pattern_database,replacement) values("select * from tb where uid=?","test","select * from tb where id=?");
    Query OK, 1 row affected (0.06 sec)

    mysql> call flush_rewrite_rules();
    Query OK, 0 rows affected (0.06 sec)

"怎么使用Mysql的Query-rewrite"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

内容 更多 知识 实用 学有所成 接下来 困境 字段 实际 引号 情况 文章 案例 类型 编带 网站 行业 被单 过程 高质量 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 北方工业大学网络安全 吃鸡租服务器 数据库两层印象 网络技术中心面试 it网络技术面试提问问题 网络技术考验一个人的哪些方面 微信公众号服务器配置 电子邮件无法连接到服务器 严格落实网络安全主动责任 软件开发文档如何写 优锘科技是互联网公司吗 中国期刊全文数据库包含 粤网安网络安全110 流体与机械属于什么数据库 如何在自己的电脑上做cs服务器 崩坏3qq登录服务器怎么样 低代码软件开发项目提成分配 图数据库技术丛书 农村实用人才数据库 两个数据库怎么互导数据 瑶海区软件开发培训班 服务器繁忙请稍候再试是怎么回事 聊天软件开发难点 广州软件开发驻场服务方案 网络技术计算机四级考试题型 复睿网络技术有限公司 应届软件开发项目经验怎么写 安全的网站服务器地址 湖北企业软件开发靠谱吗 sid是实例名还是数据库名
0