科技网站公司,建设银行人力资源系统网站,wordpress word粘贴,如何建设和优化一个网站步骤这是Mysql系列第16篇。
环境#xff1a;mysql5.7.25#xff0c;cmd命令中进行演示。
代码中被[]包含的表示可选#xff0c;|符号分开的表示可选其一。
我们在使用mysql的过程中#xff0c;变量也会经常用到#xff0c;比如查询系统的配置#xff0c;可以通过查看系统变…这是Mysql系列第16篇。
环境mysql5.7.25cmd命令中进行演示。
代码中被[]包含的表示可选|符号分开的表示可选其一。
我们在使用mysql的过程中变量也会经常用到比如查询系统的配置可以通过查看系统变量来了解当我们需要修改系统的一些配置的时候也可以通过修改系统变量的值来进行。
我们需要做一些批处理脚本的时候可以使用自定义变量来做到数据的复用。所以变量这块也挺重要希望大家能够掌握。
本文内容 详解系统变量的使用 详解自定义变量的使用
变量分类 系统变量 自定义变量
系统变量
概念
系统变量由系统定义的不是用户定义的属于mysql服务器层面的。
系统变量分类 全局变量 会话变量
使用步骤
查看系统变量
//1.查看系统所有变量
show [global | session] variables;
//查看全局变量
show global variables;
//查看会话变量
show session variables;
show variables;上面使用了show关键字 查看满足条件的系统变量 通过like模糊匹配指定的变量 //查看满足条件的系统变量(like模糊匹配)
show [global|session] like %变量名%;上面使用了show和like关键字。 查看指定的系统变量
//查看指定的系统变量的值
select [global.|session.]系统变量名称;注意select和关键字global和session后面有个.符号。 赋值
//方式1
set [global|session] 系统变量名值;//方式2
set [global.|session.]系统变量名值;注意 上面使用中介绍的全局变量需要添加global关键字会话变量需要添加session关键字如果不写默认为session级别。 全局变量的使用中用到了关键字后面会介绍自定义变量自定义变量中使用了一个符号这点需要和全局变量区分一下。 全局变量
作用域
mysql服务器每次启动都会为所有的系统变量设置初始值。
我们为系统变量赋值针对所有会话连接有效可以跨连接但不能跨重启重启之后mysql服务器会再次为所有系统变量赋初始值。
示例
查看所有全局变量
/*查看所有全局变量*/
show global variables;查看包含tx字符的变量
/*查看包含tx字符的变量*/
mysql show global variables like %tx%;
--------------------------------
| Variable_name | Value |
--------------------------------
| tx_isolation | REPEATABLE-READ |
| tx_read_only | OFF |
--------------------------------
2 rows in set, 1 warning (0.00 sec)/*查看指定名称的系统变量的值如查看事务默认自动提交设置*/
mysql select global.autocommit;
---------------------
| global.autocommit |
---------------------
| 0 |
---------------------
1 row in set (0.00 sec)为某个变量赋值
/*为某个系统变量赋值*/
set global autocommit0;
set global.autocommit1;mysql set global autocommit0;
Query OK, 0 rows affected (0.00 sec)mysql select global.autocommit;
---------------------
| global.autocommit |
---------------------
| 0 |
---------------------
1 row in set (0.00 sec)mysql set global.autocommit1;
Query OK, 0 rows affected (0.00 sec)mysql select global.autocommit;
---------------------
| global.autocommit |
---------------------
| 1 |
---------------------
1 row in set (0.00 sec)会话变量
作用域
针对当前会话连接有效不能跨连接。
会话变量是在连接创建时由mysql自动给当前会话设置的变量。
示例
查看所有会话变量
/*①查看所有会话变量*/
show session variables;查看满足条件的会话变量
/*②查看满足条件的步伐会话变量*/
/*查看包含char字符变量名的会话变量*/
show session variables like %char%;查看指定的会话变量的值
/*③查看指定的会话变量的值*/
/*查看事务默认自动提交的设置*/
select autocommit;
select session.autocommit;
/*查看事务隔离级别*/
select tx_isolation;
select session.tx_isolation;为某个会话变量赋值
/*④为某个会话变量赋值*/
set session.tx_isolationread-uncommitted;
set tx_isolationread-committed;
set session tx_isolationread-committed;
set tx_isolationread-committed;效果
mysql select tx_isolation;
----------------
| tx_isolation |
----------------
| READ-COMMITTED |
----------------
1 row in set, 1 warning (0.00 sec)mysql set tx_isolationread-committed;
Query OK, 0 rows affected, 1 warning (0.00 sec)mysql select tx_isolation;
----------------
| tx_isolation |
----------------
| READ-COMMITTED |
----------------
1 row in set, 1 warning (0.00 sec)自定义变量
概念
变量由用户自定义的而不是系统提供的。
使用
使用步骤
1. 声明
2. 赋值
3. 使用查看、比较、运算分类 用户变量 局部变量
用户变量
作用域
针对当前会话连接有效作用域同会话变量。
用户变量可以在任何地方使用也就是既可以在begin end里面使用也可以在他外面使用。
使用
声明并初始化(要求声明时必须初始化)
/*方式1*/
set 变量名值;
/*方式2*/
set 变量名:值;
/*方式3*/
select 变量名:值;注意 上面使用了符合而上面介绍全局变量使用了2个符号这点注意区分一下。 set中号前面冒号是可选的select方式前面必须有冒号 赋值更新变量的值
/*方式1这块和变量的声明一样*/
set 变量名值;
set 变量名:值;
select 变量名:值;/*方式2*/
select 字段 into 变量名 from 表;注意上面select的两种方式。 使用
select 变量名;综合示例
/*set方式创建变量并初始化*/
set username路人甲java;
/*select into方式创建变量*/
select javacode2018 into gzh;
select count(*) into empcount from employees;/*select :方式创建变量*/
select first_name:路人甲Java,email:javacode2018163.com;
/*使用变量*/
insert into employees (first_name,email) values (first_name,email);局部变量
作用域
declare用于定义局部变量变量在存储过程和函数中通过declare定义变量在begin…end中且在语句之前。并且可以通过重复定义多个变量
declare变量的作用范围同编程里面类似在这里一般是在对应的begin和end之间。在end之后这个变量就没有作用了不能使用了。这个同编程一样。
使用
声明
declare 变量名 变量类型;
declare 变量名 变量类型 [default 默认值];赋值
/*方式1*/
set 局部变量名值;
set 局部变量名:值;
select 局部变量名:值;/*方式2*/
select 字段 into 局部变量名 from 表;注意局部变量前面没有符号 使用查看变量的值
select 局部变量名;示例
/*创建表test1*/
drop table IF EXISTS test1;
create table test1(a int PRIMARY KEY,b int);/*声明脚本的结束符为$$*/
DELIMITER $$
DROP PROCEDURE IF EXISTS proc1;
CREATE PROCEDURE proc1()
BEGIN/*声明了一个局部变量*/DECLARE v_a int;select ifnull(max(a),0)1 into v_a from test1;select v_b:v_a*2;insert into test1(a,b) select v_a,v_b;
end $$/*声明脚本的结束符为;*/
DELIMITER ;/*调用存储过程*/
call proc1();
/*查看结果*/
select * from test1;代码中使用到了存储过程关于存储过程的详解下章节介绍。 delimiter关键字
我们写sql的时候mysql怎么判断sql是否已经结束了可以去执行了
需要一个结束符当mysql看到这个结束符的时候表示可以执行前面的语句了mysql默认以分号为结束符。
当我们创建存储过程或者自定义函数的时候写了很大一片sql里面包含了很多分号整个创建语句是一个整体需要一起执行此时我们就不可用用分号作为结束符了。
那么我们可以通过delimiter关键字来自定义结束符。
用法
delimiter 分隔符上面示例的效果
mysql /*创建表test1*/
mysql drop table IF EXISTS test1;
Query OK, 0 rows affected (0.01 sec)mysql create table test1(a int PRIMARY KEY,b int);
Query OK, 0 rows affected (0.01 sec)mysql
mysql /*声明脚本的结束符为$$*/
mysql DELIMITER $$
mysql DROP PROCEDURE IF EXISTS proc1;- CREATE PROCEDURE proc1()- BEGIN- /*声明了一个局部变量*/- DECLARE v_a int;-- select ifnull(max(a),0)1 into v_a from test1;- select v_b:v_a*2;- insert into test1(a,b) select v_a,v_b;- end $$
Query OK, 0 rows affected (0.00 sec)Query OK, 0 rows affected (0.00 sec)mysql
mysql /*声明脚本的结束符为;*/
mysql DELIMITER ;
mysql
mysql /*调用存储过程*/
mysql call proc1();
-------------
| v_b:v_a*2 |
-------------
| 2 |
-------------
1 row in set (0.00 sec)Query OK, 1 row affected (0.01 sec)mysql /*查看结果*/
mysql select * from test1;
---------
| a | b |
---------
| 1 | 2 |
---------
1 row in set (0.00 sec)用户变量和局部变量对比
作用域定义位置语法用户变量当前会话会话的任何地方加符号不用指定类型局部变量定义他的begin end之间begin end中的第一句话不加符号要指定类型
总结 本文对系统变量和自定义变量的使用做了详细的说明知识点比较细可以多看几遍加深理解 系统变量可以设置系统的一些配置信息数据库重启之后会被还原 会话变量可以设置当前会话的一些配置信息对当前会话起效 declare创建的局部变量常用于存储过程和函数的创建中 作用域全局变量对整个系统有效、会话变量作用于当前会话、用户变量作用于当前会话、局部变量作用于begin end之间 注意全局变量中用到了用户变量变量用到了而局部变量没有这个符号 delimiter关键字用来声明脚本的结束符