MySQL - phpmyadmin - 交换列

时间:2018-04-17 09:03:18

标签: mysql

我尝试在表格中交换3列。我试试这个:

 DELIMITER $$
CREATE PROCEDURE px()
BEGIN
  DECLARE temp VARCHAR(20);
  update `idsaccess` set 
       temp = referer,
       referer = size_var,
       size_var = agent,
       agent = temp
    WHERE  agent like '%210%' ; 
END $$

CALL p

它不起作用。它给了我那个错误:Unknown column 'temp' in 'field list'我不明白:temp是varchar值而不是列。我也尝试删除DECLARE和PROCEDURE,然后用@设置变量。像这样:

set @temp = '';    
update `idsaccess`
    set    @temp = referer,
           referer = size_var,
           size_var = agent
           agent = @temp
    WHERE  agent like '%210%'

它也不起作用。它给了我。 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax。知道我的代码有什么问题吗?为了避免误解,我不想要移动列。我只想将一些行(WHERE代理,例如'%210%')从一列交换到另一列。

2 个答案:

答案 0 :(得分:0)

在备份后尝试这个...我尝试了我有2列的表并且已经工作了

UPDATE idsaccess   SET referer=@tmp:=referer, referer=size_var, size_var = agent, agent = @tmp  WHERE  agent like '%210%';

答案 1 :(得分:0)

依赖于使用与使用相同的查询中设置的变量是有风险的。 MySQL documentation具体说:

  

作为一般规则,除了在SET语句中,你永远不应该   为用户变量赋值并读取其中的值   言。

最安全的(你应该先备份你的表)这样做的方法是临时更改表:

ALTER TABLE idsaccess ADD COLUMN temp VARCHAR(20);
UPDATE idsaccess SET temp = referer;
UPDATE idsaccess SET referer = size_var, size_var = agent, agent = temp WHERE agent like '%210%';
ALTER TABLE idsaccess DROP COLUMN temp;