mysql 变量

  • 练习用到的表如下
CREATE TABLE `person` (
  `id` int(11) DEFAULT NULL,
  `first_name` varchar(20) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `gender` char(1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `test`.`person` (`id`, `first_name`, `age`, `gender`) VALUES (1, 'Bob', 25, 'M');
INSERT INTO `test`.`person` (`id`, `first_name`, `age`, `gender`) VALUES (2, 'Jane', 20, 'F');
INSERT INTO `test`.`person` (`id`, `first_name`, `age`, `gender`) VALUES (3, 'Jack', 30, 'M');
INSERT INTO `test`.`person` (`id`, `first_name`, `age`, `gender`) VALUES (4, 'Bill', 32, 'M');
INSERT INTO `test`.`person` (`id`, `first_name`, `age`, `gender`) VALUES (5, 'Nick', 22, 'M');
INSERT INTO `test`.`person` (`id`, `first_name`, `age`, `gender`) VALUES (6, 'Kathy', 18, 'F');
INSERT INTO `test`.`person` (`id`, `first_name`, `age`, `gender`) VALUES (7, 'Steve', 39, 'M');
INSERT INTO `test`.`person` (`id`, `first_name`, `age`, `gender`) VALUES (8, 'Anne', 25, 'F');

mysql set变量while mysql变量怎么使用_数据库

变量

系统变量:全局变量、会话变量
自定义变量:用户变量、局部变量

系统变量
说明:变量由系统提供,不是用户定义,属于服务器层面。
使用语法:

#查看所有的系统变量
SHOW VARIABLES; 
SHOW GLOBAL VARIABLES;
SHOW SESSION VARIABLES;

#查看满足条件的部分系统变量
SHOW  VARIABLES LIKE '%char%';

#查看指定的某个系统变量的值
SELECT @@global.系统变量名;
SELECT @@GLOBAL.autocommit;   1

#为某个系统变量赋值
#方式一:
SET GLOBAL | 【SESSION】.系统变量名 = 值;
#方式二:
SET @@GLOBAL | 【SESSION】.系统变量名 = 值;

注意:如果是全局级别则需要加 GLOBAL,如果是会话级别,则需要加 SESSION,如果不写则默认 SESSION

全局变量作用域:服务器每次启动将为所有全局变量赋初始值,针对所有的会话(连接)有效,但不能跨重启,重启服务器后,失效

会话变量作用域:仅仅针对以当前会话(连接)有效。

二、自定义变量
说明:变量是用户自定义的,不是由系统定义的

使用步骤
声明
赋值
使用(查看,比较,运算等)

1.用户变量
作用域:针对于当前(会话)连接有效,同于会话变量的作用域
应用在任何地方,也就是 begin end 的里面 或者 begin end 的外面

2.局部变量
作用域:仅仅定义在它的 begin end 中 有效

作用域

定义和使用的位置

语法

用户变量

当前会话中

会话中的任何地方

必须加@符号,不用限定类型

局部变量

BEGIN END 中

只能在BEGIN END 中,且为第一句话

一般不用加@符号,需要限定类型

#1.声明
DECLARE 变量名 类型; 
DECLARE 变量名 类型 DEFAULT 值;

#2.赋值
set @局部变量名=值;
set @局部变量名:=值;
select @局部变量名:=值;

#3.使用
SELECT 局部变量名;

a.定义和修改

方法一

#声明并初始化 赋值的操作符: : 或 :=
set @变量名:=值;

方法二

#SELECT 只能使用 :=
select @变量名:=值;

方法三

select 查询的结果 into @变量名 from 表;

注意:要求查询的结果只能是一个值,如果是多个是不行的

b.使用

select @变量名;
例子:声明两个变量并赋初始值,求和并打印

1用户变量

set @num1:=3;
set @num2:=4;
SELECT @res:=@num1+@num2; #7

SELECT @num1+@num2 into @result;   #意思是将@num1+@num2的结果写入到新变量 @result中
SELECT @result #7

正常是先查询后排序

有用到变量的时候,会是先排序后查询

set @rownum:=0;
SELECT 
  first_name,
	gender,
	@rownum
FROM person
WHERE @rownum <=1
ORDER BY first_name,LEAST(0,@rownum:=@rownum+1);

mysql set变量while mysql变量怎么使用_mysql_02

  1. inner join 的简写
select * from a inner join b on a.id = b.id
select * from a,b where a.id = b.id #实际上是a表b表 做了笛卡尔积,然后用 where 做筛选,留下符合条件的

练习:根据不同性别进行人员分组,然后根据分组按照年龄进行升序排序得到序号

1.第一步,先进行排序

SELECT
	first_name,
	gender,
	age
FROM person
ORDER BY gender,age ASC;

mysql set变量while mysql变量怎么使用_变量名_03

2.第二步,在进行加序号

SELECT
	first_name,
	gender,
	age,
	rank
FROM 
(SELECT
	first_name,
	gender,
	age,
	@rank:=if(@gen=gender,@rank+1,1) AS rank,
	@gen:=gender
FROM person,(SELECT @rank:=0,@gen:=NULL) temp
ORDER BY gender,age ASC) a;

mysql set变量while mysql变量怎么使用_变量名_04