如何解决如何解决实时数据库应用中的表元数据锁
我有将实时数据泵入 MysqL 数据库的 C++ 代码 C++ 代码就像:
class Child extends Component {
render() {
const number = ["12","14","15","16","22","35","6","92","47","32","75","67"]
return (
<div>
{(() => {
const items = [];
for (let i = 1; i <= 12; i++) {
items.push(<button onClick={() => this.props.onButtonClick(number[i])}>{number[i]}</button>)
};
return <>{items}</>;
})()}
</div>
)
}
}
此时程序运行正常 但我需要在 Java 中执行另一个程序,该程序必须与订单表一起使用 在我的 Java 代码中:
const char* dropper = "DROP TABLE IF EXISTS orders";
const char* create_stmt = "CREATE TABLE `dbname`.`dummy` (`id` INT NOT NULL AUTO_INCREMENT,`example` VARCHAR(45) NOT NULL,PRIMARY KEY(`id`));";
void try2Connect()
{
MysqL_RES* res_set;
MysqL_ROW row;
MysqL_init(&conn2);
if (!MysqL_real_connect(&conn2,"ip","uname","pass","dbname",port,NULL,0))
{
fprintf(stderr,"Failed to connect to database: Error: %s\n",MysqL_error(&conn2));
}
else {
fprintf(stderr,"Successfully connected to Database.\n");
}
MysqL_query(&conn2,"SET sql_SAFE_UPDATES = 0;");
isConnected2 = true;
}
void pumping_data(){
if (!isConnected2 || &conn2 == NULL) try2Connect();
if (isConnected2 == true) {
MysqL_query(&conn2,dropper);
MysqL_query(&conn2,create_stmt);
MysqL_query(&conn2,c);//c is insert statement which works perfectly fine
MysqL_close(&conn2);
}
}
这样的计时器
public void getDatas(){
try {
isConn();
Statement stmt = con.createStatement();
ResultSet rs = (ResultSet) stmt.executeQuery("CALL positioning_procedure();");
}
}
public void isConn(){
try {
Class.forName("com.MysqL.jdbc.Driver");
if(con==null || con.isClosed()) {
con = DriverManager.getConnection("...","username","pwd");
}
}catch (Exception e) {e.printstacktrace();}
}
我的两个代码都运行良好
但是当我尝试在 sql 中执行我的两个程序时,出现一个错误,提示等待表元数据锁定,而我在 Java 中工作的选择过程提示选择但数据不流动 我看到了一些人们说手动终止查询的方法,但它必须实时工作,我尝试截断表插入表,但结果是相同的
编辑:
总结:我的源表获得了大量更新,因此当另一个查询尝试选择数据时它会挂起。当仍然有大量更新时,如何使我的选择查询工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。