我有一个数据库表产品
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。
我有一个数据库表产品
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。
为什么你需要这样做?如果是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
on 列Prod_Name
。
ALTER TABLE product ADD INDEX (Prod_Name);
您可以将prod_id
s 保留原样,并使用您的编号动态生成一个新列:
SET @row=0;
SELECT @row := @row + 1 AS row,
*
FROM product
ORDER BY prod_id
如果你真的需要它
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