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

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

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

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

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

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

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

示例:
mysql> SET @a=10;
Query OK, 0 rows affected (0.00 sec)

mysql> PREPARE STMT FROM 'SELECT * FROM dept2 LIMIT ?';
Query OK, 0 rows affected (0.08 sec)
Statement prepared

mysql> EXECUTE STMT USING @a;
+--------+-------+
| deptno | dname |
+--------+-------+
|     10 | A     |
|     20 | B     |
|     30 | C     |
|     40 | D     |
|     50 | E     |
|     60 | F     |
|     70 | G     |
|     80 | H     |
|     90 | I     |
|    100 | J     |
+--------+-------+
10 rows in set (0.02 sec)

mysql> SET @skip=1; SET @numrows=5;
Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

mysql> PREPARE STMT FROM 'SELECT * FROM dept2 LIMIT ?, ?';
Query OK, 0 rows affected (0.00 sec)
Statement prepared

mysql> EXECUTE STMT USING @skip, @numrows;
+--------+-------+
| deptno | dname |
+--------+-------+
|     20 | B     |
|     30 | C     |
|     40 | D     |
|     50 | E     |
|     60 | F     |
+--------+-------+
5 rows in set (0.00 sec)

mysql> DEALLOCATE PREPARE STMT;
Query OK, 0 rows affected (0.00 sec)

mysql> EXECUTE STMT USING @skip, @numrows;
ERROR 1243 (HY000): Unknown prepared statement handler (STMT) given to EXECUTE

mysql> PREPARE STMT FROM 'SELECT * FROM dept2 LIMIT ?, ?';
Query OK, 0 rows affected (0.00 sec)
Statement prepared

mysql> EXECUTE STMT USING @skip, @numrows;
+--------+-------+
| deptno | dname |
+--------+-------+
|     20 | B     |
|     30 | C     |
|     40 | D     |
|     50 | E     |
|     60 | F     |
+--------+-------+
5 rows in set (0.00 sec)

示例存储过程
delimiter $$
create procedure registerSQLReference(IN the_table_name VARCHAR(80), IN the_sql_script_version VARCHAR(80), IN the_sql_script_name VARCHAR(80),
IN the_install_version  VARCHAR(80), IN the_execution_duration VARCHAR(80), IN the_sql_script_description VARCHAR(200))
BEGIN
declare column_exist INT DEFAULT 0;
declare the_query VARCHAR(500);

select '[INFO]    Check if the column C_CHANGE_DESCRIPTION exists in the table @VERSION_LEVEL_TABLE_NAME';
  set column_exist = is_ChangeDescColumnExist ('@VERSION_LEVEL_TABLE_NAME');

IF column_exist = 0
  THEN

select '[INFO]    VERSION LEVEL TABLE does not contain C_CHANGE_DESCRIPTION column.';
    set @v_the_table_name=the_table_name;
    select concat('INSERT INTO ', @v_the_table_name, ' VALUES (?, ?, ?, ?, ?) ') into the_query;
    SET @stmt=the_query;
    PREPARE STMT FROM @stmt;
    select concat('[INFO]    the_query=', the_query );
    set @v_the_sql_script_version=the_sql_script_version;
    set @v_the_sql_script_name=the_sql_script_name;
    set @v_date=now();
    set @v_the_install_version=the_install_version;
    set @v_the_execution_duration=the_execution_duration;
    EXECUTE STMT using @v_the_sql_script_version , @v_the_sql_script_name, @v_date, @v_the_install_version, @v_the_execution_duration;

ELSE
    select '[INFO]    VERSION LEVEL TABLE contains C_CHANGE_DESCRIPTION column.';

select concat('INSERT INTO ', the_table_name, ' VALUES (?, ?, ?, ?, ?, ?) ') into the_query;
    SET @stmt=the_query;
    PREPARE STMT FROM @stmt;
    select concat('[INFO]    the_query=', the_query );
    set @v_the_sql_script_version=the_sql_script_version;
    set @v_the_sql_script_name=the_sql_script_name;
    set @v_date=now();
    set @v_the_install_version=the_install_version;
    set @v_the_execution_duration=the_execution_duration;
    set @v_the_sql_script_description=the_sql_script_description;
    select concat('[INFO]    the_query=', the_query);
    EXECUTE the_query using @v_the_sql_script_version , @v_the_sql_script_name, @v_date, @v_the_install_version, @v_the_execution_duration, @v_the_sql_script_description;

END IF;
  DEALLOCATE PREPARE STMT;
END$$
delimiter ;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26506993/viewspace-2098186/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26506993/viewspace-2098186/

