MySQL中的會話變數與全域變數

來源:互聯網
上載者:User

變數分為使用者變數與系統變數。

  使用者變數:

  使用者變數與資料庫連接有關,在這個串連中聲明的變數,在串連斷開的時候,就會消失。

  在此串連中聲明的變數無法在另一串連中使用。

  使用者變數的變數名的形式為@varname的形式。

  名字必須以@開頭。

  聲明變數的時候需要使用set語句,比如下面的語句聲明了一個名為@a的變數。

  set @a = 1;

  聲明一個名為@a的變數,並將它賦值為1,mysql裡面的變數是不嚴格限制資料類型的,它的資料類型根據你賦給它的值而隨時變化 。

  (SQL SERVER中使用declare語句聲明變數,且嚴格限制資料類型。)

  我們還可以使用select 語句為變數賦值 。

  比如:

  set @name = '';

  select @name:=password from user limit 0,1;

  (注意等號前面有一個冒號,後面的limit 0,1是用來限制返回結果的,相當於SQL SERVER裡面的top 1)

  如果直接寫:

  select @name:=password from user;

  如果這個查詢返回多個值的話,那@name變數的值就是最後一條記錄的password欄位的值 。

  系統變數:

  系統變數又分為全域變數與會話變數。

  全域變數在MYSQL啟動的時候由伺服器自動將它們初始化為預設值,這些預設值可以通過更改my.ini這個檔案來更改。

  會話變數在每次建立一個新的串連的時候,由MYSQL來初始化。MYSQL會將當前所有全域變數的值複製一份。來做為會話變數。

  (也就是說,如果在建立會話以後,沒有手動更改過會話變數與全域變數的值,那所有這些變數的值都是一樣的。)

  全域變數與會話變數的區別就在於,對全域變數的修改會影響到整個伺服器,但是對會話變數的修改,只會影響到當前的會話

  (也就是當前的資料庫連接)。

  我們可以利用

  show session variables;

  語句將所有的會話變數輸出:

  (可以簡寫為show variables,沒有指定是輸出全域變數還是會話變數的話,預設就輸出會話變數。)

  mysql> show global variables;

  +---------------------------------+----------------------------------------------------------------+

  | Variable_name                   | Value                                                          |

  +---------------------------------+----------------------------------------------------------------+

  | auto_increment_increment        | 1                                                              |

  | auto_increment_offset           | 1                                                              |

  | automatic_sp_privileges         | ON                                                             |

  ..................................省略..............................

  | tmpdir                          | C:\WINDOWS\TEMP\                                               |

  | transaction_alloc_block_size    | 8192                                                           |

  | transaction_prealloc_size       | 4096                                                           |

  | tx_isolation                    | REPEATABLE-READ                                                |

  | updatable_views_with_limit      | YES                                                            |

  | version                         | 5.0.67-community-nt                                            |

  | version_comment                 | MySQL Community Edition (GPL)                                  |

  | version_compile_machine         | ia32                                                           |

  | version_compile_os              | Win32                                                          |

  | wait_timeout                    | 28800                                                          |

  +---------------------------------+----------------------------------------------------------------+

  232 rows in set, 1 warning (0.00 sec)

  如果想輸出所有全域變數:

  show global variables;

  有些系統變數的值是可以利用語句來動態變更的,但是有些系統變數的值卻是唯讀。

  對於那些可以更改的系統變數,我們可以利用set語句變更。

  如果想要更改會話變數的值,利用語句:

  set session varname = value;

  或者set @@session.varname = value;

  比如:

  mysql> set session sort_buffer_size = 40000;

  Query OK, 0 rows affected(0.00 sec)

  如果想要更改全域變數的值,將session改成global:

  set global sort_buffer_size = 40000;

  set @@global.sort_buffer_size = 40000;

  不過要想更改全域變數的值,需要擁有SUPER許可權 。

  (

  注意,ROOT只是一個內建的帳號,而不是一種許可權 ,

  這個帳號擁有了MYSQL資料庫裡的所有許可權。任何帳號只要它擁有了名為SUPER的這個許可權,

  就可以更改全域變數的值,正如任何使用者只要擁有FILE許可權就可以調用load_file或者

  into   outfile ,into dumpfile,load data infile一樣。

  )

  利用select語句我們可以查詢單個會話變數或者全域變數的值:

  select @@session.sort_buffer_size

  select @@global.sort_buffer_size

  select @@global.tmpdir

  凡是上面提到的session,都可以用local這個關鍵字來代替。

  比如:

  select @@local.sort_buffer_size

  local 是 session的近義詞。

  無論是在設定系統變數還是查詢系統變數值的時候,只要沒有指定到底是全域變數還是會話變數。

  都當做會話變數來處理。

  比如:

  set @@sort_buffer_size = 50000;

  select @@sort_buffer_size;

  上面都沒有指定是GLOBAL還是SESSION,所以全部當做SESSION處理。

  還有一個結構式系統變數,這個不知道幹什麼用的,不記了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.