知识库 知识库
首页
  • Hyperskill - Java

    • Java basic
    • Java OOP
    • 应知
    • 扩展
    • IO & Stream
    • Error & Exception
    • Algorithm & Data structure
    • Design pattern
    • Web
    • Spring boot
  • 练习题

    • 选择题 & 填空题
    • 代码题
  • Frank - Java与生活 (OOP)

    • 参考资料
    • Java基础
    • OOP上半部分
    • OOP下半部分
  • Frank - Java API进阶

    • Base API
    • Unit Test and main function
  • 学习笔记
  • 学习笔记

    • 数据库
  • Frank - MySQL删库跑路

    • 安装、连接、配置
    • 基本操作——数据库
    • 基本操作——表
    • 基本操作——数据
    • 数据类型
    • 列属性完整性
    • 数据库设计思维
    • 单表查询
    • 多表查询
  • 学习笔记

    • 其它
  • Frank - Linux现代方法

    • 必知
    • 命令
    • 技巧
  • 技术文档
  • Git
  • GitHub技巧
  • 前端
  • Khan Academy - 语法
  • Monthly
  • 阅读
  • Others
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
收藏
  • 标签
  • 归档
GitHub (opens new window)

Jim FuckPPT

Java小学生
首页
  • Hyperskill - Java

    • Java basic
    • Java OOP
    • 应知
    • 扩展
    • IO & Stream
    • Error & Exception
    • Algorithm & Data structure
    • Design pattern
    • Web
    • Spring boot
  • 练习题

    • 选择题 & 填空题
    • 代码题
  • Frank - Java与生活 (OOP)

    • 参考资料
    • Java基础
    • OOP上半部分
    • OOP下半部分
  • Frank - Java API进阶

    • Base API
    • Unit Test and main function
  • 学习笔记
  • 学习笔记

    • 数据库
  • Frank - MySQL删库跑路

    • 安装、连接、配置
    • 基本操作——数据库
    • 基本操作——表
    • 基本操作——数据
    • 数据类型
    • 列属性完整性
    • 数据库设计思维
    • 单表查询
    • 多表查询
  • 学习笔记

    • 其它
  • Frank - Linux现代方法

    • 必知
    • 命令
    • 技巧
  • 技术文档
  • Git
  • GitHub技巧
  • 前端
  • Khan Academy - 语法
  • Monthly
  • 阅读
  • Others
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
收藏
  • 标签
  • 归档
GitHub (opens new window)
  • 学习笔记

  • Frank - MySQL删库跑路

    • 安装连接以及配置

    • 基本操作——数据库

    • 基本操作——表

    • 基本操作——数据

    • 数据类型

      • 数据库的数据类型问题
      • 数据类型
        • 整数类型
        • 浮点数
        • 定点数
        • 字符串
        • 布尔 boolean
        • 枚举 enum
        • 集合 set
        • 时间日期 time、date
    • 列属性完整性

    • 数据库设计思维

    • 单表查询

    • 多表查询

  • MySQL
  • Frank - MySQL删库跑路
  • 数据类型
Jim
2022-04-15
目录

数据类型

# 整数类型

  • TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT 分别使用 8, 16, 24, 32, 64 位存储空间,一般情况下越小的列越好。
  • INT(11) 中的数字只是规定了交互工具显示字符的个数,对于存储和计算来说是没有意义的。

# 浮点数

FLOAT 和 DOUBLE 为浮点类型,浮点类型因其精度的问题通常并不会被采用,除非一些必要设计。

<FieldName> float(<Number1>,<Number2>)

  • Number1:总位数
  • Number2:小数位数,如果位数超过了该位数就会四舍五入,就会导致数据不准确了。

Example:

创建一张 test:

mysql> create table if not exists test(
    -> number_1 float(3,1),
    -> number_2 float(3,2)
    -> );
1
2
3
4

插入若干数据:

mysql> insert into test values
	-> (3.1,3.22),
    -> (3.222,3.337777);
1
2
3

查询:

mysql> select * from test;
+----------+----------+
| number_1 | number_2 |
+----------+----------+
|      3.1 |     3.22 |
|      3.2 |     3.34 |
+----------+----------+
1
2
3
4
5
6
7

