天天看點

Mysql中變量的定義

MySql中的變量定義

根據mysql手冊,mysql的變量分為兩種:系統變量和使用者變量。但是在實際使用中,還會遇到諸如局部變量、會話變量等概念。根據個人感覺,mysql變量大體可以分為四種類型:

一、局部變量。

局部變量一般用在sql語句塊中,比如存儲過程的begin/end。其作用域僅限于該語句塊,在該語句塊執行完畢後,局部變量就消失了。

局部變量一般用declare來聲明,可以使用default來說明預設值。

例如在存儲過程中定義局部變量:

drop procedure if exists add;

create procedure add

(

    in a int,

    in b int

)

begin

    declare c int default 0;

    set c = a + b;

    select c as c;

end;

在上述存儲過程中定義的變量c就是局部變量

二、使用者變量。

使用者變量的作用域要比局部變量要廣。使用者變量可以作用于目前整個連接配接,但是當目前連接配接斷開後,其所定義的使用者變量都會消失。

使用者變量使用如下(這裡我們無須使用declare關鍵字進行定義,可以直接這樣使用):

select @變量名

對使用者變量指派有兩種方式,一種是直接用"="号,另一種是用":="号。其差別在于使用set指令對使用者變量進行指派時,兩種方式都可以使用;當使用select語句對使用者變量進行指派時,隻能使用":="方式,因為在select語句中,"="号被看作是比較操作符。

示例程式如下:

drop procedure if exists math;

create procedure math

(

    in a int,

    in b int

)

begin

    set @var1 = 1;

    set @var2 = 2;

    select @sum:=(a + b) as sum, @dif:=(a - b) as dif;

end;

mysql> call math(3, 4);

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

| sum  | dif  |

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

|    7 |   -1 | 

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

1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

mysql> select @var1; //var1為使用者變量

+-------+

| @var1 |

+-------+

| 1     | 

+-------+

1 row in set (0.00 sec)

mysql> select @var2; //var2為使用者變量

+-------+

| @var2 |

+-------+

| 2     | 

+-------+

1 row in set (0.00 sec)

3、會話變量

伺服器為每個連接配接的用戶端維護一系列會話變量。在用戶端連接配接時,使用相應全局變量的目前值對用戶端的會話變量進行初始化。設定會話變量不需要特殊權限,但用戶端隻能更改自己的會話變量,而不能更改其它用戶端的會話變量。會話變量的作用域與使用者變量一樣,僅限于目前連接配接。當目前連接配接斷開後,其設定的所有會話變量均失效。

設定會話變量有如下三種方式:

set session var_name = value;

set @@session.var_name = value;

set var_name = value;

檢視一個會話變量也有如下三種方式:

select @@var_name;

select @@session.var_name;

show session variables like "%var%";

mysql> show session variables;

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

| Variable_name                   | Value                                                      |

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

| auto_increment_increment        | 1                                                          |

| auto_increment_offset           | 1                                                          |

| automatic_sp_privileges         | ON                                                         |

| back_log                        | 50                                                         |

| basedir                         | /usr/                                                      |

| bdb_cache_size                  | 8388600                                                    |

| bdb_home                        | /var/lib/mysql/                                            |

| bdb_log_buffer_size             | 32768                                                      |

| bdb_logdir                      |                                                            |

| bdb_max_lock                    | 10000                                                      |

| bdb_shared_data                 | OFF                                                        |

| bdb_tmpdir                      | /tmp/                                                      |

| binlog_cache_size               | 32768                                                      |

| bulk_insert_buffer_size         | 8388608                                                    |

| character_set_client            | latin1                                                     |

| character_set_connection        | latin1                                                     |

| character_set_database          | latin1                                                     |

| character_set_filesystem        | binary                                                     |

| character_set_results           | latin1                                                     |

| character_set_server            | latin1                                                     |

| character_set_system            | utf8                                                       |

| character_sets_dir              | /usr/share/mysql/charsets/                                 |

