MySQL指南基础知识:数据类型和数据库范式

2019-03-1621:08:31数据库教程Comments2,227 views字数 7201阅读模式

二、MySQL中的数据类型

下面的四张表就是下一篇练习MySQL的资源,我真是太聪明了...如果有错欢迎指出,我及时update文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/10027.html

|----整型----|
+-----------+-----------+----------------------+-----------------+--------------+
| 类型      | 字节数    | 有符号范围           | 无符号范围      | 描述         |
+-----------+-----------+----------------------+-----------------+--------------+
| TINYINT   |         1 | -2⁷ ~ 2⁷-1           | 0 ~ 2⁸-1        | 很小整数     |
| SMALLINT  |         2 | -2¹⁶ ~ 2¹⁶-1         | 0 ~ 2¹⁶-1       | 小整数       |
| MEDIUMINT |         3 | -2²⁴ ~ 2²⁴-1         | 0 ~ 2²⁴-1       | 中等整数     |
| INT       |         4 | -2³² ~ 2³²-1         | 0 ~ 2³²-1       | 标准整数     |
| BIGINT    |         8 | -2⁶⁴ ~ 2⁶⁴-1         | 0 ~ 2⁶⁴-1       | 大整数       |
+-----------+-----------+----------------------+-----------------+--------------+
复制代码

|----小数型----|
+---------+-----------+-------------------------------------------------------+----------------------------+
| 类型    | 字节数    | 取值范围                                              | 描述                       |
+---------+-----------+-------------------------------------------------------+----------------------------+
| FLOAT   |         4 | ±1.175494351E-38 ~ ±3.402823466E+38                   | 单精度浮点                 |
| DOUBLE  |         8 | ±2.2250738585072014E-308 ~ ±1.7976931348623157E+308   | 双精度浮点                 |
| DECIMAL |      不定 | 是M,D而定                                             | M:总位数,D:小数位数        |
+---------+-----------+-------------------------------------------------------+----------------------------+
复制代码

|----字符型----|
+------------+-------------------+---------------+-----------------------------------+
| 类型       | 最大字节数        | 最大范围      | 描述                              |
+------------+-------------------+---------------+-----------------------------------+
| CHAR(M)    | M                 | L或M或M×W     | 定长字符串,M 0~255                |
| VARCHAR(M) | M                 | L+1或 L+2     | 变长字符串,L<=M且M[0,65535]       |
| TINYTEXT   | 2⁸-1              | L+1个字节     | 微型的字符串                      |
| TEXT       | 2¹⁶-1             | L+2个字节     | 小型的字符串                      |
| MEDIUMTEXT | 2²⁴-1             | L+3个字节     | 中型的字符串                      |
| LONGTEXT   | 2³²-1             | L+4个字节     | 大型的字符串                      |
| ENUM       | 1或2字节          | 65535         | 枚举                              |
| SET        | 1、2、3、4或8     | 64            | 集合                              |
+------------+-------------------+---------------+-----------------------------------+
复制代码

|----时间型----|
+-----------+-----------+---------------------------------------------------------------+------------------------------------+
| 类型      | 字节数    | 取值范围                                                      | 描述                               |
+-----------+-----------+---------------------------------------------------------------+------------------------------------+
| YEAR      |         1 | 1901~2155                                                     | 年YYYY                             |
| DATE      |         3 | 1000-01-01 ~ 9999-12-31                                       | 日期YYYY-MM-DD                     |
| TIME      |         3 | -838:59:59[.000000] ~ 838:59:59[.000000]                      | 时间HH:MM:SS                       |
| DATETIME  |         8 | 1000-01-01 00:00:00[.000000] ~ 9999-12-31 23:59:59[.999999]  | 日期加时间YYYY-MM-DD HH:MM:SS      |
| TIMESTAMP |         4 | 1970-01-01 00:00:01[.000000] ~ 2038-01-19 03:14:07[.999999]  | 时间戳                             |
+-----------+-----------+---------------------------------------------------------------+------------------------------------+
复制代码

|----二进制型----|
+--------------+-----------------+---------------+--------------------+
| 类型         | 最大字节数      | 最大范围      | 描述               |
+--------------+-----------------+---------------+--------------------+
| BIT(M)       | M               | (M+7)/8       | 定长字符串         |
| BINARY(M)    | M               | M             | 定长字符串         |
| VARBINARY(M) | M               | L+1 或 L+2    | 变长字符串         |
| TINYBLOB     | 2⁸-1            | L+1           | 微型的字符串       |
| BLOB         | 2¹⁶-1           | L+2个字节     | 小型的字符串       |
| MEDIUMBLOB   | 2²⁴-1           | L+3个字节     | 中型的字符串       |
| LONGBLOB     | 2³²-1           | L+4个字节     | 大型的字符串       |
+--------------+-----------------+---------------+--------------------+
复制代码

