可以在MySQL中超时查询吗?
也就是说,如果任何查询超过我指定的时间,它将被MySQL杀死,它将返回错误而不是等待永恒.
我不得不调用一个有时不会在给定时间内终止的库函数.有没有办法调用该函数,但如果它在n几秒钟内没有终止就中止它?
我无法修改函数,所以我不能直接将中止条件放入其中.我必须在外部为函数添加超时.
它可能是一个可能的解决方案,将其作为(提升)线程启动,然后我可以在一段时间后终止它?会有类似的东西吗?我实际上认为该函数不是线程安全的,但如果我将它作为唯一的单线程运行则无关紧要,对吧?还有其他(更好的)解决方案吗?
我使用mysql ++连接MySQL数据库来执行一堆数据查询.由于我正在读取的表格经常被写入,并且我需要一致的数据视图,因此我首先锁定表格.但是,MySQL在其锁定查询中没有'NOWAIT'的概念,因此如果表被其他东西锁定,使它们长时间锁定,我的应用程序就在那里等待.我想要它做的是能够返回并说出"无法获得锁定"之类的东西,并在几秒钟后重试.我对此超时的一般尝试如下.
如果我在锁定数据库上的表后运行此命令,我会收到超时命中的消息,但我不知道如何让mysql_query行终止.我很感激任何帮助/想法!
volatile sig_atomic_t success = 1;
void catch_alarm(int sig) {
cout << "Timeout reached" << endl;
success = 0;
signal(sig,catch_alarm);
}
// connect to db etc.
// *SNIP
signal (SIGALRM, catch_alarm);
alarm(2);
mysql_query(p_connection,"LOCK TABLES XYZ as write");
Run Code Online (Sandbox Code Playgroud) 我想知道我们是否可以超时sql查询.
从某种意义上说,假设我有一个SQL查询,其输出仅在10分钟内输出时才有用,之后即使输出结果也没用.
我想要做的是,如果查询需要超过10分钟来完成处理,那么它应该只是自杀.
有可能这样做吗?
一个例子非常有用.
如果我的想法不可理解,请告诉我.