| collation_connection            | latin1_swedish_ci                                          |

| collation_database              | latin1_swedish_ci                                          |

| collation_server                | latin1_swedish_ci                                          |

| completion_type                 | 0                                                          |

| concurrent_insert               | 1                                                          |

| connect_timeout                 | 5                                                          |

| datadir                         | /var/lib/mysql/                                            |

| date_format                     | %Y-%m-%d                                                   |

| datetime_format                 | %Y-%m-%d %H:%i:%s                                          |

| default_week_format             | 0                                                          |

| delay_key_write                 | ON                                                         |

| delayed_insert_limit            | 100                                                        |

| delayed_insert_timeout          | 300                                                        |

| delayed_queue_size              | 1000                                                       |

| div_precision_increment         | 4                                                          |

| keep_files_on_create            | OFF                                                        |

| engine_condition_pushdown       | OFF                                                        |

| expire_logs_days                | 0                                                          |

| flush                           | OFF                                                        |

| flush_time                      | 0                                                          |

| ft_boolean_syntax               | + -><()~*:""&|                                             |

| ft_max_word_len                 | 84                                                         |

| ft_min_word_len                 | 4                                                          |

| ft_query_expansion_limit        | 20                                                         |

| ft_stopword_file                | (built-in)                                                 |

| group_concat_max_len            | 1024                                                       |

| have_archive                    | NO                                                         |

| have_bdb                        | YES                                                        |

| have_blackhole_engine           | NO                                                         |

| have_compress                   | YES                                                        |

| have_crypt                      | YES                                                        |

| have_csv                        | NO                                                         |

| have_dynamic_loading            | YES                                                        |

| have_example_engine             | NO                                                         |

| have_federated_engine           | NO                                                         |

| have_geometry                   | YES                                                        |

| have_innodb                     | YES                                                        |

| have_isam                       | NO                                                         |

| have_merge_engine               | YES                                                        |

| have_ndbcluster                 | NO                                                         |

| have_openssl                    | DISABLED                                                   |

| have_ssl                        | DISABLED                                                   |

| have_query_cache                | YES                                                        |

| have_raid                       | NO                                                         |

| have_rtree_keys                 | YES                                                        |

| have_symlink                    | YES                                                        |

| hostname                        | localhost                                                  |

| init_connect                    |                                                            |

| init_file                       |                                                            |

| init_slave                      |                                                            |

| innodb_additional_mem_pool_size | 1048576                                                    |

| innodb_autoextend_increment     | 8                                                          |

| innodb_buffer_pool_awe_mem_mb   | 0                                                          |

| innodb_buffer_pool_size         | 8388608                                                    |

| innodb_checksums                | ON                                                         |

| innodb_commit_concurrency       | 0                                                          |

| innodb_concurrency_tickets      | 500                                                        |

| innodb_data_file_path           | ibdata1:10M:autoextend                                     |

| innodb_data_home_dir            |                                                            |

| innodb_doublewrite              | ON                                                         |

| innodb_fast_shutdown            | 1                                                          |

| innodb_file_io_threads          | 4                                                          |

| innodb_file_per_table           | OFF                                                        |

| innodb_flush_log_at_trx_commit  | 1                                                          |

| innodb_flush_method             |                                                            |

| innodb_force_recovery           | 0                                                          |

| innodb_lock_wait_timeout        | 50                                                         |

| innodb_locks_unsafe_for_binlog  | OFF                                                        |

| innodb_log_arch_dir             |                                                            |

| innodb_log_archive              | OFF                                                        |

| innodb_log_buffer_size          | 1048576                                                    |

| innodb_log_file_size            | 5242880                                                    |

| innodb_log_files_in_group       | 2                                                          |

| innodb_log_group_home_dir       | ./                                                         |

| innodb_max_dirty_pages_pct      | 90                                                         |

| innodb_max_purge_lag            | 0                                                          |

| innodb_mirrored_log_groups      | 1                                                          |

