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()

END


12 3 4 5 67 8 9 10 1112 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源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

Python3:sqlalchemy对mysql数据库操作,非sql语句

Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''

KVM调整cpu和内存

一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid

Twitter的分布式自增ID算法snowflake (Java版)

概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移

mysql_change_user()和mysql_reset_connection()区别在哪 - HelloWorld