Py学习  »  DATABASE

mysql_change_user()和mysql_reset_connection()区别在哪

老叶茶馆 • 4 年前 • 212 次点击  

导读

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

熟悉用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”小程序,最快速度获取


长期坚持原创不易,转发、点“在看”、打赏都是对我最好的支持

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/35952
 
212 次点击