将最大值设置为默认值

时间:2014-06-05 02:19:19

标签: mysql sql

我正在尝试将产品的订单存储在数据库中,并且我希望添加的每个新产品都位于最后一个位置。基本上,我希望“rank”字段设置为MAX + 1,MAX应该是具有相同“type”的条目之间的最高值。

我尝试使用触发器,但由于MySQL不会让我这样做,因为触发器将在同一个表上执行:

**#1442 - 无法更新存储函数/触发器中的表'products',因为它已被调用此存储函数/触发器的语句使用。 **

以下是我的触发器:

CREATE TRIGGER `productInsert` 
AFTER INSERT ON `products` 
FOR EACH ROW 
BEGIN
   UPDATE products 
   SET rank = (SELECT MAX(rank) 
               from products 
               where type_id = NEW.type_id) 
   where id = NEW.id

还有其他办法吗?

由于

1 个答案:

答案 0 :(得分:2)

你想要之前插入触发器:

CREATE TRIGGER `productInsert`
    BEFORE INSERT ON `products`
    FOR EACH ROW
BEGIN
    set NEW.rank = (select max(rank) + 1
                    from products p
                    where p.type_id = NEW.type_id
                   );
END