导读
=====
简单整理下两个函数之间的区别之处。
熟悉用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
1 知 2 3 4 5 6 数 7 8 9 10 11 堂 12 13 14 15 16 17 这里有好课,为职场助攻 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
近期的技术文章,都会在有赞平台专栏首发
扫码关注“知数堂Plus”小程序,最快速度获取

长期坚持原创不易,转发、点“在看”、打赏都是对我最好的支持
本文分享自微信公众号 - 老叶茶馆(iMySQL_WX)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。