0

データベーステーブル製品を持っています

Prod_id Prod_name
1   Pen
2   Pencil
3   Eraser
4   book

で製品を削除すると、製品 3 と 4id =2の ID が1 減るはずです。つまり、以下に示すように 2 と 3 になるはずです。

Prod_id Prod_name
1   Pen
2   Eraser
3   book

この問題を解決するためのアイデア..?? 私はmySqlを使用しています。

4

3 に答える 3

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パフォーマンスを高速化するには、 on列を追加しますProd_Name

ALTER TABLE product ADD INDEX (Prod_Name);
于 2013-02-12T13:37:01.433 に答える
0

prod_idをそのままにして、番号付けされた新しい列をオンザフライで生成できます。

SET @row=0; 

SELECT @row := @row + 1 AS row, 
       * 
FROM   product 
ORDER  BY prod_id 
于 2013-02-12T13:39:55.300 に答える
0

本当に必要なら

SQLFiddle デモ

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
于 2013-02-12T13:42:02.170 に答える