MySQL中预处理语句prepare

前言

MySQL官方将prepare、execute、deallocate统称为PREPARE
STATEMENT,作者习贯称其为,其用法非常简约,下边话非常少说,来一只看看详细的介绍吧。

示范代码

PREPARE stmt_name FROM preparable_stmtEXECUTE stmt_name [USING @var_name [, @var_name] ...] -{DEALLOCATE | DROP} PREPARE stmt_name

举个栗子:

mysql> PREPARE pr1 FROM 'SELECT ?+?';Query OK, 0 rows affected Statement preparedmysql> SET @a=1, @b=10 ;Query OK, 0 rows affected mysql> EXECUTE pr1 USING @a, @b;+------+| ?+? |+------+| 11 |+------+1 row in set mysql> EXECUTE pr1 USING 1, 2; -- 只能使用用户变量传递。ERROR 1064 : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1, 2' at line 1mysql> DEALLOCATE PREPARE pr1;Query OK, 0 rows affected 

使用PAREPARE
STATEMENT能够减小每回实施SQL的语法剖判,比方用来实行带有WHERE条件的SELECT和DELETE,大概UPDATE,可能INSERT,只需求每一回改过变量值就可以。

相像可避防备SQL注入,参数值能够蕴含转义符和定界符。

适用在应用程序中,可能SQL脚本中均可。

越多用法:

生机勃勃致PREPARE … FROM能够大器晚成直接顾客变量:

mysql> CREATE TABLE a ;Query OK, 0 rows affected mysql> INSERT INTO a SELECT 1;Query OK, 1 row affected Records: 1 Duplicates: 0 Warnings: 0mysql> INSERT INTO a SELECT 2;Query OK, 1 row affected Records: 1 Duplicates: 0 Warnings: 0mysql> INSERT INTO a SELECT 3;Query OK, 1 row affected Records: 1 Duplicates: 0 Warnings: 0mysql> SET @select_test = CONCAT('SELECT * FROM ', @table_name);Query OK, 0 rows affected mysql> SET @table_name = 'a';Query OK, 0 rows affected mysql> PREPARE pr2 FROM @select_test;Query OK, 0 rows affected Statement preparedmysql> EXECUTE pr2 ;+------+| a |+------+| 1 || 2 || 3 |+------+3 rows in set mysql> DROP PREPARE pr2; -- 此处DROP可以替代DEALLOCATEQuery OK, 0 rows affected 

每二回推行完EXECUTE时,养成好习贯,须实行DEALLOCATE PREPARE …
语句,那样能够自由试行中动用的装有数据库能源。

不仅仅如此,要是三个session的预管理语句过多,也许会落得max_prepared_stmt_count的上限值。

预管理语句只可以在成立者的对话中能够使用,其余会话是不可能运用的。

再者在随机格局退出会话时,在此以前定义好的预管理语句将一无往返。

比方在蕴藏进度中使用,假设不在进程中DEALLOCATE掉,在仓库储存进程停止以往,该预处理语句照旧会立见成效。

总结

如上正是那篇小说的全体内容了,希望本文的源委对大家的就学只怕办事能带给一定的佑助,假若有问号我们能够留言交换,多谢我们对剧本之家的支撑。

发表评论

电子邮件地址不会被公开。 必填项已用*标注