MySQL 5.7 PREPARE、EXECUTE、DEALLOCATE语句介绍相关推荐

  1. mysql5.7语句建库_MySQL 5.7 PREPARE、EXECUTE、DEALLOCATE语句介绍

    PREPARE语句准备好一条SQL语句,并分配给这条SQL语句一个名字供之后调用.准备好的SQL语句通过EXECUTE命令执行,通过DEALLOCATE PREPARE命令释放掉. 语句的名字不区分大 ...

  2. mysql execute using_MySQL:将过程参数传递给EXECUTE USING语句

    这是 MySQL 5.1. (注意:我意识到有更好的方法来做这个特定的例子,这不是我真正的代码) 这是我想要做的: 下面的过程被创建,但是当我调用它时,我得到"ERROR 1210(HY00 ...

  3. mysql 8.0 一条insert语句的具体执行流程分析(三)

    代码版本:mysql 8.0.22 编程语言:c++ && c++11 && c++14 && c++17 上一篇文章:mysql 8.0 一条inse ...

  4. mysql查询未提交事务的sql语句

    mysql查询未提交事务的sql语句,找出未提交事务执行的SQL语句 mysql开启事务后没有提交就退出,事务长时间running状态,进程又处于Sleep状态,有可能后续导致其他事物超时失败 常见原 ...

  5. 如何在mysql查找效率慢的SQL语句

    如何在mysql查找效率慢的SQL语句呢?这可能是困然很多人的一个问题,MySQL通过慢查询日志定位那些执行效率较低的SQL 语句,用--log-slow-queries[=file_name]选项启 ...

  6. mysql 8.0 一条insert语句的具体执行流程分析(二)

    继续上一篇文章:mysql 8.0 一条insert语句的具体执行流程分析(一)_一缕阳光的博客-CSDN博客 由于最近换工作一直在试用期内,在拼命的学习.总结中,因此没有时间写文章,今天转正了腾出来 ...

  7. MySQL中的几类日志文件介绍

    MySQL中的几类日志文件介绍 关于Mysql日志 splunk内置了两种mysql的日志,分别是mysqld以及mysql_error mysqld_error Standard mysql err ...

  8. mysql介绍索引类型的章节_mysql索引总结--mysql索引类型以及创建的详细介绍

    关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车.对于没有索引的表,单表查询可能几十万数据就是瓶颈,而通常大型 ...

  9. mysql创建用户表的sql语句,mysql创建表的sql语句

    mysql 动态sql语句,如何用一款小工具大大加速MySQL SQL语句优化(附源,mysql分页查询sql语句,mysql创建表的sql语句 mysql建表语句_计算机软件及应用_IT/计算机_专 ...

最新文章

  1. matlab plot绘图函数官方详解
  2. 【Matlab 控制】多智能体一致性收敛仿真
  3. Elasticsearch:用于内容丰富的文本分析
  4. socket用起始码分割_常用条码Code128码及EAN13码的介绍
  5. git 撤销merge_相见恨晚的 Git 命令动画演示,一看就懂!
  6. Spring 三层架构
  7. Educational Codeforces Round 67 E.Tree Painting (树形dp)
  8. 2020年第六届 美亚杯电子取证 团体赛 wp
  9. mac怎么用ntfs硬盘 NTFS移动硬盘怎么在mac上使用
  10. 从无刷直流电动机控制系统电磁兼容设计,谈电磁干扰原理
  11. 内存频率,CPU频率,主板频率之间的制约
  12. PLSQL官网, 及个版本下载地址和下载方法
  13. 1. 激活函数(Activation functions)
  14. 史上最详细店铺运营方案,新手必看!
  15. EPS在倾斜摄影“房地一体”项目中的应用及操作简介
  16. 清华大学出版数据结构第五版的链表的使用方法_JavaScript 中的数据结构:写给前端软件工程师...
  17. 详解ES6中的 let 和const
  18. python语言程序设计 嵩天老师(第七周)
  19. 《第一行代码Android》笔记
  20. JO、JNO、JB、JNB命令详解(从原理上)

热门文章

  1. 关于开关软起动(缓启动)电路学习笔记
  2. 计算机中的cache相关知识
  3. 详解企业财务数字化转型路径|推荐收藏
  4. OAuth2授权客户端访问资源服务
  5. 视频编码解码(H264编码实战)
  6. Linux中chkconfig命令详解
  7. 最优化方法matlab实现
  8. 今天早上被AS卡爆的结论
  9. 【每日一题 6.25】粉刷房子
  10. 人工神经网络技术及应用,人工神经网络实际应用