MySQL笔记(MYSQL准备语句)

MYsql准备语句

MySQL支持准备语句,即在执行真正的查询前,将查询的模式先发送到服务器进行解析,将解析和优化的结果保存下来,在一些编程库中支持这种功能,通过准备语句可以很高效的在客户端和服务器端进行数据发送。

准备语句中,将?作为参数,例如:

INSERT INTO people(last_name,first_name) values(?,?);

Mysql将把一个状态句柄发送给客户端,客户端根据状态句柄把每个问号对应的值发送到服务器执行查询,具体方式取决与编程语言

准备语句具有以下优点:

1.只需解析一次查询

2.缓存了部分执行计划

3.使用二进制发送参数,速度更快

4.只发送参数,减少网络流量

5.参数被保存在服务器缓冲区,无需在内存中到处拷贝数据

除了函数库,MySQL也有准备语句的sql接口,例如:

mysql> set @sql = 'select * from people where last_name = ?';

Query OK, 0 rows affected (0.00 sec)

mysql> PREPARE pre_test FROM @sql;

Query OK, 0 rows affected (0.00 sec)

Statement prepared

mysql> SET @name ='zz11';

Query OK, 0 rows affected (0.00 sec)

mysql> EXECUTE pre_test USING @name;

+-----------+------------+------------+--------+

| last_name | first_name | dod | gender |

+-----------+------------+------------+--------+

| zz11 | ss | 0000-00-00 | m |

+-----------+------------+------------+--------+

1 row in set (0.01 sec)

通过这种方法,可以在存储过程内实现一种类似“动态SQL”的效果。但注意这里SQL接口使用的并不是二进制协议。

准备语句具有一些局限:

1.只针对一个连接;

2.不能使用5.0之前的缓存

3.不能在存储函数内使用

4.如果忘记销毁,可能在服务器端产生资源泄漏,并且有一个全局参数限定存储语句数量。

你可能感兴趣的:(mysql)