删除第一行并将行的副本放在表的末尾

d5vmydt9  于 2021-06-23  发布在  Mysql
关注(0)|答案(2)|浏览(283)

嗨,伙计们,我有一个mysql数据库,有一个名为queue的表,行由列singer和song组成。我用这张表来维持歌手的顺序,有一个自动递增的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;
jdgnovmf

jdgnovmf1#

为什么不干脆 UPDATE 要更改其属性的行 id 通过使用 SET 以及 WHERE 条款?

UPDATE `queue`
SET `id` = 21 -- (current_highest_value + 1)
WHERE `id` = 1

这样您就不必担心添加新行和删除旧行。

yvt65v4c

yvt65v4c2#

我认为一切都很好,只是您需要为delete语句更新sql\u safe\u 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;

相关问题