这里只是简单的列一下,更多的详情介绍详见此篇:MySQL入门系列:MySQL数据类型文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/10027.html


三、其他点

1.结束符:; \g \G

; \g效果一样,\G 竖直分布文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/10027.html

mysql> SELECT * FROM  number;
+-----------+------+----------------------+----------------+--------------+
| type      | byte | range_singed         | range_unsinged | info         |
+-----------+------+----------------------+----------------+--------------+
| TINYINT   |    1 | -2⁷ ~ 2⁷-1           | 0 ~ 2⁸-1       | 很小整数     |
| SMALLINT  |    2 | -2¹⁶ ~ 2¹⁶-1         | 0 ~ 2¹⁶-1      | 小整数       |
| MEDIUMINT |    3 | -2²⁴ ~ 2²⁴-1         | 0 ~ 2²⁴-1      | 中等整数     |
| INT       |    4 | -2³² ~ 2³²-1         | 0 ~ 2³²-1      | 标准整数     |
| BIGINT    |    8 | -2⁶⁴ ~ 2⁶⁴-1         | 0 ~ 2⁶⁴-1      | 大整数       |
+-----------+------+----------------------+----------------+--------------+

mysql> SELECT * FROM  number\g
+-----------+------+----------------------+----------------+--------------+
| type      | byte | range_singed         | range_unsinged | info         |
+-----------+------+----------------------+----------------+--------------+
| TINYINT   |    1 | -2⁷ ~ 2⁷-1           | 0 ~ 2⁸-1       | 很小整数     |
| SMALLINT  |    2 | -2¹⁶ ~ 2¹⁶-1         | 0 ~ 2¹⁶-1      | 小整数       |
| MEDIUMINT |    3 | -2²⁴ ~ 2²⁴-1         | 0 ~ 2²⁴-1      | 中等整数     |
| INT       |    4 | -2³² ~ 2³²-1         | 0 ~ 2³²-1      | 标准整数     |
| BIGINT    |    8 | -2⁶⁴ ~ 2⁶⁴-1         | 0 ~ 2⁶⁴-1      | 大整数       |
+-----------+------+----------------------+----------------+--------------+

mysql> SELECT * FROM  number\G
*************************** 1. row ***************************
          type: TINYINT
          byte: 1
  range_singed: -2⁷ ~ 2⁷-1
range_unsinged: 0 ~ 2⁸-1
          info: 很小整数
*************************** 2. row ***************************
          type: SMALLINT
          byte: 2
  range_singed: -2¹⁶ ~ 2¹⁶-1
range_unsinged: 0 ~ 2¹⁶-1
          info: 小整数
*************************** 3. row ***************************
          type: MEDIUMINT
          byte: 3
  range_singed: -2²⁴ ~ 2²⁴-1
range_unsinged: 0 ~ 2²⁴-1
          info: 中等整数
*************************** 4. row ***************************
          type: INT
          byte: 4
  range_singed: -2³² ~ 2³²-1
range_unsinged: 0 ~ 2³²-1
          info: 标准整数
*************************** 5. row ***************************
          type: BIGINT
          byte: 8
  range_singed: -2⁶⁴ ~ 2⁶⁴-1
range_unsinged: 0 ~ 2⁶⁴-1
          info: 大整数
复制代码

2.清除命令
`\c 或 Ctrl+c`
复制代码

3.一条语句可换行
mysql> SELECT
    ->  *
    -> FROM
    ->  number;
+-----------+------+----------------------+----------------+--------------+
| type      | byte | range_singed         | range_unsinged | info         |
+-----------+------+----------------------+----------------+--------------+
| TINYINT   |    1 | -2⁷ ~ 2⁷-1           | 0 ~ 2⁸-1       | 很小整数     |
| SMALLINT  |    2 | -2¹⁶ ~ 2¹⁶-1         | 0 ~ 2¹⁶-1      | 小整数       |
| MEDIUMINT |    3 | -2²⁴ ~ 2²⁴-1         | 0 ~ 2²⁴-1      | 中等整数     |
| INT       |    4 | -2³² ~ 2³²-1         | 0 ~ 2³²-1      | 标准整数     |
| BIGINT    |    8 | -2⁶⁴ ~ 2⁶⁴-1         | 0 ~ 2⁶⁴-1      | 大整数       |
+-----------+------+----------------------+----------------+--------------+
复制代码