| innodb_open_files               | 300                                                        |

| innodb_rollback_on_timeout      | OFF                                                        |

| innodb_support_xa               | ON                                                         |

| innodb_sync_spin_loops          | 20                                                         |

| innodb_table_locks              | ON                                                         |

| innodb_thread_concurrency       | 8                                                          |

| innodb_thread_sleep_delay       | 10000                                                      |

| interactive_timeout             | 28800                                                      |

| join_buffer_size                | 131072                                                     |

| key_buffer_size                 | 8388600                                                    |

| key_cache_age_threshold         | 300                                                        |

| key_cache_block_size            | 1024                                                       |

| key_cache_division_limit        | 100                                                        |

| language                        | /usr/share/mysql/english/                                  |

| large_files_support             | ON                                                         |

| large_page_size                 | 0                                                          |

| large_pages                     | OFF                                                        |

| lc_time_names                   | en_US                                                      |

| license                         | GPL                                                        |

| local_infile                    | ON                                                         |

| locked_in_memory                | OFF                                                        |

| log                             | OFF                                                        |

| log_bin                         | OFF                                                        |

| log_bin_trust_function_creators | OFF                                                        |

| log_error                       |                                                            |

| log_queries_not_using_indexes   | OFF                                                        |

| log_slave_updates               | OFF                                                        |

| log_slow_queries                | OFF                                                        |

| log_warnings                    | 1                                                          |

| long_query_time                 | 10                                                         |

| low_priority_updates            | OFF                                                        |

| lower_case_file_system          | OFF                                                        |

| lower_case_table_names          | 0                                                          |

| max_allowed_packet              | 1048576                                                    |

| max_binlog_cache_size           | 4294967295                                                 |

| max_binlog_size                 | 1073741824                                                 |

| max_connect_errors              | 10                                                         |

| max_connections                 | 100                                                        |

| max_delayed_threads             | 20                                                         |

| max_error_count                 | 64                                                         |

| max_heap_table_size             | 16777216                                                   |

| max_insert_delayed_threads      | 20                                                         |

| max_join_size                   | 4294967295                                                 |

| max_length_for_sort_data        | 1024                                                       |

| max_prepared_stmt_count         | 16382                                                      |

| max_relay_log_size              | 0                                                          |

| max_seeks_for_key               | 4294967295                                                 |

| max_sort_length                 | 1024                                                       |

| max_sp_recursion_depth          | 0                                                          |

| max_tmp_tables                  | 32                                                         |

| max_user_connections            | 0                                                          |

| max_write_lock_count            | 4294967295                                                 |

| multi_range_count               | 256                                                        |

| myisam_data_pointer_size        | 6                                                          |

| myisam_max_sort_file_size       | 2147483647                                                 |

| myisam_recover_options          | OFF                                                        |

| myisam_repair_threads           | 1                                                          |

| myisam_sort_buffer_size         | 8388608                                                    |

| myisam_stats_method             | nulls_unequal                                              |

| net_buffer_length               | 16384                                                      |

| net_read_timeout                | 30                                                         |

| net_retry_count                 | 10                                                         |

| net_write_timeout               | 60                                                         |

| new                             | OFF                                                        |

| old_passwords                   | ON                                                         |

| open_files_limit                | 1024                                                       |

| optimizer_prune_level           | 1                                                          |

| optimizer_search_depth          | 62                                                         |

| pid_file                        | /var/run/mysqld/mysqld.pid                                 |

| port                            | 3306                                                       |

| preload_buffer_size             | 32768                                                      |

| profiling                       | OFF                                                        |

| profiling_history_size          | 15                                                         |

| protocol_version                | 10                                                         |

| query_alloc_block_size          | 8192                                                       |

| query_cache_limit               | 1048576                                                    |

| query_cache_min_res_unit        | 4096                                                       |

| query_cache_size                | 0                                                          |

| query_cache_type                | ON                                                         |

