导读
=====
简单整理下两个函数之间的区别之处。
熟悉用C语言开发MySQL相关应用的同学应该都知道这两个函数,不过可能都不怎么关注他们之间的区别,以及优先选用哪个函数,我们今天就来简单说下。
1. mysql_change_user()函数
修改用户账号,并将该账号当前数据库改成由参数db指定的数据库,接下来的查询涉及的表默认都是指该数据库下的,除非显式的指定库名。
当该账号认证失败或者没有指定库权限时,会报告 change_user() 失败。
作用:重置所有会话状态,并且重新认证。
行为:回滚所有活跃事务,关闭&删除所有临时表,释放所有表锁,重置所有会话变量(选项)使之和全局变量一致,如果有PREPARE语句会被释放(其相应的HANDLER也会被关闭),利用GET_LOCK()获取的锁会被释放。注意:这些工作即便change user没成功也会执行。
如果只是想重置会话状态,不想change user这么重,则可以改成 mysql_reset_connection() 函数。
2. mysql_reset_connection()函数
mysql_reset_connection() 函数的作用是重置会话状态,类似做了一次无需断开和连接的快速“重连”操作,会话历史也会被清空。
下列会话状态会被影响:
活跃事务会被回滚,自动提交模式也会被重置;
释放所有表锁;
关闭&删除所有临时表;
会话变量(选项)被重置成和全局变量一致;
用户级变量丢失;
PREPARE语句会被释放(其相应的HANDLER也会被关闭);
LAST_INSERT_ID()值重置为0;
利用GET_LOCK()获取的锁会被释放。
它和mysql_change_user()的主要区别就在于无需重新连接、指定DB,以及重新验证账号,相对更轻量级一些,因此优先建议选用 mysql_reset_connection() 函数。
延伸阅读
MySQL Reference Manual,28.7.7.60 mysql_reset_connection()
MySQL Reference Manual,28.7.7.3 mysql_change_user()
END
知
数
堂
这里有好课,为职场助攻
近期的技术文章,都会在有赞平台专栏首发
扫码关注“知数堂Plus”小程序,最快速度获取
长期坚持原创不易,转发、点“在看”、打赏都是对我最好的支持
本文分享自微信公众号 - 老叶茶馆(iMySQL_WX)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。