第十二章 _MySQL数据类型精讲
1.MySQL中的数据类型
类型 | 类型举例 |
---|---|
整数类型 | TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT |
浮点类型 | FLOAT,DOUBLE |
定点数类型 | DEMICAL |
位类型 | BIT |
日期时间类型 | YEAR,TIME,DATE,DATETIME,TIMESTAMP |
文本字符串类型 | CHAR,VARCHAR,TINYTEXT,TEXT,MEDIUMTEXT,LONGTEXT |
枚举类型 | ENUM |
集合类型 | SET |
二进制字符串类型 | BINARY,VARBINARY,TINYBLOB,BLOB,MEDIUMBLOB,LONGBLOB |
JSON类型 | JSON对象,JSON数组 |
空间数据类型 | 单值类型: GEOMATRY,POINT,LINESTRING,POLYGON; 集合类型 : MULTIPOINT, MULTILINESTRING,MULTIPOLYGON,GEOMETRYCOLLECTION |
2.整数类型
2.1类型介绍
整型类型 | 字节 | 有符号取值范围 | 无符号取值范围 |
---|---|---|---|
TINYINT | 1 | -128 到 127 | 0 到 255 |
SMALLINT | 2 | -32,768 到 32,767 | 0 到 65,535 |
MEDIUMINT | 3 | -8,388,608 到 8,388,607 | 0 到 16,777,215 |
INT | 4 | -2,147,483,648 到 2,147,483,647 | 0 到 4,294,967,295 |
BIGINT | 8 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 | 0 到 18,446,744,073,709,551,615 |
2.2可选属性
int(5)要搭配zerofill才有意义
-
显示宽度为5,当不足5位时用0填充,超过5位不影响
-
当使用zerofill自动会添加unsigned
3.浮点类型
4.定点数类型
在 MySQL 中,浮点数类型和定点数类型都有相应的实现,分别用于存储不同精度和范围的数字。以下是它们在 MySQL 中的定义和使用方式:
1. 浮点数类型(Floating-Point Types)
MySQL 提供了两种浮点数类型:FLOAT
和 DOUBLE
。
-
FLOAT
:单精度浮点数,通常使用 4 字节(32 位)存储。 -
DOUBLE
:双精度浮点数,通常使用 8 字节(64 位)存储。
语法:
column_name FLOAT(size, decimals); column_name DOUBLE(size, decimals);
-
size:指定总位数。对于
FLOAT
和DOUBLE
,大小并不影响存储空间,只是表示精度范围。 -
decimals:指定小数位的数量。对于
FLOAT
和DOUBLE
,这个参数不是必须的,如果没有指定,会根据实际需要进行存储。
示例:
CREATE TABLE example ( float_column FLOAT(7, 2), double_column DOUBLE(15, 6) );
注意事项:
-
FLOAT
和DOUBLE
类型都遵循 IEEE 754 浮点标准,因此可能会遇到舍入误差。 -
FLOAT
适用于需要较小精度和范围的场景,而DOUBLE
提供更高的精度,适用于需要更高精度的科学计算或财务数据。
2. 定点数类型(Fixed-Point Types)
MySQL 提供了 DECIMAL
和 NUMERIC
类型来表示定点数。两者的区别仅在于命名,它们是等效的,可以互换使用。
-
DECIMAL
:用于存储精确的定点数。它通过字符串的方式存储数字,可以避免浮点数的舍入误差,适用于财务和需要高精度的小数计算。 -
NUMERIC
:与DECIMAL
类型完全相同,只是名字不同。
语法:
column_name DECIMAL(size, decimals); column_name NUMERIC(size, decimals);
-
size:指定总位数,即数字的最大长度(整数部分 + 小数部分)。
-
decimals:指定小数部分的位数。
示例:
CREATE TABLE example ( decimal_column DECIMAL(10, 2) );
在上面的例子中,DECIMAL(10, 2)
表示总共有 10 位数字,其中有 2 位是小数位。也就是说,最大能存储 99999999.99
这个数值。
优点:
-
精确表示:
DECIMAL
类型不会发生浮点数的舍入误差,特别适合用于存储财务和货币数据。 -
高精度:可以存储非常大的或非常精确的小数。
总结对比:
类型 | 存储大小 | 精度 | 适用场景 |
---|---|---|---|
FLOAT |
4 字节 | 精度有限 | 科学计算、图像处理、速度等 |
DOUBLE |
8 字节 | 更高的精度 | 更高精度的科学计算、财务数据等 |
DECIMAL |
变长存储 | 高精度,精确 | 财务、会计、货币计算等 |
总结:
-
如果你需要处理大范围、浮动的小数或科学计算,
FLOAT
或DOUBLE
是合适的选择。 -
如果你需要精确存储小数(例如财务数据),则应该使用
DECIMAL
或NUMERIC
类型,它们能保证精度而不产生舍入误差
5.位类型
6.日期与时间类型
6.1 year类型
推荐格式
'YYYY'
6.2 date类型
推荐格式
YYYY-MM-DD
6.3 TIME类型
推荐格式
HH-MM-SS
使用CURRENT_TIME()
或者NOW()
,会插入系统时间
第11章_数据处理之增删改
1. 插入数据
方式一: 一条一条的添加数据
方式二: 将查询结果插入到表中
2.更新数据
修改数据是是可能存在不成功的情况的.(可能是由于约束造成的)
3.删除数据
DELETE FROM ... WHERE ...
在数据删除时,也有可能因为约束,导致删除失败
DML操作默认情况下,执行玩以后都会自动提交数据,如果希望执行完不自动提交数据,则需要使用SET autocommit = FALSE
4.MySQL8新特性 : 计算列
create table test(
a INT,
b INT,
c INT GENERATED ALWAYS AS (a+b) VIRTUAL
);