可以看到查询结果已被四舍五入。

# 定点数

DECIMAL整数和小数部分分开存储。不会像浮点数一样产生精度丢失。

  • FLOAT 和 DOUBLE 为浮点类型,DECIMAL 为高精度小数类型。
  • CPU 原生不支持 DECIMAl 类型的计算,因此 DECIMAL 的计算代价更高。
  • FLOAT、DOUBLE 和 DECIMAL 都可以指定列宽,例如 DECIMAL(18, 9) 表示总共 18 位,取 9 位存储小数部分,剩下 9 位存储整数部分。

# 字符串

# CHAR

  • CHAR 定长,末尾空格删除。
  • 使用场景:短字符串;定长字符串;经常变更的数据

# VARCHAR

  • VARCHAR 变长,末尾空格保留,
  • VARCHAR 在 UPDATE 时若比原来更长,需要做额外的工作。MyISAM 拆数据,InnoDB 分裂页。
  • 使用场景:最大长度比平均长度大很多;更新很少;复杂字符集

# BLOB 和 TEXT

BLOB 和 TEXT 都是为了存储很大的数据而设计的字符串数据类型

  • BLOB:二进制存储
  • TEXT:字符串存储

尽量避免使用 BLOB 和 TEXT 类型

# 布尔 boolean

mysql> create table if not exists test_5(
    -> value_1 boolean,
    -> value_2 boolean
    -> );
1
2
3
4
mysql> insert into test_5 values(true,false);
1
mysql> select * from test_5;
+---------+---------+
| value_1 | value_2 |
+---------+---------+
|       1 |       0 |
+---------+---------+
1
2
3
4
5
6

# 枚举 enum

枚举类型从给定的选项中选取一个。

mysql> create table if not exists test_5(
    -> gender enmu('male','female','?','nothing')
    -> );
1
2
3
mysql> insert into test_6 values('male'),('female'),('?'),('nothing');
1
mysql> select * from test_6;
+---------+
| gender  |
+---------+
| male    |
| female  |
| ?       |
| nothing |
+---------+
1
2
3
4
5
6
7
8
9

枚举类型的另类存储方式(节省空间):

mysql> insert into test_6 values(1),(2);
1

1 代表“male”,2 代表“female”

mysql> select * from test_6;
+---------+
| gender  |
+---------+
| male    |
| female  |
| ?       |
| nothing |
| male    |
| female  |
+---------+
1
2
3
4
5
6
7
8
9
10
11

# 集合 set

枚举类型从给定的选项中选取多个。多个选项用逗号隔开,放在一对引号内。

mysql> create table if not exists test_7(
    -> interested set('文学','哲学','IT','教育','数学','MBA','经济')
    -> );
1
2
3
mysql> insert into test_7 values
    -> ('哲学,IT,教育'),
    -> ('经济,数学'),
    -> ('MBA');
1
2
3
4
mysql> select * from test_7;
+--------------+
| interested   |
+--------------+
| 哲学,IT,教育 |
| 数学,经济    |
| MBA          |
+--------------+
1
2
3
4
5
6
7
8

# 时间日期 time、date

行业内规定,每一张表都应该有一个时间/日期的字段。你这个数据是什么时候插入的,什么时候更新的...(当然这个时间通常是用程序来插入)

DATE、TIME、YEAR、DATETIME、TIMESTAMP

实际应用中普遍使用DATETIME

mysql> create table if not exists test_8(`time` datetime);
1
mysql> insert into test_8 values ('2022-04-08 16:18:59');
1
mysql> select * from test_8;
+---------------------+
| time                |
+---------------------+
| 2022-04-08 16:18:59 |
+---------------------+
1
2
3
4
5
6
编辑 (opens new window)
上次更新: 2022/09/26, 16:55:15
数据库的数据类型问题
列属性问题

← 数据库的数据类型问题 列属性问题→

最近更新
01
《挪威的森林》
04-14
02
青钢影
04-14
03
Processing strings
02-18
更多文章>
Theme by Vdoing | Copyright © 2022-2023 Jim Frank | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式