4.一行可执行多条语句
mysql> SELECT * FROM  number;SELECT * FROM  number_float;
+-----------+------+----------------------+----------------+--------------+
| type      | byte | range_singed         | range_unsinged | info         |
+-----------+------+----------------------+----------------+--------------+
| TINYINT   |    1 | -2⁷ ~ 2⁷-1           | 0 ~ 2⁸-1       | 很小整数     |
| SMALLINT  |    2 | -2¹⁶ ~ 2¹⁶-1         | 0 ~ 2¹⁶-1      | 小整数       |
| MEDIUMINT |    3 | -2²⁴ ~ 2²⁴-1         | 0 ~ 2²⁴-1      | 中等整数     |
| INT       |    4 | -2³² ~ 2³²-1         | 0 ~ 2³²-1      | 标准整数     |
| BIGINT    |    8 | -2⁶⁴ ~ 2⁶⁴-1         | 0 ~ 2⁶⁴-1      | 大整数       |
+-----------+------+----------------------+----------------+--------------+
5 rows in set (0.00 sec)

+---------+------+-------------------------------------------------------+----------------------------+
| type    | byte | num_range                                             | info                       |
+---------+------+-------------------------------------------------------+----------------------------+
| FLOAT   |    4 | ±1.175494351E-38 ~ ±3.402823466E+38                   | 单精度浮点                 |
| DOUBLE  |    8 | ±2.2250738585072014E-308 ~ ±1.7976931348623157E+308   | 双精度浮点                 |
| DECIMAL | NULL | 是M,D而定                                             | M:总位数,D:小数位数        |
+---------+------+-------------------------------------------------------+----------------------------+
复制代码
5.select可以通过逗号拼表
mysql> select 'a','b','c','d';
+---+---+---+---+
| a | b | c | d |
+---+---+---+---+
| a | b | c | d |
+---+---+---+---+
复制代码

四、数据库范式

1.先对接一下,简单描述相关概念
关系:  表/若干元组的集合
元组:  一行/一条记录/一个实体对象
属性:   一列/字段
分量:  元组中的一个属性值/一个实体对象的某一字段
域:    属性实际取值范围

超键:能够唯一标识一条记录的属性或属性集(可含多个属性)
候选键/候选码:能够唯一标识一条记录的属集(不含多余属性)
主键/主码:一个[候选键]作为主键

主属性:[候选键]中的属性
非主属性:[非候选键]中的属性
复制代码

2.ER图
MySQL指南基础知识:数据类型和数据库范式
MySQL指南基础知识:数据类型和数据库范式

3.第一范式:1NF
在关系模型中,对于添加的一个规范要求,所有的域都应该是原子性的
即数据库表的每一列(属性)都是不可分割的原子数据项。
即实体中的某个属性有多个值时,必须拆分为不同的属性。
在符合第一范式(1NF)表中的每个域值只能是实体的一个属性或一个属性的一部分
复制代码

这里的价格成了二维,不符合第一范式,应该展平文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/10027.html

MySQL指南基础知识:数据类型和数据库范式
MySQL指南基础知识:数据类型和数据库范式

4.第二范式:2NF
在第一范式的基础上:
[非主属性]对[主属性]不存在部分函数依赖关系
复制代码
商品名供应商标准价格价格差价供应商电话分类
小刀晨光文具1.001.0007654321文具
铅笔得力文具1.001.500.51234567文具
卷笔刀晨光文具5.005.0007654321文具
练字本得力文具2.002.0001234567文具
小刀得力文具1.001.200.21234567文具
插入异常:A实体依赖于B实体,B实体的缺失而使A实体表示异常
|-- 

更新异常:更新A表的某一属性,需要多行进行更新
|-- 如果更新[得力文具]的供应商电话,需要更新三条数据

删除异常:A实体删除一行,导致B实体信息丢失
|-- 当删除第一、三行,晨光文具的供应商信息丢失

数据冗余:相同的数据在多张表中存在,或表的某属性可通过计算得到(如平均值、和等)
|-- 得力文具以及电话号码重复了很多次。标准价格,价格和差价之间有运算关系
复制代码
商品id商品名标准价格分类
1小刀1.00文具
2铅笔1.00文具
3卷笔刀5.00文具
4练字本2.00文具
供应id供应商供应商电话
1晨光文具7654321
2得力文具1234567
供应id商品id差价
110
130
220.5
240
210.2

5.第三范式:3NF
在第二范式的基础上:
[非主属性]对任意[主属性]不存在传递性函数依赖

|--- 比如下面的(书名)-->(作者)-->(年代)  
复制代码
书名作者年代上架建议价格
海子海子近现代诗集30.6
朝花夕拾老舍近现代名著19.9
你是人间的四月天林徽因近现代经典文学25.6
资治通鉴司马光北宋古典文学55.6

6.BC范式:BCNF
在第三范式的基础上:
[所有属性]对任意[主属性]不存在传递性依赖
复制代码

第四、第五范式暂不提及,注意范式并非严格的标准。
可以根据实际情况反范式化来用空间换时间文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/10027.html

作者:张风捷特烈
链接:https://juejin.im/post/5c8c7d7d5188257c5b4786c1
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/10027.html

文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/10027.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/sjk/10027.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定