您的位置:首页 > 数据库 > MySQL

MySql中的变量定义

2014-05-04 10:41 495 查看
根据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/ |

| 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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: