dig*_*rld 0 mysql sql triggers decimal
我写了一个 MySQL 触发器,它在插入新评论时更新产品的平均评分。但是,在进行插入时会引发以下数据库异常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;
Run Code Online (Sandbox Code Playgroud)
我希望这AS DECIMAL(1,1)会解决问题,但事实并非如此。
我正在使用 MySQL 5.5。
“数值超出范围”表示该数字对于分配的位置来说太大了。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 有两位数字和一位小数。
| 归档时间: |
|
| 查看次数: |
3059 次 |
| 最近记录: |