• MySQL的预编译入门


    MySQL的预编译

    MySQL的预编译概念

    通常我们发送一条SQL语句给MySQL服务器时,MySQL服务器每次都需要对这条SQL语句进行校验、解析等操作。

    但是有很多情况下,我们的一条SQL语句可能需要反复的执行,而SQL语句也只可能传递的参数不一样,类似于这样的SQL语句如果每次都需要进行校验、解析等操作,未免太过于浪费性能了,因此我们提出了SQL语句的预编译。

    所谓预编译就是将一些灵活的参数值以占位符?的形式给代替掉,我们把参数值给抽取出来,把SQL语句进行模板化。让MySQL服务器执行相同的SQL语句时,不需要在校验、解析SQL语句上面花费重复的时间。

    MySQL预编译的语法

    准备数据:

    DROP TABLE IF EXISTS `user`;
    CREATE TABLE `user`  (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `username` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户名称',
      `birthday` datetime(0) NULL DEFAULT NULL COMMENT '生日',
      `sex` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '性别',
      `address` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '地址',
      PRIMARY KEY (`id`) USING BTREE
    ) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
    
    -- ----------------------------
    -- Records of user
    -- ----------------------------
    INSERT INTO `user` VALUES (1, '小龙', '2019-02-27 17:47:08', '男', '南昌市西湖区');
    INSERT INTO `user` VALUES (2, '小刚', '2019-03-02 15:09:37', '男', '南昌市东湖区');
    INSERT INTO `user` VALUES (3, '小兰', '2019-03-04 11:34:34', '女', '南昌市青山湖区');
    INSERT INTO `user` VALUES (4, '小红', '2019-03-04 12:04:06', '女', '南昌市青云谱区');
    INSERT INTO `user` VALUES (5, '小丽', '2019-03-07 17:37:26', '女', '南昌市红谷滩区');
    INSERT INTO `user` VALUES (6, '小明', '2019-03-08 11:44:00', '男', '南昌市新建区');
    INSERT INTO `user` VALUES (7, '龙龙', '2019-04-08 11:44:00', '男', '南昌市西湖区');
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    数据如下所示:

    image-20220823100724696

    预编译语句编写

    • 定义预编译SQL语句:

    语法如下:

    -- 定义一个预编译语句
    prepare name from statement; 
    
    # name 你的预编译语句名
    # statement 你的预编译语句
    
    • 1
    • 2
    • 3
    • 4
    • 5

    例如下面预编译代码

    prepare statement_user from 'select * from user where id=?';
    
    • 1
    • 设置参数值:
    set @id=1;
    
    • 1
    • 执行预编译SQL语句:
    execute statement_user using @id;
    
    • 1

    完整代码:

    -- 定义一个预编译语句
    prepare statement_user from 'select * from user where id=?';
    -- 设置参数值
    set @id=1;
    -- 执行预编译语句
    execute statement_user using @id;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    运行结果如下所示:

    image-20220823101248834

    • 释放预编译SQL语句:
    deallocate prepare statement_user;
    
    • 1

    image-20220823101607011

  • 相关阅读:
    云安全和传统安全有什么区别?又有什么关系?
    抖音视频删了怎么在电脑上找回来
    go build解决missing go.sum.entry
    Gateway 开源网关
    [ Azure | Az-900 ] 基础知识点总结(三) - Azure 管理和治理
    nginx反向代理,用户访问服务器1的80端口,请求转发至服务器2,3的8882端口
    iSpring SDK 10.2.X Crack iSpring SDK 9.7.X
    近世代数之群
    【Redis】Redis 生产问题。如何确保缓存和数据库数据的一致性? 常见的缓存更新策略?
    Lit(五):事件
  • 原文地址:https://blog.csdn.net/weixin_45525272/article/details/126479483