MySQL中符号@的作用

 更新时间:2022年06月27日 11:13:25   作者:Gan_1314  
本文主要介绍了MySQL中符号@的作用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

select @a;

变量名,如果你不加的话,会认为这是一个列名,但是这列不存在,就报错了;

  • @变量名 : 定义一个用户变量.
  • = 对该用户变量进行赋值.

用户变量赋值有两种方式: 一种是直接用"=“号,另一种是用”:=“号。

其区别在于:

  • 使用set命令对用户变量进行赋值时,两种方式都可以使用;
  • 用select语句时,只能用”:=“方式,因为select语句中,”="号被看作是比较操作符。

(@i:=@i+1)

可以在生成查询结果表的时候生成一组递增的序列号

select (@i:=@i+5) as rownum, surname, personal_name from student, (select @i:=100) as init;

select @ids := 101,@l := 0

GROUP_CONCAT + group by

按照分组,连接字段上的数据,默认以,,也可以指定分割符

mysql的@用法

1,增加临时表,实现变量的自增

SELECT (@i:=@i+1),t.* FROM table_name t,(SELECT @i:=0) AS j

(@i:=@i+1)代表定义一个变量,每次叠加1;
(SELECT @i:=0) AS j 代表建立一个临时表,j是随便取的表名,但别名一定要的。

2,实现排序递增

SELECT
	( @i := @i + 1 ),
	p.* 
FROM
	( SELECT * FROM sys_region ORDER BY create_time DESC ) p, ( SELECT @i := 0 ) k

在这里插入图片描述

3,实现分组递增

SELECT
	@r := CASE WHEN @type = a.LEVEL THEN 
			@r + 1 
		ELSE 
			1 
		END AS rowNum,
	@type := a.`level` AS type,
	a.id 
FROM
	sys_region a,( SELECT @r := 0, @type := '' ) b;

在这里插入图片描述

这里用了临时变量@type,因为对临时变量操作的时候,被使用的变量都是临时变量。

实战

INSERT INTO t_top ( col_account, col_date, p_account, p_name )

SELECT b.col_account, b.col_date, b.p_account, b.p_name FROM
(
	SELECT
		@num := CASE WHEN @account = a.col_account THEN 
				@num + 1 
			ELSE 
				1 
			END AS rownum,
		@account := a.col_account AS account,
		a.* 
	FROM
		( SELECT * FROM zb_top  ORDER BY col_account, p_avg DESC ) a,
	( SELECT @num := 0, @account := '' ) j
) b where 6 > b.rownum

计算用户距上次访问的天数,根据imei号区分不同的用户,如果时间段内只有一次访问则为0。

初始化数据:
代码示例:

CREATE TABLE `pd` (
	`imei` varchar(32) NOT NULL DEFAULT '',
	`date` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `pd` VALUES ('1', '2013-07-25 00:00:01');
INSERT INTO `pd` VALUES ('1', '2013-07-26 00:00:02');
INSERT INTO `pd` VALUES ('2', '2013-07-23 00:00:04');
INSERT INTO `pd` VALUES ('2', '2013-07-26 00:00:03');
INSERT INTO `pd` VALUES ('3', '2013-07-26 00:00:01');

脚本,使用@特殊变量:
代码示例:

SELECT * FROM
(
	SELECT
		imei user_id,
		max(max_dd),
		max(max_dd_2),
		to_days(max(max_dd)) - to_days(max(max_dd_2)) days 
	FROM
		(
			SELECT
				imei,
				max_dd,
				max_dd_2 
			FROM
				(
					SELECT
						tmp.imei,
						tmp.date,
						IF(@imei = tmp.imei, @rank := @rank + 1, @rank := 1) AS ranks,
						IF(@rank = 1, @max_d := tmp.date, @max_d := NULL) AS max_dd,
						IF(@rank = 2, @max_d_2 := tmp.date, @max_d_2 := NULL) AS max_dd_2,
						@imei := tmp.imei 
					FROM
						(SELECT imei, date FROM pd ORDER BY imei ASC, date DESC) tmp,
						(SELECT @rownum := 0, @imei := NULL, @rank := 0, @max_d := NULL, @max_d_2 := NULL) a 
				) result 
		) t 
	GROUP BY
		imei 
	HAVING
		count(*) > 1 
) x WHERE x.days >= 1 AND EXISTS (SELECT 'x' FROM pd WHERE date > '2013-07-26 00:00:00')

在这里插入图片描述

注意:
表数据量较大时,使用union all等操作将会有悲剧性的结果。

到此这篇关于MySQL中符号@的作用的文章就介绍到这了,更多相关MySQL 符号@内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • 详解mysql查询缓存简单使用

    详解mysql查询缓存简单使用

    这篇文章主要介绍了详解mysql查询缓存简单使用的相关资料,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-03-03
  • MySQL忘记root密码以及远程无法连接的解决方法

    MySQL忘记root密码以及远程无法连接的解决方法

    这篇文章主要介绍了MySQL忘记root密码以及远程无法连接问题的解决方法,文中有详细的代码示例来解决这些办法,需要的朋友可以参考下
    2023-06-06
  • Win10下免安装版MySQL8.0.16的安装和配置教程图解

    Win10下免安装版MySQL8.0.16的安装和配置教程图解

    这篇文章主要介绍了Win10下免安装版MySQL8.0.16的安装和配置 ,本文通过图文并茂的形式给大家介绍的非常详细,具有一定的参考解决价值,需要的朋友可以参考下
    2019-06-06
  • Linux下将数据库从MySQL迁移到MariaDB的基础操作教程

    Linux下将数据库从MySQL迁移到MariaDB的基础操作教程

    这篇文章主要介绍了将数据库从MySQL迁移到MariaDB的基础操作教程,当然迁移之前不要忘记数据库的备份!需要的朋友可以参考下
    2015-11-11
  • MySQL学习笔记4:完整性约束限制字段

    MySQL学习笔记4:完整性约束限制字段

    完整性约束是对字段进行限制,从而符合该字段达到我们期望的效果比如字段含有默认值,不能是NULL等如果插入的数据不满足限制要求,数据库管理系统就拒绝执行操作
    2013-01-01
  • 如何批量生成MySQL不重复手机号大表实例代码

    如何批量生成MySQL不重复手机号大表实例代码

    这篇文章主要给大家介绍了关于如何批量生成MySQL不重复手机号大表的相关资料,,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11
  • MySql insert插入操作的3个小技巧分享

    MySql insert插入操作的3个小技巧分享

    这篇文章主要介绍了MySql insert插入操作的3个小技巧分享,本文讲解了插入的数据来源自其他表、插入时排除(忽略)重复记录、插入时遇到重复记录做更新操作三个小技巧,需要的朋友可以参考下
    2015-03-03
  • MySQL数据库的多种连接方式及工具

    MySQL数据库的多种连接方式及工具

    本文详细的介绍了数据库的连接方式及数据库连接的工具,给初学者分享一些知识,也是学习总结,感兴趣的小伙伴可以阅读一下
    2023-03-03
  • 在MySQL中开启日志记录并排查操作详细步骤记录

    在MySQL中开启日志记录并排查操作详细步骤记录

    MySQL日志管理是数据库系统维护和优化的重要环节,它提供了对服务器运行状态的详细记录,这篇文章主要给大家介绍了关于如何在MySQL中开启日志记录并排查操作的相关资料,需要的朋友可以参考下
    2024-08-08
  • MySQL 开启慢查询日志的方法

    MySQL 开启慢查询日志的方法

    本篇文章主要介绍了MySQL 开启慢查询日志的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06

最新评论