MySQL的CLIENT_MULTI_STATEMENTS用法

将多个语句发给MySQL,可以减少网络交互次数。对于带事务的情况,可以缩短单线程上事务的生存期。


C API

在mysql_real_connect 时连接参数增加CLIENT_MULTI_STATEMENTS就可以用分号隔开,将多个SQL语句一起发给Server。

其实在mysql自带的客户端中,连接参数就已经设置了这个位。

   mysql_real_connect(&mysql, host, user, password,
                          database, opt_mysql_port, opt_mysql_unix_port,
                          connect_flag | CLIENT_MULTI_STATEMENTS)
 

MySQL 客户端用法

但是用户在客户端(即mysql程序)上输入用分号区分的多个SQL语句,其实还是在客户端拆分以后按顺序发送的。

mysql> insert into testabc values(1,'a');insert into testabc values(2,'a'); 实际上是先执行完成第一个insert,返回结果后再发送第二个。
其原因是mysql客户端在解析用户输入时,会将”;”作为语句终结符。


重定义语句终结符即可。实际上要实现多语句的语法,我们在创建存储过程时就用过了。


delimiter ;;
begin;insert into testabc values(1, 'aaaaa');insert into testabc values(1, 'aaaaa');insert into testabc values(1, 'aaaaa'); commit;;
 
这样第二行是整行发给server端。


在使用 Qt 连接 MySQL 数据库时,如果出现错误提示与 `caching_sha2_password` 认证插件相关的加载失败问题,通常是由于客户端库不支持 MySQL 8.0 及以上版本默认使用的 `caching_sha2_password` 插件所致。 MySQL 8.0 引入了新的默认认证插件 `caching_sha2_password`,而某些较旧的客户端库(如某些版本的 Qt SQL 模块或其依赖的 MySQL 客户端库)可能无法识别或加载该插件,导致连接失败。这种问题在使用 Qt 的 `QSqlDatabase` 类连接 MySQL 服务器时尤为常见,特别是在开发环境中使用的 MySQL 客户端库版本较旧的情况下。 ### 解决方案 1. **修改 MySQL 用户的认证方式** 可以将用户的认证方式从 `caching_sha2_password` 改为 `mysql_native_password`,这是旧版本 MySQL 使用的认证方式,兼容性更好。 使用 MySQL 命令行工具执行以下语句: ```sql ALTER USER 'your_user'@'your_host' IDENTIFIED WITH mysql_native_password BY 'your_password'; FLUSH PRIVILEGES; ``` 这将更改指定用户的认证方式为 `mysql_native_password`,并刷新权限以使更改生效[^2]。 2. **更新 Qt 或 MySQL 客户端库** 确保使用的 Qt 版本及其依赖的 MySQL 客户端库(libmysqlclient 或 mariadb-connector)支持 `caching_sha2_password` 插件。 如果使用的是静态编译的 Qt 库,可能需要重新配置并链接支持新认证插件的 MySQL 客户端库。 3. **配置 Qt 数据库连接参数** 在 Qt 代码中设置连接参数时,可以尝试显式指定字符集和连接属性,以避免潜在的兼容性问题: ```cpp QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); db.setHostName("localhost"); db.setDatabaseName("your_database"); db.setUserName("your_user"); db.setPassword("your_password"); db.setConnectOptions("CLIENT_MULTI_STATEMENTS"); ``` 4. **检查插件路径和权限** 如果希望保留 `caching_sha2_password` 插件,需确保 MySQL 服务器上的插件路径配置正确,并且客户端库可以访问相应的 `.so` 文件(如 `/usr/lib/mysql/plugin/caching_sha2_password.so`)[^1]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值