Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 将mysql与带有事务查询的nodejs服务器一起使用时出现问题_Html_Mysql_Node.js_Client Server_Pug - Fatal编程技术网

Html 将mysql与带有事务查询的nodejs服务器一起使用时出现问题

Html 将mysql与带有事务查询的nodejs服务器一起使用时出现问题,html,mysql,node.js,client-server,pug,Html,Mysql,Node.js,Client Server,Pug,因此,本质上,我使用nodejs服务器中的一个事务和mysql来提取第一行,然后从表中删除该行。 此操作的代码如下所示: app.get('/', (req, res) => { connection.query("START TRANSACTION; SELECT * FROM data.train_data LIMIT 1; DELETE FROM data.train_data LIMIT 1; COMMIT;",(err,rows) => { if(err){

因此,本质上,我使用nodejs服务器中的一个事务和mysql来提取第一行,然后从表中删除该行。 此操作的代码如下所示:

app.get('/', (req, res) => {
  connection.query("START TRANSACTION; SELECT * FROM data.train_data LIMIT 1; DELETE FROM data.train_data LIMIT 1; COMMIT;",(err,rows) => {
    if(err){
      console.log('Error selecting tweets from Database...');
      return;
    }
    console.log('Successfully recieved tweets from database');
     res.render('index', {
       title: 'Tweet Labeler',
       data: rows[1]
     });
  });
问题是,即使查询工作正常,当我在客户端javascript中重新路由到页面时,如下所示:

             function relClick(){
               var xhr = new XMLHttpRequest();
               var newData = {'tweet':data[0].tweet,'relevant':1};
               var jsonData = JSON.stringify(newData);
               xhr.open("POST","/",true);
               xhr.setRequestHeader('Content-type','application/json');
               xhr.send(jsonData);
               console.log("Clicked Relevant");
               xhr = new XMLHttpRequest();
               xhr.open("GET","/",true);
               xhr.send();
               nextItem();
             }
我本质上是想重复这个过程,从表中获取新的顶层行,但通过使用print语句,我推断出它不知何故没有意识到该行已被删除,即使在使用mysql workbench时,我可以看到该行已被删除。 正如您在这个屏幕截图中看到的,它继续抓取id为24的行,即使它已被删除?


我真的不明白为什么会这样。希望有更多经验的人能帮助我,因为我对这一点非常陌生。提前谢谢

如果没有ORDER BY子句,SELECT将返回哪一行是不确定的。(关系是无序的,即没有第一个元组)。对于DELETE语句,不确定将删除哪一行。不能保证删除操作将在前面的SELECT返回的行上进行。(可能会,但不能保证会。)如果两个或多个会话同时执行一组语句,则多个会话中的SELECT语句可能返回同一行。另外,SELECT语句不会获得锁,如
SELECT。。。FOR UPDATE
会。这似乎是在尝试使用MySQL表作为队列。“你使用MYSQL作为队列的5种微妙方式,以及为什么它会咬你”。。。因此,如果我只是更改我的删除并选择按ID升序或其他方式对条目进行第一次排序,然后执行这些操作,那么你认为它会起作用吗?我根据列车ID将它们更改为asc对它们进行第一次排序,但它们仍然不起作用,我需要做些什么,比如刷新我与数据库的连接,或者确保它看到更新的行或者其他什么?