MySQL之变量类型:全局变量、会话变量、用户变量、局部变量

结论: MySQL 变量类型: 1 .系统变量:全局(服务器实例)和会话变量(当前连接)。
2 、用户自定义变量:用户变量和局部变量。

全局变量:对所有会话有效。
更改后,必须重新启动服务器才能生效。

会话变量:仅对当前会话有效。

用户变量:与会话变量类似,由用户定义。

局部变量:仅在BEGIN...END块内有效,必须声明类型。
查看:显示[会话]变量;或指定 LIKE 条件。
赋值:对全局/会话变量使用 SET 语句,对用户变量使用 SET@ 或 SELECT...INTO,对局部变量使用 DECLARE 或 SET/SELECT...INTO。
显示用户变量:SELECT@variablename;。
显示局部变量:SELECT局部变量名;。
范围和语法不同,变量类型的选择必须根据具体要求。

MySQL中SET指令的使用规则与作用域详解mysql中set作用域

说实话,MySQL中的SET命令还是比较实用的,但是使用的时候也要注意一下规则。
主要用于改变各种变量的值。

1 . SET指令的基本用法 该指令用于给变量赋值。
最简单的写法是: sql SET变量名=值;
例如,如果你想给变量my_var赋一个字符串值,你必须这样写: sql SET my_var = 'Hello MySQL';
注意,如果是字符串,值前后必须加引号。
单引号和双引号都是可以接受的。
数字不需要引号,直接赋值即可: sql SET my_var = 1 00;
对于布尔值,可以使用 1 (代表 true)或 0(代表 false),也可以使用 'false' 或 'true': sql 设置 my_var = 1 ; -
真实 设置 my_var = '假'; -
false
如果变量名包含特殊字符,例如句点或下划线,则必须用反引号括起来: sql SET my.var = '特殊名称';
2 . SET指令的范围 SET指令设置的变量主要有三类:全局变量、会话变量和用户变量。
他们的行动范围不同。

1 . 全局变量 全局变量被整个MySQL服务器使用。
设置此变量后,所有连接的会话都可以访问它。
例如,如果想将全局字符集改为utf8 ,可以这样写: sql SET GLOBAL character_set_server = 'utf8 ';
此设置在 MySQL 服务器运行时有效,直到您重新启动服务器或使用其他命令将其更改回来。

2 会话变量 会话变量只能在当前连接的会话中使用。
每次连接MySQL时,MySQL都会自动为此会话设置一些默认变量。
当会话断开时这些变量将消失。
要设置会话变量,请使用以下命令: sql SET SESSION character_set_client = 'utf8 ';
例如,如果您只想在当前会话中将客户端字符集更改为 utf8 ,请使用此命令。

3 用户变量 用户变量是您自己定义的变量,只能在当前会话中使用。
对于此变量,必须首先使用 SET 显式为其赋值,然后它才会存在。
像这样定义用户变量: sql SET @my_var = 1 2 3 ;
例如,您要定义一个值为 1 2 3 的用户变量 my_var: sql SET @my_var = 1 2 3 ;
该变量只能在当前会话中使用。
当会话断开时它将消失。

3 SET指令的实际应用 1 .设置系统变量 您可以使用SET命令来更改MySQL的各种系统设置。
例如设置全局字符集为utf8 : sql SET GLOBAL character_set_server = 'utf8 ';
还有其他系统变量也可以通过这种方式更改,例如时间格式、日志设置等。

2 . 设置用户变量 用户变量是您自己定义的变量,可以在当前会话中使用。
例如,定义一个值为 1 2 3 的用户变量 my_var: sql SET @my_var = 1 2 3 ;
然后您可以使用此变量进行各种计算: sql 设置@a=1 ; 设置@b = 2 ; 设置@c = @a + @b; -
@c的值为3
3 、使用SET语句同时赋值 您可以使用 SET 语句为多个变量赋值: sql SET @a = 1 , @b = 2 , @c = 'Hello';
您还可以使用SET语句将查询结果存储在变量中。
例如,查看users表中有多少条记录: sql SET @count = (SELECT COUNT() FROM users);
该语句将 users 表中的记录总数存储到变量 @count 中。

总结一下。
SET指令用于设置各种变量。
变量分为三种类型:全局变量、会话变量和用户变量,具有不同的作用域。
注意使用时要区分,不要混淆。

sql中declare的用法

哎呀,您发布的 SQL DECLARE 描述太详细了...这让我有些乐观了。
但它确实是一个非常实用的东西,用得好的话可以为你省去很多麻烦。

上一次我在 2 02 3 年 1 2 月帮助客户调试存储过程时,遇到了 DECLARE 陷阱。
他们的旧代码里有很多未赋值的变量,导致某些数据特别极端的时候就会出现bug,这着实让我苦恼了好久。
所以你说范围和 NULL 默认值非常重要。

给我印象最深的是MySQL中DECLARE的使用。
我觉得它与SQL Server不同,尤其是在存储过程中定义变量时。
MySQL变量声明必须单独行,并且不能与赋值语句缩进,否则直接报错。
在您的示例中,DECLARE @age INT := 2 5 ;在 SQL Server 中没问题,但 MySQL 不识别。

毕竟DECLARE的核心价值是让SQL代码更加规范和动态。
像你提到的存储过程参数传递和动态SQL这样的场景实际上可以解决很多硬编码问题。
但如果使用过多,则需要注意性能问题。
我有一个朋友以前写过超级复杂的动态SQL,但是每次运行都慢得离谱。
最终发现他声明了一堆中间变量,但是SQL Server优化器无法弄清楚发生了什么,所以它不断重复计算。
所以并不是变量越多越好,要看场景。

无论如何,如果你想学习DECLARE,请记住几个关键点:不要忘记分配可能导致误用NULL的值,了解范围在哪里,以及防止动态SQL注入。
通过更多的练习你就会理解其他的事情。
这东西真不是看一遍说明书就能掌握的。

php 从 mysql 取值 为变量 赋值

援助是独一无二的,这并不意味着只有一项记录。

判断援助的存在: SQL SELECT 1 FROM table_name WHERE col = col LIMIT 1 ;
查看返回的行数,0表示不存在,1 表示存在。
限制 1 保证性能。

少用SELECT并选择字段以减少数据传输。

实用提醒:始终指定字段名称。