视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
MySQL中Global、Session跟Both(Global&Session)范围的
2020-11-09 14:01:18 责编:小采
文档


ü 该session在改变变量值时不存在,为之后新建的session


发现,无论是在改变变量值时已经存在的其他session中还是后来新建的session中均可以看到改变后的变量值。

? 重启mysql服务器之后重新查看该变量的值:


可以看到又恢复到了默认情况。(当然,在其他session中亦是如此)

结论:

l 对于Global& Dynamic类型的变量,需通过set global语句设置变量值。变量设置后,在该session和其他session中(已存在的和后连接的)可即刻看到设置后的值。但重启服务器后设置的值失效,恢复为默认值。(理由是显然的,因为没有将设置的值写进配置文件。)

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


2. Global & Not Dynamic

example:bind_address

? 显示该变量的值:

? 在一个session中设置该Global& Not Dynamic类型的变量:


发现对于Not Dynamic类型的变量不能通过此种方式设置变量值。

结论:

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

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


3. Session & Dynamic

example:gtid_next

? 显示该变量的值:


对于Session类型的变量通过show global是得不到值的,需用show、show session命令查看。

? 在一个session中设置该Session&Dynamic类型的变量:

? 在同一个session中重新查看该变量的值:


可以看到变量值已经变化为设置后的值。

? 通过另外的session来查看该变量的值:

ü 该session在变量值更改前已存在


可以看到,在其他已存在session中该变量的值仍为设置之前的值。

ü 该session在变量值更改前不存在,为变量值更改后新连接的session


可以看到,无论是在其他已存在session中还是后来新建的session中,该变量的值仍为设置之前的值。

? 重启mysql服务器之后重新查看该变量的值:


可以看到,变量值又恢复到设置前的默认值。

结论:

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

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


4. Session & Not Dynamic

example:proxy_user

? 显示该变量的值:

? 在一个session中设置该Session&Not Dynamic类型的变量:

可以看到,对于Not Dynamic类型的变量不可以通过命令的方式设置变量值。

结论:

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

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


5. Both & Dynamic

example:auto_increment_increment

? 显示该变量的值:

可以看到当前session范围和global范围的变量值均为1。

? 在一个session中通过set session语句设置该Both& Dynamic类型的变量:

这里没有使用关键字global,所以,默认使用set session语句设置变量的值。

ü 在同一个session中重新查看该变量的值:


这里没有使用关键字global,所以,默认使用showsession语句显示变量的值。在该session中变量值已变为设置后的值。

这里使用关键字global来显示变量的值。在该session中global范围的变量值并没有变为通过setsession语句设置后的值。

ü 通过另外的session来查看该变量的值(在设置变量值时该session已存在):


在另外的已存在的session中global型的变量值仍为原来的值。在上个session中通过set session语句设置后的变量值在这里的session中并不可见。

ü 通过另外的session来查看该变量的值(在设置变量值时该session不存在,是之后新连接的session):



在另外的设置好变量值后新建的session中global型的变量值仍为原来的值。在上个session中通过set session语句设置后的变量值在这里的session中并不可见。

ü 重启mysql服务器之后重新查看该变量的值:



重启mysql服务器后,变量值恢复为默认的值。

? 在一个session中通过set global语句设置该Both & Dynamic类型的变量:

ü 在同一个session中重新查看该变量的值:


这里没有使用关键字global,所以默认使用showsession variables语句显示变量的值。在该session中session范围的变量值仍未设置前的值。

这里使用关键字global来显示变量的值。在该session中global范围的变量的值已经变为通过setglobal语句设置后的值。

ü 通过另外的session来查看该变量的值(在设置变量值时该session已存在):


在上个session中通过set global语句设置后的变量值在这个之前已经存在的session中并不可见。而在这个已存在的session中,global范围的变量已变为设置后的值。

ü 通过另外的session来查看该变量的值(在设置变量值时该session不存在,是之后新连接的session):


在另外的设置好变量值后新建的session中global范围的变量为设置后的值。在上个session中通过set global语句设置后的变量值在这个之后新建的session可见。

ü 重启mysql服务器之后重新查看该变量的值:


重启mysql服务器后,变量值恢复为默认的值。

结论:

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

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

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

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


6. Both& Not Dynamic

example:gtid_executed

? 显示该变量的值:

? 在一个session中设置该Both& Not Dynamic类型的变量:

可以看到,对于Not Dynamic类型的变量无论是global范围还是session范围都无法通过命令进行设置。

结论:对于Not Dynamic类型的变量无法通过set、set session、set global命令直接进行设置。

综上所述:

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

? 对于Dynamic变量

ü 若变量为单一的Global范围,则必需使用setglobal命令设置变量值,不能使用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<=>setsession)命令设置的变量值仅对进行设置的session有效,此时使用show(这里show<=>show session)命令可在该session中得到修改后的值,而通过showglobal在该session中得到的仍是通过set设置之前的Global范围的值;若使用set global命令设置变量的值,则在进行设置的session以及其他既存的session中通过show(这里show<=>show session)命令显示变量值得到的是修改前的值,而在后来新建的session中通过show(这里show<=>show session)命令可以得到修改后的值,但是,无论是新建的还是既存的session若使用show global均可以的到通过set global命令设置后的值。

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

下载本文
显示全文
专题