在MySql中切换两行的id号

byr*_*gur 10 php mysql sql database

我试图使用php在mysql中切换两行的id - 我读的越多,我就越困惑.似乎有很多相互矛盾的信息.有没有人得到明确的答案.

例如,在初始状态下,我的行是

1-Peter-22-germany
2-mary-16-iceland
3-tom-29-france
4-michael-34-greece
Run Code Online (Sandbox Code Playgroud)

然后我想交换第2行和第3行的id,以便它看起来像这样

1-Peter-22-germany
3-mary-16-iceland
2-tom-29-france
4-michael-34-greece
Run Code Online (Sandbox Code Playgroud)

所以,如果我然后通过id订购它我会

1-Peter-22-germany
2-tom-29-france
3-mary-16-iceland
4-michael-34-greece
Run Code Online (Sandbox Code Playgroud)

Bri*_*ian 12

如果ID是主键,那么您不想更改它/能够更改它.如果这仅用于排序,我建议创建一个整数的"订单"列并对其进行排序.表模式可以很好地看到这一点,但这是我的建议到目前为止.

如果在输入行时自动创建ID,那么这个想法就是一个更大的问题.但是,现在我只是推测,因为我不知道你的表模式.

以下是关于主键的一些标准建议:除了唯一标识符外,不要将它们视为任何内容.


Mar*_*c B 12

UPDATE yourtable SET id=IF(id=2, 3, 2) where id in(2,3)
Run Code Online (Sandbox Code Playgroud)

可能会做的伎俩,但这是一个坏主意 - 操纵/重新分配主键值永远不是一个好主意.

如果失败,则由于重复密钥违规(最有可能),您需要暂时将其中一个ID重新分配给其他唯一值,以便在重新分配过程中不会发生冲突 - 这将要求您至少使用两个查询.