| query_cache_wlock_invalidate    | OFF                                                        |

| query_prealloc_size             | 8192                                                       |

| range_alloc_block_size          | 2048                                                       |

| read_buffer_size                | 131072                                                     |

| read_only                       | OFF                                                        |

| read_rnd_buffer_size            | 262144                                                     |

| relay_log_purge                 | ON                                                         |

| relay_log_space_limit           | 0                                                          |

| rpl_recovery_rank               | 0                                                          |

| secure_auth                     | OFF                                                        |

| secure_file_priv                |                                                            |

| server_id                       | 0                                                          |

| skip_external_locking           | ON                                                         |

| skip_networking                 | OFF                                                        |

| skip_show_database              | OFF                                                        |

| slave_compressed_protocol       | OFF                                                        |

| slave_load_tmpdir               | /tmp/                                                      |

| slave_net_timeout               | 3600                                                       |

| slave_skip_errors               | OFF                                                        |

| slave_transaction_retries       | 10                                                         |

| slow_launch_time                | 2                                                          |

| socket                          | /var/lib/mysql/mysql.sock                                  |

| sort_buffer_size                | 2097144                                                    |

| sql_big_selects                 | ON                                                         |

| sql_mode                        |                                                            |

| sql_notes                       | ON                                                         |

| sql_warnings                    | OFF                                                        |

| ssl_ca                          |                                                            |

| ssl_capath                      |                                                            |

| ssl_cert                        |                                                            |

| ssl_cipher                      |                                                            |

| ssl_key                         |                                                            |

| storage_engine                  | MyISAM                                                     |

| sync_binlog                     | 0                                                          |

| sync_frm                        | ON                                                         |

| system_time_zone                | CST                                                        |

| table_cache                     | 64                                                         |

| table_lock_wait_timeout         | 50                                                         |

| table_type                      | MyISAM                                                     |

| thread_cache_size               | 0                                                          |

| thread_stack                    | 196608                                                     |

| time_format                     | %H:%i:%s                                                   |

| time_zone                       | SYSTEM                                                     |

| timed_mutexes                   | OFF                                                        |

| tmp_table_size                  | 33554432                                                   |

| tmpdir                          | /tmp/                                                      |

| transaction_alloc_block_size    | 8192                                                       |

| transaction_prealloc_size       | 4096                                                       |

| tx_isolation                    | REPEATABLE-READ                                            |

| updatable_views_with_limit      | YES                                                        |

| version                         | 5.0.51a                                                    |

| version_bdb                     | Sleepycat Software: Berkeley DB 4.1.24: (January 11, 2008) |

| version_comment                 | Source distribution                                        |

| version_compile_machine         | i386                                                       |

| version_compile_os              | redhat-linux-gnu                                           |

| wait_timeout                    | 28800                                                      |

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

234 rows in set (0.00 sec)

4、全局變量

全局變量影響伺服器整體操作。當伺服器啟動時,它将所有全局變量初始化為預設值。這些預設值可以在選項檔案中或在指令行中指定的選項進行更改。要想更改全局變量,必須具有SUPER權限。全局變量作用于server的整個生命周期,但是不能跨重新開機。即重新開機後所有設定的全局變量均失效。要想讓全局變量重新開機後繼續生效,需要更改相應的配置檔案。

要設定一個全局變量,有如下兩種方式:

set global var_name = value; //注意:此處的global不能省略。根據手冊,set指令設定變量時若不指定GLOBAL、SESSION或者LOCAL,預設使用SESSION

set @@global.var_name = value; //同上

要想檢視一個全局變量,有如下兩種方式:

select @@global.var_name;

show global variables like "%var%";

mysql> show global variables;

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

| Variable_name                   | Value                                                      |

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

| auto_increment_increment        | 1                                                          |

| auto_increment_offset           | 1                                                          |

| automatic_sp_privileges         | ON                                                         |

| back_log                        | 50                                                         |

| basedir                         | /usr/                                                      |

繼續閱讀