mysql - 为什么我们可以使用 = 和 := both with set?

标签 mysql sql stored-procedures

一般我们知道'='操作符用于比较,':='操作符用于赋值,

但是当与 SET 一起使用时,两者都作为 assignment operator 为什么?

低于存储过程 例如:

DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `substringExample`()
BEGIN 
    DECLARE x varchar(7);    
    DECLARE num int;
    DECLARE inc int;

    SET inc:= 1;

    WHILE inc<1400 DO

    SELECT SUBSTRING(USER_TEMP_NUM, 8, 13) AS ExtractString 
    INTO x FROM USER_REGISTRATION_DETAILS where sl_no=inc;

    SET num= CONVERT(x,int);

    IF (num%2=0) THEN
        SELECT num;
    END IF;
       SET inc:=inc+1;
    END WHILE;
END$$
DELIMITER ;

在上面的代码中,SET num= CONVERT(x,int); 给出了正确的输出以及 SET num:= CONVERT(x,int);

我是存储过程的初学者,所以不知道专家级别

最佳答案

来自 John Woo的回答:

它们都是赋值运算符,但我能发现它们的区别是 = 可用于执行 bool 运算,而 := 不能。

valid: SUM(val = 0)
Invalid: SUM(val := 0)

FROM User-Defined Variables

此外,您还可以在 SET 以外的语句中为用户变量赋值。在这种情况下,赋值运算符必须是 := 而不是 =,因为后者在非 SET 语句中被视为比较运算符 =。

mysql> SET @t1=1, @t2=2, @t3:=4;
mysql> SELECT @t1, @t2, @t3, @t4 := @t1+@t2+@t3;
+------+------+------+--------------------+
| @t1  | @t2  | @t3  | @t4 := @t1+@t2+@t3 |
+------+------+------+--------------------+
|    1 |    2 |    4 |                  7 | 
+------+------+------+--------------------+

同时检查这个链接,希望对你有帮助,

What is the difference between := and = mysql assignment operator

关于mysql - 为什么我们可以使用 = 和 := both with set?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49400132/

相关文章:

sql - Access 仅匹配一个的vba sql

mysql - 如何跨多种数据库类型测试 SQL 语句?

mysql - 是否有可能用 return 之类的东西突破 mysql 存储过程?

java - OracleCallableStatement V/S CallableStatement

sql - MySQL 搜索查询

php - 如何使用数组从数据库中获取数据

java - 如何刷新 JTable 绑定(bind)到 MySQL 数据库

mysql - 保持动态数据库字段的最佳方式?

SQL查询在内部联接期间连接两列

sql - 按名称删除一组存储过程