首页 > 解决方案 > 删除第一行并将行的副本放在表的末尾

问题描述

大家好,我有一个 mySQL 数据库,其中有一个名为 queue 的表,行包括歌手和歌曲列。我正在使用表格来保持歌手上升的顺序有一个自动增量 ID

我试图找到的正确语法是使用新的自动增量 ID 值将表中的第一行复制到最后一行,然后删除第一行。在我尝试写之前,这似乎不是一个挑战。欢迎任何想法。

自从得到答案后,我已经尝试过这个..但不断收到错误 1111

 UPDATE `queue`
 SET `id` = MAX(id) + 1;
 WHERE `id` = MIN(id);

也试过这个……怎么会这么难。

 Set $max = (SELECT MAX(id) + 1 FROM queue);
 Set $min = (SELECT MIN(id) FROM queue);
 UPDATE `queue`
 SET `id` =  $max
 WHERE `id` = $min;

所以我已经放弃了 max() min() 的想法,除非有人有可用的答案并转向我最初的想法并且我非常接近。但我的问题是我不知道要删除的最低 id 因为它只会是 1 一次所以我需要以某种方式用 MIN(id) 值或变量填充它。这就是我所在的地方。

  INSERT INTO queue (SELECT NULL,singer, song1 FROM queue WHERE id = 1);
  DELETE FROM queue ORDER BY id ASC LIMIT 1; 

标签: mysql

解决方案


我认为一切都很好,只是您需要为删除语句更新 SQL_SAFE_UPDATES = 0,因此您可以尝试以下方式

  SET SQL_SAFE_UPDATES = 0;  
  INSERT INTO queue (SELECT NULL,singer, song1 FROM queue WHERE id = 1);
  DELETE FROM queue ORDER BY id ASC LIMIT 1;

推荐阅读