准备好的语句和 MySQL 用户变量之间的相似之处是什么?


众所周知,MySQL 用户变量特定于它们所使用的客户端连接,并且仅存在于该连接持续期间。当连接结束时,所有用户变量都丢失。类似地,准备好的语句也仅存在于创建它的会话持续期间,并且在创建它的会话中可见。当会话结束时,该会话的所有准备好的语句都将被丢弃。

另一个相似之处是,准备好的语句与 MySQL 用户变量一样,也不区分大小写。例如,stmt11 和 STMT11 都是相同的,如下例所示 -

mysql> Select * from student;
+------+-------+
| Id   | Name  |
+------+-------+
| 1    | Ram   |
| 2    | Shyam |
| 3    | Rohan |
+------+-------+
3 rows in set (0.00 sec)

mysql> SET @A = 'Sohan', @B = 3;
Query OK, 0 rows affected (0.00 sec)

mysql> EXECUTE Stmt11 USING @A, @B;
Query OK, 1 row affected (0.12 sec)

mysql> Select * from Student;
+------+-------+
| Id   | Name  |
+------+-------+
| 1    | Ram   |
| 2    | Shyam |
| 3    | Sohan |
+------+-------+
3 rows in set (0.00 sec)

mysql> SET @A = 'Gaurav', @B = 3;
Query OK, 0 rows affected (0.00 sec)

mysql> EXECUTE STMT11 USING @A, @B;
Query OK, 1 row affected (0.04 sec)

mysql> Select * from Student;
+------+--------+
| Id   | Name   |
+------+--------+
| 1    | Ram    |
| 2    | Shyam  |
| 3    | Gaurav |
+------+--------+
3 rows in set (0.00 sec)

在上面的示例中,一旦执行了 stmt11,下次执行 STMT11 时,两者都会产生同样的结果,因为 prepared 语句不区分大小写。

更新于:2020 年 6 月 20 日

86 次浏览

开启你的 职业生涯

完成课程获得认证

开始学习
广告