mysql高级概念(MySQL 自定义变量的概念及特点)
类别:数据库 浏览量:1045
时间:2021-10-03 01:24:05 mysql高级概念
MySQL 自定义变量的概念及特点MySQL 的自定义 就是存储值的临时容器,只要与服务端的连接是活跃的,容器中的值可以保存和使用。可以通过简单的 SET 或 SELECT语句 设置自定义变量,如下所示:
|
SET @one := 1; SET @min_actor := ( SELECT MIN (actor_id) FROM sakila.actor); SET @last_week := CURRENT_DATE -INTERNAL 1 WEEK; |
定义好变量后,就可以在 SQL 语句中使用这个变量:
|
SELECT * FROM film WHERE created_date <= @last_week; |
虽然 MySQL 自定义变量很强大,但是也需要知道自定义变量本身也是有缺陷的,这些缺陷包括:
- 自定义变量会禁用查询缓存。
- 不可以用做替代语义上的标识符,例如表名称或列名称,或者是在 LIMIT 子句中使用。
- 自定义变量是基于单次连接的,因此不可以跨连接使用。
- 如果使用连接池或持久连接,自定义变量会导致你的代码与交互隔离,这出现的时候可能是代码的 bug 或连接池的 bug,但是是可能发生的。
- 在 MySQL 5.0以前的版本中是大小写敏感的,因此要注意(在 MySQL 5.0以后已经不区分大小写了)。
- 无法显示地指定变量类型,而实际变量的类型依赖于不确定的类型推断,并且不同的版本会有差异,最好的方式是在一开始定义的时候指定类型,比如使用0设定整数变量,0.0设定浮点数变量,''用于字符串。但是如果后面指定了新的值,类型会跟随新的值改变,这是因为 MySQL 的自定义变量的类型是动态的。
- 优化器在某些情况下有可能会将自定义变量优化掉,导致无法按照期望的方式进行查询。
- 赋值的次序,甚至包括赋值的时间都是不确定的,这取决于优化器选择的查询计划。因此,最终的结果可能让人困惑。
- 赋值操作符的优先级低于任何其他操作符,因此必须显示地使用括号。
- 未定义变量不会报错,这很容导致错误出现。
自定义变量可以用在所有类型的语句中,而不仅仅是 SELECT 语句。事实上,这是自定义变量的一个最大的优势。例如,我们可以重写复杂的查询,例如利用子查询进行排序的计算,或者是完成一次低代价的UPDATE 语句。
有些时候,优化器会认为这个变量是编译时常量而不进行赋值,这会导致期望的行为很怪异。而将自定义变量的赋值放入类似 LEAST函数中通常会避免这个问题。另一个方式是在使用之前检查一下自定义变量是否有值。有时候你想这样做,但有些时候你不想这么做。
通过一些小的实验,我们可以使用自定义变量做很多有趣的事情,例如:
- 计算总量和平均值;
- 对于分组查询模拟 FIRST 和 LAST 函数;
- 对于很大的数做数学运算;
- 将一整张表转换成 MD5哈希值;
- 过滤掉0值附近但超过设定边界的样本值;
- 模拟读写指针位置;
- 将变量嵌入到 WHERE 条件并在 SHOW 语句中显示。
自定义变量在某些应用场合很有用,例如统计出现次数的排序值,计算更新和插入相同数据的次数,以及延迟的联合查询,下一篇文章将介绍具体的用法。
以上就是MySQL 的自定义变量的概念及特点的详细内容,更多关于MySQL 自定义变量的资料请关注开心学习网其它相关文章!
原文链接:https://juejin.cn/post/6961399545511018510
您可能感兴趣
- mysql完全快速清空一个表(浅谈MySQL如何优雅的做大表删除)
- windows mysql 忘记密码(解决MySQL忘记密码问题的方法)
- mysql中的null和空值的区别(解决mysql使用not in 包含null值的问题)
- mysql字符集怎么看(mysql字符集相关总结)
- 查询按照部门分组的mysql语句(Mysql根据某层部门ID查询所有下级多层子部门的示例)
- MySQL中interactive_timeout和wait_timeout
- mysql查询条件的优化(MySQL查询优化之查询慢原因和解决技巧)
- docker 镜像mysql(解决docker拉取mysql镜像太慢的情况)
- mysql设置updatetime自动更新(mysql 实现添加时间自动添加更新时间自动更新操作)
- zabbix如何配置监控(zabbix监控mysql的实例方法)
- mysql 命令与sqlserver的区别大么(MySQL系列之执行SQL 语句时发生了什么?)
- mysql字段多有什么问题(MySQL编码不一致可能引起的一些问题)
- mysql视图管理方法(MySQL 视图View原理解析)
- mysql哪个版本可以下载msi(新手必备之MySQL msi版本下载安装图文详细教程)
- MYSQL中GROUP BY不包含所有的非聚合字段时的注意事项
- MySQL SQL Assistant智能提示
- 今天 3月13日,31年前,一个英雄少年感动了中国(今天3月13日31年前)
- 你好,新成理人丨成都理工大学2019级新生开学典礼隆重举行(新成理人丨成都理工大学2019级新生开学典礼隆重举行)
- 这部民警编演的红色话剧,讲述了一个不断追寻的故事(这部民警编演的红色话剧)
- 日本菜有什么好吃(日本菜有什么好吃的做法)
- 韩国泡菜做法(韩国泡菜的做法步骤)
- 泰国旅游攻略(泰国旅游攻略必去景点)
热门推荐
- zabbix启动教程(docker部署zabbix_agent的方法步骤)
- mysql并发查询优化(详解MySQL 联合查询优化机制)
- docker-compose 原理(详解docker compose 用法)
- 通过js获取Url的参数值
- thinkphp导入excel(Yii框架使用PHPExcel导出Excel文件的方法分析改进版)
- sqlserver2016使用教程(SQL Server 2016 Alwayson新增功能图文详解)
- sql server2005如何配置(SQLServer2005创建定时作业任务)
- linux系统内核参数优化(Linux 系统优化的一些建议内核优化)
- dede内容模型管理(Dede网站修改模板路径的方法 拒绝模板泄漏被盗)
- 挂游戏用云服务器好不好?(挂游戏用云服务器好不好?)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9