天天看点

mysql_change_user()和mysql_reset_connection()区别在哪导读

导读

简单整理下两个函数之间的区别之处。

熟悉用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()