怎样设置MYSQL局部变量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样设置MYSQL局部变量相关的知识,希望对你有一定的参考价值。

DELIMITER $$
CREATE PROCEDURE setval()
BEGIN
DECLARE city VARCHAR(200) ;
SET city = '广州市';
SELECT cid,ctruename
FROM customers
WHERE caddress LIKE CONCAT('%',city,'%');
END$$
DELIMITER ;
call setval();出错data too long

参考技术A 你确定你的这句SQL只返回一个值:
select type from inserted
你给type赋值,如果返回的是多个值的话,就会出现像
set type = '001', '002', '003'...
这种情况。
不知道你是不是这个问题。

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 &nb

以上是关于怎样设置MYSQL局部变量的主要内容,如果未能解决你的问题,请参考以下文章

mysql 变量设置问题

如何设置局部变量memberExpression值

我想知道传奇怎样自动清除全局G变量?

请教局部变量的问题

MSIL实用指南-局部变量的声明保存和加载

Xamarin.Forms 在 XAML 中使用局部变量