基于某些特定任务的数据库表更新

时间:2013-02-12 13:30:45

标签: mysql sql-update sql-delete

我有一个数据库表产品

Prod_id Prod_name
1   Pen
2   Pencil
3   Eraser
4   book

当我删除带id =2的产品时,产品3和4的ID应递减1 ,即现在它应为2和3,如下所示

Prod_id Prod_name
1   Pen
2   Eraser
3   book

解决这个问题的任何想法.. ??  我正在使用mySql。

3 个答案:

答案 0 :(得分:0)

为什么你需要这样做?如果是PRIMARY KEY,请保持原样。但无论如何,为了回答你的问题,我建议你为此创建一个存储过程,

DELIMITER $$
CREATE PROCEDURE DeleteItem(IN _id INT)
BEGIN
    DELETE FROM product WHERE Prod_ID = _id;

    UPDATE  product a
            INNER JOIN 
            (
                SELECT  @row:=@row+1 NewID,
                        Prod_Name,
                        Prod_ID
                FROM    product a, (SELECT @row:=0) b
                ORDER   BY Prod_ID ASC
            ) c ON a.Prod_Name = c.Prod_Name
    SET     a.Prod_ID = c.NewID;
END $$
DELIMITER ;

致电程序,

CALL DeleteItem(3);

要获得更快的效果,请在列INDEX上添加Prod_Name

ALTER TABLE product ADD INDEX (Prod_Name);

答案 1 :(得分:0)

您可以原样保留prod_id,并随时生成带有编号的新列:

SET @row=0; 

SELECT @row := @row + 1 AS row, 
       * 
FROM   product 
ORDER  BY prod_id 

答案 2 :(得分:0)

如果你真的需要它

SQLFiddle demo

update product,
(select Prod_id,@row:=@Row+1 as rn 
   from product,(select @row:=0) tm 
 order by Prod_id) t1
set product.Prod_id=t1.rn
where product.Prod_id=t1.Prod_id