细谈谈MySQL变量的session & global级别

 Global & Dynamic

对于Global& Dynamic类型的变量,需通过set global语句设置变量值。变量设置后,在该session和其他session中(已存在的和后连接的)可即刻看到设置后的值。但重启服务器后设置的值失效,恢复为默认值

对于Global类型的变量show、show session、show global显示的结果是一致的,因为该Global变量对所有session可见,通过set global设置了该变量的值就相当于立刻设置了各session中该变量的值

Global & Not Dynamic

对于Not Dynamic类型的变量并不能通过命令直接设置值。

因为是Global类型的,因此在各session中执行show、show session、show global显示的结果是一致的。

Session & Dynamic

对于Session&Dynamic类型的变量可直接通过set、set session命令设置值,但是设置后的变量值只对设置时所使用的session有效,在其他session中(已存在的和后来新建的)不可见。mysql服务器重启后设置的变量值失效。

对于Session类型的变量,通过show global不能得到结果。通过show、show session可得到针对发起命令的每个session中变量的值。

Session & Not Dynamic

对于not dynamic类型的变量并不能通过命令直接设置值。

对于Session类型的变量,通过showglobal不能得到结果。通过show、show session可得到针对发起命令的每个session中变量的值。

Both & Dynamic

a、若变量为Both(global/session),则set<=>set session, show<=>show session。若要设置和显示global范围的变量,则要显式的使用set global和和show global。

b、对于Both&Dynamic类型的变量,若通过set命令(默认执行set session命令)设置新值(此时设置的是session范围的变量值)。那么在进行设置的当前session通过show命令(默认执行show session)查看变量值可以得到设置后的值。而新设置的变量值对其他之前已经存在或者之后创建的session都不可见。
另外,由于是用set session设置的变量值,所以对于global范围的变量没有影响,无论在哪些session中通过show global语句查看到的变量值都是在执行set session命令前的值。

c、若通过set global命令设置变量的值(此时设置的是global范围的变量值)。在进行设置的session通过show命令(默认执行show session)查看变量值,得到的仍是设置前的值(也即session范围的值)。在其他之前已存在的session中使用show session命令得到的同样是设置前的值。而在之后新建的session中通过show session命令可得到设置后的值(因为新的session读到了更改后的新值)。
无论是在执行更改的session还是更改时已存在的其他session又或者后来新建的session,通过执行show global命令得到的都是设置后的global范围的值。
d、不管是global范围的变量还是session范围的变量,在重启服务器之后,设置的值都会失效,而恢复为默认的值。

Both& Not Dynamic

a、对于Not Dynamic类型的变量不能通过set、set session、set global命令进行设置。只有Dynamic类型的变量才可以通过这些方式进行设置。

b、对于Dynamic变量
*   若变量为单一的Global范围,则必需使用set global命令设置变量值,不能使用set(这里set<=>set session)命令设置,且设置后立即对所有session有效。对于Global范围的变量show、show session、show global等价。
*   若变量为单一的Session范围,则需使用set(这里set<=>setsession)命令设置变量值,不能使用set global命令设置,且设置后仅对进行设置的session有效。对于Session范围的变量需使用show(这里show<=>show session)命令显示变量值,不能使用showglobal显示session范围的变量,若使用show global则显示为空。
*  若变量为Both范围,则使用set(这里set<=>set session)命令设置的变量值仅对进行设置的session有效,此时使用show(这里show<=>show session)命令可在该session中得到修改后的值,而通过show global在该session中得到的仍是通过set设置之前的Global范围的值;若使用set global命令设置变量的值,则在进行设置的session以及其他既存的session中通过show(这里show<=>show session)命令显示变量值得到的是修改前的值,而在后来新建的session中通过show(这里show<=>show session)命令可以得到修改后的值,但是,无论是新建的还是既存的session若使用show global均可以的到通过set global命令设置后的值。

c、不管是global范围的变量还是session范围的变量,在重启服务器之后,设置的值都会失效,而恢复为默认的值

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注