我编写了一个MySQL Trigger,可以在插入新评论时更新产品的平均评分。但是,在插入Numeric value out of range
时会抛出以下数据库异常。
值所在的列设置为DECIMAL(1,1)
。
我设置了以下触发器但仍然出错。
CREATE TRIGGER `update_products_average_rating` AFTER INSERT ON `reviews`
FOR EACH ROW UPDATE products
SET average_rating = ( SELECT CAST( AVG( rating ) AS DECIMAL( 1, 1 ) )
FROM reviews
WHERE product_id = products.id )
WHERE id = NEW.product_id;
我希望AS DECIMAL(1,1)
可以解决问题,但事实并非如此。
我正在使用MySQL 5.5。
答案 0 :(得分:3)
“数值超出范围”表示数字对于分配的点而言太大。 DECIMAL(1,1)是一个很小的分配,所以这并不奇怪。
在DECIMAL列声明中,精度和比例可以是(和 通常是)指定;例如:
薪水DECIMAL(5,2)
在这个例子中,5是精度,2是刻度。精度 表示为其存储的有效位数 值,而比例表示可以的数字位数 存储在小数点后面。
标准SQL要求DECIMAL(5,2)能够存储任何值 五位数和两位小数,所以可以存储在 薪水栏的范围是-999.99到999.99。
从中可以看出,DECIMAL(1,1)表示您可以存储一个数字。如果你试图存储多个数字,那么它对于那个数字来说太大了。
修改强>
要获得3.5,您需要DECIMAL(2,1)。这是因为3.5中有两位数字和一位小数。
答案 1 :(得分:0)
DECIMAL(1,1)
没有意义。 @spsc_tech引用的MySql文档解释了它。
如果你计算平均值并且结果将是小数字,并且你只想要1位精度,我建议你施展为DECIMAL(2,1)
。
你的范围是-9,9到9,9