MySQL 5.7中准备、执行释放语句怎么用

介绍

小编给大家分享一下MySQL 5.7中准备、执行、释放语句怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!

<强>准备语句准备好一条SQL语句,并分配给这条SQL语句一个名字供之后调用。准备好的SQL语句通过执行命令执行,通过释放准备命令释放掉。

语句的名字不区分大小写。准备好的SQL语句名字可以是字符串,也可以是用户指定的包含SQL文本的变量.PREPARE中的SQL文本必须代表一条单独的SQL语句而不能是多条SQL语句。SQL语在句中,?字符用来作为后面执行查询使用的一个参数。不能加上引号,及时打算将它们绑定到字符变量中也不可以。

如果准备好的SQL语句名字已经存在,它会在新语句被准备好前释放掉。这意味着,如果一条新的语句包含错误且不能被准备好,这时会返回错误并且准备好的SQL语句将不再存在。

准备好的语句范围是创建它的会话,具有下列特点:

准备好的语句在其他会话无效;

当会话结束时,不管会话时正常结束还是异常结束,这个会话中准备好的SQL语句将不再存在。如果自动连接功能开启,客户端不会被通知连接丢失。

在存储过程或函数里面的准备好的语句,在存储过程或函数执行结束后,会继续存在,可以在存储过程或包外面继续被执行。

<强>示例:
mysql>设置@a=10;
查询好,0行影响(0.00秒)

mysql>从准备支撑& # 39;SELECT * FROM dept2限制? & # 39;;
查询好,0行影响(0.08秒)
语句准备

mysql>执行使用@a支撑;
+ - - - - - - - - - - - - - - - - - +
| deptno | dname |
+ - - - - - - - - - - - - - - - - - +
|,,10 |,,|
|,,20 | B,,|
|,,30 C |,,|
|,,40 D |,,|
|,,50 | E,,|
|,,60 F |,,|
|,,70 | G,,|
|,,80 | H,,|
|,,90 |我,,|
|,100 | J大敌;,|
+ - - - - - - - - - - - - - - - - - +
10行组(0.02秒)

mysql>设置@skip=1;设置@numrows=5;
查询好,0行影响(0.00秒)

查询好,0行影响(0.00秒)

mysql>从准备支撑& # 39;SELECT * FROM dept2限制? ? & # 39;;
查询好,0行影响(0.00秒)
语句准备

mysql>使用执行支撑@skip @numrows;
+ - - - - - - - - - - - - - - - - - +
| deptno | dname |
+ - - - - - - - - - - - - - - - - - +
|,,20 | B,,|
|,,30 C |,,|
|,,40 D |,,|
|,,50 | E,,|
|,,60 F |,,|
+ - - - - - - - - - - - - - - - - - +
5行组(0.00秒)

mysql>释放准备支撑;
查询好,0行影响(0.00秒)

mysql>使用执行支撑@skip @numrows;
错误1243 (HY000):未知(支撑)预备语句处理程序,以执行

mysql>从准备支撑& # 39;SELECT * FROM dept2限制? ? & # 39;;
查询好,0行影响(0.00秒)
语句准备

mysql>使用执行支撑@skip @numrows;
+ - - - - - - - - - - - - - - - - - +
| deptno | dname |
+ - - - - - - - - - - - - - - - - - +
|,,20 | B,,|
|,,30 C |,,|
|,,40 D |,,|
|,,50 | E,,|
|,,60 F |,,|
+ - - - - - - - - - - - - - - - - - +
5行组(0.00秒)

示例存储过程
分隔符$ $
创建过程registerSQLReference (the_table_name VARCHAR(80),在the_sql_script_version VARCHAR(80),在the_sql_script_name VARCHAR (80),
the_install_version VARCHAR(80),在the_execution_duration VARCHAR(80),在the_sql_script_description VARCHAR (200)

开始宣布column_exist INT默认0;
声明the_query VARCHAR (500)。

,选择& # 39;[信息],,,检查表中的列C_CHANGE_DESCRIPTION存在@VERSION_LEVEL_TABLE_NAME& # 39;;
,设置column_exist=is_ChangeDescColumnExist (& # 39; @VERSION_LEVEL_TABLE_NAME& # 39;);

,如果column_exist=0
,然后

,,,选择& # 39;[信息],,,版本级别表不包含C_CHANGE_DESCRIPTION列强生# 39;;
,,,设置@v_the_table_name=the_table_name;
,,,选择concat(& # 39;插入& # 39;,@v_the_table_name, & # 39;值(?,? ?,? ?)& # 39;)the_query;
,,,设置@stmt=the_query;
,,,准备从@stmt支撑;
,,,选择concat(& # 39;[信息],,,the_query=& # 39; the_query);
,,,设置@v_the_sql_script_version=the_sql_script_version;
,,,设置@v_the_sql_script_name=the_sql_script_name;
,,,现在设置@v_date=();
,,,设置@v_the_install_version=the_install_version;
,,,设置@v_the_execution_duration=the_execution_duration;
,,,执行支撑使用@v_the_sql_script_version @v_the_sql_script_name、@v_date @v_the_install_version, @v_the_execution_duration;

,其他
,,,选择& # 39;[信息],,,版本级别表包含C_CHANGE_DESCRIPTION列强生# 39;;

MySQL 5.7中准备、执行释放语句怎么用