轻松上手,快乐学习!

MySQL 教程

MySQL 首页MySQL 介绍MySQL 安装MySQL 实例库下载MySQL 实例库导入MySQL SELECTMySQL DISTINCTMySQL ORDER BYMySQL WHEREMySQL ANDMySQL ORMySQL INMySQL BETWEENMySQL LIKEMySQL LIMITMySQL IS NULLMySQL 别名MySQL JOINSMySQL INNER JOINMySQL LEFT JOINMySQL RIGHT JOINMySQL CROSS JOINMySQL SELF JOINMySQL GROUP BYMySQL HAVINGMySQL ROLLUPMySQL 子查询MySQL 派生表MySQL EXISTSMySQL CTEMySQL 递归 CTEMySQL UNIONMySQL INTERSECTMySQL MINUSMySQL INSERTMySQL INSERT INTO SELECTMySQL INSERT IGNOREMySQL UPDATEMySQL UPDATE JOINMySQL DELETEMySQL ON DELETE CASCADEMySQL DELETE JOINMySQL REPLACEMySQL PREPAREMySQL 事务MySQL 表锁定MySQL USEMySQL 数据库管理MySQL CREATE DATABASEMySQL DROP DATABASEMySQL 存储引擎MySQL CREATE TABLEMySQL 序列MySQL ALTER TABLEMySQL RENAME TABLEMySQL DROP COLUMNMySQL ADD COLUMNMySQL DROP TABLEMySQL 临时表MySQL TRUNCATE TABLEMySQL 数据类型MySQL NOT NULLMySQL Primary KeyMySQL Foreign KeyMySQL UNIQUEMySQL CHECKMySQL 字符集MySQL 排序规则MySQL 导入 CSVMySQL 导出 CSVMySQL 自然排序MySQL 基础MySQL NOT INMySQL Storage Engines

MySQL 存储过程

MySQL 存储过程介绍MySQL 存储过程实例MySQL 存储过程变量MySQL 存储过程参数MySQL 存储过程返回多值MySQL IF 语句MySQL CASE 语句MySQL IF CASE 选择MySQL 存储过程循环MySQL 存储过程游标MySQL 存储过程列表MySQL 存储过程异常处理MySQL SIGNAL 和 RESIGNALMySQL 存储函数MySql 自定义存储

MySQL 视图

MySQL 视图教程SQL 视图介绍MySQL 视图介绍MySQL 创建视图MySQL 可更新视图WITH CHECK OPTIONLOCAL&CASCADEDMySQL 视图管理

MySQL 触发器

MySQL 触发器SQL 触发器MySQL 触发器介绍MySQL 触发器的创建MySQL 创建多个触发器MySQL 触发器管理MySQL 计划事件MySQL事件修改

MySQL 索引

MySQL 索引MySQL 索引创建MySQL 索引删除MySQL 显示索引MySQL 唯一索引MySQL 前缀索引MySQL 隐形索引MySQL 降序索引MySQL 复合索引MySQL 聚集索引MySQL 索引基数MySQL USE INDEXMySQL 强制索引

MySQL 管理

MySQL 管理MySQL访问控制系统MySQL 用户创建MySQL 用户密码MySQL 权限授予MySQL 权限撤销MySQL 角色MySQL 删除用户MySQL 表维护mysqldump 备份工具MySQL 数据库列表MySQL 表列表MySQL 表字段列表MySQL 用户列表MySQL 进程列表MySQL 列生成MySQL 表自连接MySQL 恢复

MySQL 全文搜索

MySQL 全文搜索MySQL 全文搜索介绍FULLTEXT索引MySQL 自然语言全文搜索MySQL 布尔全文搜索MySQL查询扩展MySQL ngram

MySQL 高级

MySQL 函数MySQL 窗口函数

MySQL 技巧

MySQL 查找重复数据MySQL 删除重复数据MySQL UUIDMySQL 表的复制MySQL 复制库MySQL 变量MySQL SELECT INTO 变量MySQL 表的存储引擎MySQL 使用正则查询MySQL 添加序号MySQL 随机查询MySQL 查询第 N 高记录MySQL 重置自增值MySQL VS MariaDBMySQL 间隔值MySQL 获取当天日期MySQL NULL 映射MySQL 注释理解MySQL EXPLAINMySQL 技巧介绍MySQL COUNTMySQL 数据分层MySQL 两表比较Mysql Like 优化

MySQL 窗口函数

MySQL CUME_DIST() 函数MySQL DENSE_RANK() 函数MySQL FIRST_VALUE 函数MySQL LAG() 函数MySQL LAST_VALUE() 函数MySQL LEAD 函数MySQL NTH_VALUE 函数MySQL NTILE 函数MySQL PERCENT_RANK 函数MySQL RANK 函数MySQL ROW_NUMBER 函数

