2013-02-12 1 views
0

У меня есть таблица базы данных продукттаблицы базы данных Updation на основе какой-то конкретной задаче

Prod_id Prod_name 
1 Pen 
2 Pencil 
3 Eraser 
4 book 

При удалении продукта с id =2, Идентификаторы продукта 3 и 4 следует уменьшать на 1 то теперь должно быть 2 и 3, как показано ниже

Prod_id Prod_name 
1 Pen 
2 Eraser 
3 book 

Любые идеи для решения этой проблемы .. ?? Я использую mySql.

+2

Почему вы хотите сделать такую ​​глупую вещь? Просто выполните запрос с 'ORDER BY id ASC' и используйте номер строки в качестве вашего * обязательного номера *. – Peon

+0

, когда я удаляю определенную запись, я хочу обновить идентификатор оставшихся записей в базе данных, и этот идентификатор не является первичным ключом. –

+0

, если я удалю ручку .... теперь идентификатор карандаша должен быть равен 1 одинаковым идентификаторам оставшегося ластика, а книга должна уменьшаться, то есть должна быть 2 и 3 соответственно –

ответ

0

Если вам действительно нужно это

SQLFiddle demo

update product, 
(select Prod_id,@row:[email protected]+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 
0

Зачем вам это нужно? Если это PRIMARY KEY, оставьте его как есть. Но в любом случае, чтобы ответить на ваш вопрос, я предлагаю Täht создать хранимую процедуру для того,

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

    UPDATE product a 
      INNER JOIN 
      (
       SELECT @row:[email protected]+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); 
0

Вы можете оставить свои prod_id с, как они есть, и генерировать на лету новый столбец с нумерацией:

SET @row=0; 

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