MySQL数据类型DECIMAL使用心得
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,本篇文章给大家主要讲的是关于MySQL数据类型DECIMAL使用心得的内容,感兴趣的话就一起来看看这篇文章吧,相信看完MySQL数据类型DECIMAL使用心得对大家多少有点参考价值吧。1.DECIMA
千家信息网最后更新 2025年02月02日MySQL数据类型DECIMAL使用心得
本篇文章给大家主要讲的是关于MySQL数据类型DECIMAL使用心得的内容,感兴趣的话就一起来看看这篇文章吧,相信看完MySQL数据类型DECIMAL使用心得对大家多少有点参考价值吧。
1.DECIMAL类型简介
DECIMAL从MySQL 5.1引入,列的声明语法是DECIMAL(M,D)。NUMERIC与DECIMAL同义,如果字段类型定义为NUMERIC,则将自动转成DECIMAL。
对于声明语法DECIMAL(M,D),自变量的值范围如下:
- M是最大位数(精度),范围是1到65。可不指定,默认值是10。
- D是小数点右边的位数(小数位)。范围是0到30,并且不能大于M,可不指定,默认值是0。
例如字段 salary DECIMAL(5,2),能够存储具有五位数字和两位小数的任何值,因此可以存储在salary列中的值的范围是从-999.99到999.99。
2.DECIMAL使用实战
下面我们将创建测试表来验证DECIMAL字段类型的使用:
# 创建具有DECIMAL字段的表 验证decimal默认是decimal(10,0)mysql> create table decimal_tb (col1 decimal,col2 decimal(5,2));Query OK, 0 rows affected (0.04 sec)mysql> show create table decimal_tb\G*************************** 1. row *************************** Table: decimal_tbCreate Table: CREATE TABLE `decimal_tb` ( `col1` decimal(10,0) DEFAULT NULL, `col2` decimal(5,2) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf81 row in set (0.00 sec)# 插入数据测试 # 结论:超出存储范围会报错,小数位不足会自动补0,首位数字为0自动忽略,小数位超出会截断 并按四舍五入处理。mysql> insert into decimal_tb (col1,col2) values (100,100);Query OK, 1 row affected (0.05 sec)mysql> insert into decimal_tb (col2) values (1.23);Query OK, 1 row affected (0.01 sec)mysql> insert into decimal_tb (col2) values (10.2);Query OK, 1 row affected (0.01 sec)mysql> insert into decimal_tb (col2) values (09.9);Query OK, 1 row affected (0.01 sec)mysql> select * from decimal_tb;+------+--------+| col1 | col2 |+------+--------+| 100 | 100.00 || NULL | 1.23 || NULL | 10.20 || NULL | 9.90 |+------+--------+4 rows in set (0.00 sec)mysql> insert into decimal_tb (col2) values (9999);ERROR 1264 (22003): Out of range value for column 'col2' at row 1mysql> insert into decimal_tb (col2) values (12.233); Query OK, 1 row affected, 1 warning (0.01 sec)mysql> show warnings;+-------+------+-------------------------------------------+| Level | Code | Message |+-------+------+-------------------------------------------+| Note | 1265 | Data truncated for column 'col2' at row 1 |+-------+------+-------------------------------------------+1 row in set (0.00 sec)mysql> insert into decimal_tb (col2) values (12.2300);Query OK, 1 row affected (0.01 sec)# 变量范围测试# 结论:M范围是1到65,D范围是0到30,且D不大于Mmysql> alter table decimal_tb add column col3 decimal(6,6);Query OK, 0 rows affected (0.12 sec)Records: 0 Duplicates: 0 Warnings: 0mysql> alter table decimal_tb add column col4 decimal(6,7); ERROR 1427 (42000): For float(M,D), double(M,D) or decimal(M,D), M must be >= D (column 'col4').mysql> alter table decimal_tb add column col4 decimal(65,2);Query OK, 0 rows affected (0.11 sec)Records: 0 Duplicates: 0 Warnings: 0mysql> alter table decimal_tb add column col4 decimal(66,2);ERROR 1426 (42000): Too-big precision 66 specified for 'col4'. Maximum is 65.mysql> alter table decimal_tb add column col5 decimal(60,30); Query OK, 0 rows affected (0.13 sec)Records: 0 Duplicates: 0 Warnings: 0mysql> alter table decimal_tb add column col6 decimal(60,31);ERROR 1425 (42000): Too big scale 31 specified for column 'col6'. Maximum is 30.
3.DECIMAL使用总结
上面的内容从实战出发,介绍了DECIMAL类型的使用方法及注意事项,你可能也知道float、double这些浮点数类型,这两个同样可以存储小数,但这里不过多介绍,只是提醒大家float、double类型无法确保精度,很容易产生误差,特别是在求和计算的时候,所有当存储小数,特别是涉及金额时推荐使用DECIMAL类型。这里总结下使用DECIMAL应该注意的事项:
- DECIMAL(M,D)中,M范围是1到65,D范围是0到30。
- M默认为10,D默认为0,D不大于M。
- DECIMAL(5,2)可存储范围是从-999.99到999.99,超出存储范围会报错。
- 存储数值时,小数位不足会自动补0,首位数字为0自动忽略。
- 小数位超出会截断,产生告警,并按四舍五入处理。
- 使用DECIMAL字段时,建议M,D参数手动指定,并按需分配。
以上关于MySQL数据类型DECIMAL使用心得详细内容,对大家有帮助吗?如果想要了解更多相关,可以继续关注我们的行业资讯板块。
范围
类型
小数
存储
字段
小数位
数据
心得
内容
数字
测试
可不
四舍五入
事项
位数
实战
精度
结论
语法
会报
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发测试前端
方舟手游联机服务器pvz推荐
停车场管理系统数据库设计
宣堡服务器老娘舅
网络安全防护品种
steam游戏数据库爬取
国家电网按照什么分类建立数据库
网络安全应急预案怎么制作
数据库退档
国家网络安全专题文章
武汉达梦数据库待遇2021
国三网络技术选择题题库
网络安全 小学
网络安全小学广播稿
网络安全 健康成长手抄报
数据库系统工程师课程视频
cad选择数据库对象是什么
有些软件不需要数据库
服务器rac
互联网科技公司股票收益率
哈尔滨奥拓软件开发有限公司
服务器坏了修得多长时间
nas服务器联想
数据库补丁包服务
内存结构与数据库
注销账号时显示服务器繁忙
关于数据库的
资深软件开发 架构师
全国卫生健康网络安全攻防
挖矿影响网络安全吗