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

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.youkuaiyun.com/jiangjunshow

<think>好的,我现在需要回答用户关于在MySQL Workbench中定义变量的方法。首先,我得回忆一下MySQL变量的使用方式。记得MySQL中有用户变量和局部变量两种类型,用户变量以@符号开头,比如@var_name,而局部变量则是在存储过程中用DECLARE语句定义的。用户可能在Workbench中直接执行SQL语句,所以应该重点介绍用户变量定义方法。 接下来,我需要确认用户变量在Workbench中的使用语法。用户变量可以通过SET命令或者SELECT语句来赋值,例如SET @var = 1;或者SELECT @var := 2;。这时候需要给出具体的示例,比如在查询中使用变量来计算总和或作为条件。同时,要注意变量在会话期间有效,关闭连接后变量会被释放。 然后,考虑局部变量的情况。局部变量只能在存储过程、函数或触发器中使用,需要使用DECLARE来声明,并且要指定数据类型。例如在存储过程中定义变量,然后进行赋值和操作。这部分需要举例说明,比如创建一个存储过程,在其中使用局部变量进行计算。 另外,用户可能在Workbench中编写存储过程,所以需要说明如何在Workbench中创建和使用这些结构。比如使用DELIMITER命令来更改语句结束符,然后编写存储过程,最后恢复默认的结束符。同时,要提醒用户注意Workbench的版本差异,某些语法可能在旧版本中不支持。 还要考虑到用户可能遇到的常见问题,比如变量作用域的问题,用户变量和局部变量的区别,以及变量在查询中的正确使用方式。例如,在查询中赋值变量时,使用:=运算符而不是=,避免和比较操作符混淆。 最后,结合用户提供的引用内容,引用[3]提到了ALTER TABLE语句在MySQL 5.7.13之后的行为变化,可能与变量定义无关,但需要确保回答不涉及表结构变更的内容。引用[2]提到Workbench的管理功能,但变量定义更多属于SQL语法层面,所以可能不需要直接引用这些内容。但可以提到在Workbench中执行这些SQL语句的方法,比如在查询标签页中直接输入命令。 总结步骤:首先介绍用户变量定义和赋值方法,给出示例;然后讲解局部变量在存储过程中的使用;最后提醒注意事项和常见问题。确保语法正确,使用中文回答,结构清晰,并生成相关问题。</think>在 MySQL Workbench 中定义变量主要通过 SQL 语法实现,分为**用户变量**和**局部变量**两种类型。以下是具体方法: --- ### 一、用户变量(会话级变量) **语法规则**:以 `@` 符号开头,直接通过 `SET` 或 `SELECT` 赋值,会话关闭后失效。 #### 1. 使用 `SET` 语句 ```sql SET @变量名 = 值; -- 示例 SET @total_price = 100; SET @discount_rate = 0.9 * @total_price; ``` #### 2. 使用 `SELECT` 语句 ```sql SELECT @变量名 := 值; -- 示例 SELECT @user_count := COUNT(*) FROM users; SELECT @avg_salary := AVG(salary) FROM employees WHERE department = 'IT'; ``` #### 3. 在查询中直接使用 ```sql SELECT @row_num := @row_num + 1 AS row_number, name FROM students, (SELECT @row_num := 0) AS init; ``` --- ### 二、局部变量(存储过程/函数内) **语法规则**:在存储过程、函数或触发器中使用 `DECLARE` 定义,需指定数据类型。 #### 1. 存储过程示例 ```sql DELIMITER $$ CREATE PROCEDURE calculate_bonus() BEGIN DECLARE base_salary INT DEFAULT 5000; -- 定义局部变量 DECLARE bonus INT; SET bonus = base_salary * 0.2; -- 赋值 SELECT bonus; END $$ DELIMITER ; ``` #### 2. 函数示例 ```sql DELIMITER $$ CREATE FUNCTION get_tax(income DECIMAL(10,2)) RETURNS DECIMAL(10,2) BEGIN DECLARE tax_rate DECIMAL(3,2) DEFAULT 0.15; RETURN income * tax_rate; END $$ DELIMITER ; ``` --- ### 三、注意事项 1. **变量作用域**: - 用户变量(`@var`)全局有效,但会话结束后释放。 - 局部变量仅在定义的存储过程/函数内有效。 2. **赋值运算符**: - `SET` 使用 `=`,`SELECT` 必须用 `:=` 避免歧义,例如: ```sql SELECT @count := COUNT(*) FROM orders; -- 正确 SELECT @count = COUNT(*) FROM orders; -- 错误(返回布尔值) ``` 3. **Workbench 兼容性**:需确保 MySQL 版本支持(如 MySQL 5.7+ 对存储过程的支持[^3])。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值