`
alex1960
  • 浏览: 63717 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

MySql 动态语句执行

 
阅读更多

从MySQL 5.0 开始,
支持了一个全新的SQL句法:
PREPARE stmt_name FROM preparable_stmt;
EXECUTE stmt_name [USING @var_name [, @var_name] ...];
通过它,我们就可以实现类似 MS SQL 的 sp_executesql 执行动态SQL语句!
同时也可以防止注入式攻击

例子:

CREATE DEFINER=`root`@`localhost` PROCEDURE `test`(IN ids VARCHAR(8000))

BEGIN

IF ids IS NOT NULL AND LENGTH(ids) > 0 THEN

SET @SqlCmd = 'SELECT *  FROM tb_tables t WHERE id IN(';

SET @SqlCmd = CONCAT(@SqlCmd , ids);

SET @SqlCmd = CONCAT(@SqlCmd , ')');

PREPARE stmt FROM @SqlCmd;

EXECUTE stmt;

ELSE

SELECT *  FROM tb_tables t;

END IF; 

    END

 

CALL test('\'123\',\'321\',\'456\'')

是 5.0.7 或者更高的,你还可以在 LIMIT 子句中使用它,
示例如下:mysql> SET @a=1;mysql> PREPARE STMT FROM "SELECT * FROM tbl LIMIT ?";

                 mysql> EXECUTE STMT USING @a;

 

 

                 mysql> SET @skip=1; SET @numrows=5;

                 mysql> PREPARE STMT FROM "SELECT * FROM tbl LIMIT ?, ?";

                 mysql> EXECUTE STMT USING @skip, @numrows;

使用 PREPARE 的几个注意点:
A: PREPARE stmt_name FROM preparable_stmt; 预定义一个语句,并将它赋给 stmt_nameD:
PREPARE stmt_name 的作用域是当前客户端连接会话可见。
E:
要释放一个预定义语句的资源,可以使用 DEALLOCATE PREPARE 句法。F:EXECUTE stmt_name 句法中,如果 stmt_name 不存在,将会引发一个错误。G:如果在终止客户端连接会话时,没有显式地调用 DEALLOCATE PREPARE 句法释放资源,服务器端会自己动释放它。
H:在预定义语句中,CREATE TABLE, DELETE, DO, INSERT, REPLACE, SELECT, SET, UPDATE, 和大部分的 SHOW 句法被支持。
G:PREPARE 语句不可以用于存储过程,自定义函数!但从 MySQL 5.0.13 开始,它可以被用于存储过程,仍不支持在函数中使用!

分享到:
评论

相关推荐

    Oracle Sql语句转换成Mysql Sql语句

    同时,转换后还需要对生成的MySQL SQL进行测试,确保在目标数据库环境中能正常执行。 总的来说,这个工具对于那些需要在Oracle和MySQL之间迁移数据库应用的开发者来说,是一个非常实用的资源。它通过自动化处理减少...

    MYsql远程调用执行MYsql语句

    支持本地 远程 域名方式连接数据库 并执行MYsql语句,带返回信息 一共3条命令 连接数据库 远程执行SQL语句 关闭数据库连接 变量 DLL路径 = “插件放置的路径” 文本型 变量 IP = “数据库的IP地址,支持域名” 文本...

    Excel生成MYSQL建表语句

    根据Excel模板中读取到的数据,动态拼接`CREATE TABLE`语句,包括各字段的定义。例如,如果某列为“姓名”,类型为“VARCHAR(50)”,非空,那么对应的SQL代码可能是`name VARCHAR(50) NOT NULL`。 生成SQL语句后,...

    mysql批量修改语句

    mysql批量语句,传入list 批量修改mysql批量语句,传入list 批量修改mysql批量语句,传入list 批量修改

    Mysql 语句执行监控器

    Mysql 语句执行监控器 监控每条MYSQL语句 调试用的``````````````

    java实体转mysql建表语句

    在Java开发中,将Java实体类转换为MySQL数据库的建表语句是一项常见的任务,它有助于快速构建数据库模型,尤其在使用ORM...文件`generatorTableSql`可能是用来存放自动生成的建表语句脚本,便于直接导入数据库执行。

    MySQL mysql_query 函数执行SQL语句.docx

    MySQL mysql_query 函数执行 SQL 语句 mysql_query() 函数是 PHP MySQL 函数库中的一种函数,用于向 MySQL 发送并执行 SQL 语句。该函数可以对数据库进行增删改查等操作,並返回执行结果。 参数说明: * query:...

    常用MySQL执行语句

    了解并熟练运用这些基本的MySQL语句,能够有效地管理和操作数据库,满足小站开发的需求。通过学习和实践,你可以创建更复杂的查询,优化数据库性能,以及实现更高级的功能,如联接操作、聚合函数和事务处理。在实际...

    kettle批量导出mysql建表语句

    - 如果目标是生成可以直接在MySQL命令行中执行的.source文件,需要对输出的建表语句进行一些调整,例如去掉注释和不必要的空格。 - 在Kettle中,可以使用“脚本步骤”来处理这些文本,例如使用正则表达式替换。 -...

    MySQL语法语句大全[归类].pdf

    MySQL语法语句大全是一份详细的MySQL语法手册,涵盖了创建表、创建索引、改变表结构、删除数据对象、执行查询等MySQL语法语句的大量知识点。本手册旨在帮助开发者快速掌握MySQL语法,提高开发效率。 一、创建表 ...

    mysql常用性能查询语句

    该语句可以查看 MySQL 服务器自上次启动以来的 select 语句执行次数。 3. 查看 insert 语句的执行数 使用语句:show status like 'com_insert'; 该语句可以查看 MySQL 服务器自上次启动以来的 insert 语句执行...

    mysql修改语句

    例如,可以通过循环遍历日期范围,构建并执行动态的UPDATE语句,从而避免重复工作。 ### SELECT语句的应用 除了UPDATE语句,文件中还包含了几个SELECT语句的例子,这些语句用于查询数据库中的数据。例如: ```sql ...

    mysql 原生语句中save 的写法汇总.docx

    MySQL 原生语句中 save 的写法汇总 在 MySQL 中,save 操作是经常遇到的场景,特别是在 UPDATE 和 INSERT 操作中。使用 Hibernate 可以使用 saveOrUpdate 方法,但是使用原生 SQL 语句时,该如何实现 save 操作呢?...

    Python语句实现Mysql多条插入语句

    本代码,用python语句,实现了一次插入多条sql语句。希望能对大家带来帮助。

    Mysql的表对象Sql语句转换单表,转换成Oracle创建表sql

    5. **控制台输出**:转换后的Oracle SQL语句会在控制台显示,供用户查看或复制到Oracle环境中执行。 6. **测试与验证**:完成转换后,应在目标Oracle环境中创建表并导入数据,以确保转换正确无误。这包括检查所有...

    MySQL数据库后端语句执行监测工具

    在开发和运维过程中,有效地监控MySQL数据库的SQL语句执行情况是确保系统性能的关键步骤。"MySQL数据库后端语句执行监测工具"就是针对这一需求而设计的工具,它能够帮助我们跟踪、分析和优化SQL查询,从而提高数据库...

    mysql批量导出建表语句.zip

    你可以打开这些文件查看具体的SQL语句,并在需要时在新的MySQL环境中执行它们以重新创建相同的数据库结构。 为了更好地利用这个资源,建议熟悉Kettle的工作流程,理解其各个步骤的功能,并学习如何根据自己的需求...

    Effective MySQL之SQL语句最优化.pdf

    尽管如此,我将基于标题和描述中提供的关键词“Effective MySQL之SQL语句最优化”来构建知识点。 1. SQL语句最优化的概念:在数据库管理中,对SQL语句进行优化是提高数据库性能的关键环节。最优化的SQL语句能够在...

    mysql动态行转列

    4. PREPARE 语句:使用 PREPARE 语句来执行动态 SQL 语句。 5. EXECUTE 语句:使用 EXECUTE 语句来执行准备好的语句。 6. DEALLOCATE 语句:使用 DEALLOCATE 语句来释放准备好的语句。 存储过程二: 该存储过程与...

Global site tag (gtag.js) - Google Analytics