MySQL 应用

MySQL应用程序编程接口PHP MySQL教程PHP 数据库连接Python 持久化实现

MySQL 优化

mysqld 内存持续变高求字符串交集


MySQL DECIMAL 数据类型


简介:在本教程中,我们将向您介绍MySQL DECIMAL数据类型以及如何在数据库表中有效地使用它。

MySQL DECIMAL数据类型简介

MySQL DECIMAL数据类型用于在数据库中存储精确的数值。我们经常将DECIMAL数据类型用于保留精确精度的列,例如会计系统中的货币数据。 要定义数据类型为DECIMAL的列,请使用以下语法:
column_name  DECIMAL(P,D);
在上面的语法中:
  • P是表示有效位数的精度。P的范围是1到65。
  • D是表示小数点后的位数的刻度。D的范围是0和30.MySQL要求D小于或等于(<=)P。
DECIMAL(P,D)意味着列可以存储多达D位的P位数。十进制列的实际范围取决于精度和比例。 除了DECIMAL关键字,您也可以使用DECFIXED或者NUMERIC因为他们是同义词DECIMAL。 像INT数据类型DECIMAL类型也有UNSIGNEDZEROFILL属性。如果我们使用  UNSIGNED属性,则列DECIMAL UNSIGNED不会接受负值。 如果我们使用ZEROFILL,MySQL会将显示值填充0,直到列定义指定的显示宽度。另外,如果我们使用ZERO FILLDECIMAL列,MySQL将在列自动添加  UNSIGNED属性。 以下示例使用DECIMAL数据类型定义amount列。
amount DECIMAL(6,2);
在这个例子中,amount列可以存储6个数字,带有2个小数位; 因此,量列的范围是9999.99到-9999.99。 MySQL允许我们使用以下语法:
column_name DECIMAL(P);
这相当于:
column_name DECIMAL(P,0);
在这种情况下,列不包含小数部分或小数点。 另外,我们甚至可以使用以下语法。
column_name DECIMAL;
在这种情况下,P的默认值为10。

MySQL DECIMAL存储

MySQL分别为整数和小数部分分配存储空间。MySQL使用二进制格式来存储DECIMAL值。它将9位数字打包成4个字节。 对于每个部分,需要4个字节来存储9个数字的每个倍数。剩余数字所需的存储空间如下表所示:
剩下的数字 字节
0 0
1-2 1
3-4 2
5-6 3
7-9 4
例如,DECIMAL(19,9)小数部分有9位数,整数部分有19-9 = 10位数。小数部分需要4个字节。整数部分对于前9位需要4个字节,对于1个剩余数字,它需要1个以上的字节。总的来说,DECIMAL(19,9)列需要9个字节。

MySQL DECIMAL数据类型和货币数据

我们经常将DECIMAL数据类型用于货币数据,如价格,工资,帐户余额等。如果您设计一个处理货币数据的数据库,则以下语法应没问题。
amount DECIMAL(19,2);
但是,如果您要遵守公认会计原则(GAAP)规则,则货币列必须至少包含4个小数位,以确保舍入值不超过0.01美元。在这种情况下,您应定义具有4个小数位的列,如下所示:
amount DECIMAL(19,4);

MySQL DECIMAL数据类型示例

首先,创建一个新表名为materials三个字段分别:id,description和cost。
CREATE TABLE materials (
    id INT AUTO_INCREMENT PRIMARY KEY,
    description VARCHAR(255),
    cost DECIMAL(19 , 4 ) NOT NULL
);
其次,将数据插入materials表中。
INSERT INTO materials(description,cost)
VALUES('Bicycle', 500.34),('Seat',10.23),('Break',5.21);
第三,从表中查询数据materials
SELECT 
    *
FROM
    materials;
+----+-------------+----------+
| id | description | cost     |
+----+-------------+----------+
|  1 | Bicycle     | 500.3400 |
|  2 | Seat        |  10.2300 |
|  3 | Break       |   5.2100 |
+----+-------------+----------+
3 rows in set (0.00 sec)
第四,修改cost列以包含ZEROFILL属性。
ALTER TABLE materials
MODIFY cost DECIMAL(19,4) zerofill;
五,再次查询材料表。
SELECT 
    *
FROM
    materials;
+----+-------------+----------------------+
| id | description | cost                 |
+----+-------------+----------------------+
|  1 | Bicycle     | 000000000000500.3400 |
|  2 | Seat        | 000000000000010.2300 |
|  3 | Break       | 000000000000005.2100 |
+----+-------------+----------------------+
3 rows in set (0.00 sec)
如您所见,我们在输出值中填充了许多零。 在本教程中,我们展示了有关MySQL DECIMAL数据类型的详细信息,并向您展示了如何将其应用于存储精确数字数据(如财务数据)的列。