MySql "view"、 "prepared statement"和 "Prepared statement needs to be re-prepared"

标签 mysql view prepared-statement

我对 MySql 有疑问,详情如下: 我创建了一个新的模式/数据库,(仅)执行了这个查询:

create table mytable (
id varchar(50) not null,
name varchar(50) null default '',
primary key (id));

create view myview as
select id,name from mytable;

insert into mytable values ('1','aaa');
insert into mytable values ('2','bbb');
insert into mytable values ('3','ccc');

然后,如果我运行这些查询:

select * from mytable;
select * from myview;
prepare cmd from 'select id,name from mytable where id=?';
set @param1 = '2';
execute cmd using @param1;

查询给出了正确的结果(3 行,3 行,1 行)。

但是,如果我运行这个查询,问题就存在了:

prepare cmd from 'select id,name from myview where id=?';
set @param1 = '2';
execute cmd using @param1;

错误:#1615 - 准备好的语句需要重新准备

我做了一些研究,发现以下配置的增量“可能”解决了问题:

increase table_open_cache_instances value
increase table_open_cache value
increase table_definition_cache value

据我所知,上面的查询是常见的标准MySql查询,所以我认为语法没有问题。

我在共享虚拟主机上,使用的 MySql 版本是 5.6.22

但让我感到困惑的是,它只包含 1 个模式/数据库,1 个表,3 个短记录和 1 个 View , 我执行了一个常见的标准 MySql 选择查询, 上面的值的增量真的需要吗? 是否有遇到同样问题的人增加了值(value)并真正解决了问题? 或者,也许您有任何其他您认为可能或将会解决此问题的解决方案?

ps:它不会在一天内发生一次或两次(假设是由某些备份或相关原因引起的),而是在一整天(24 小时)内发生。

谢谢。

最佳答案

每次执行后你都这样做吗?

deallocate prepare cmd;

关于MySql "view"、 "prepared statement"和 "Prepared statement needs to be re-prepared",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29480915/

相关文章:

PHP 获取数据两次

mysql - SabreDav 身份验证失败

php - 以下哪种方法可以提供最快的页面加载速度?

MySQL 不允许远程连接

sql - 是否可以在 SQL Server View 中创建一个唯一 ID,该 ID 在每次调用 View 时都保持不变?

design-patterns - 在 MVVM 模式中,模型和 View 什么时候直接相互通信?

PHP/PDO : Prepared statements don't work when creating a table?

具有左连接条件的 MySQL case 语句

c# - 指定的子项已经有父项。您必须首先对子级的父级调用removeView()。 (C#)

java - 在 Java 中将准备好的语句 OBJECTS 放在哪里?