MYSQL数据库的数据完整性
Posted 苦瓜爆炒牛肉
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MYSQL数据库的数据完整性相关的知识,希望对你有一定的参考价值。
数据库中存储的数据应该符合我们的预期, 这就是数据完整性. 那么如何实现数据完整性?
我们通过以下两方面来实现数据的完整性:
- 数据类型: 存储在数据库中的所有数据值均正确的状态。如果数据库中存储有不正确的数据值,则该数据库称为已丧失数据完整性。
- 数据约束: 在数据类型限定的基础上, 添加的额外的要求。
一、数据类型
数据类型影响着数据中存储的数据所占的对数据进行最基本的类型约束、空间大小.
- 只有类型符合要求的数据才能存储起来 这就是对数据完整性的一种要求.
- 使用数据类型的原则是:够用就行,尽量使用取值范围小的,而不用大的,这样可以更多的节省存储空间
常用的数据类型如下:
- 整数:int,bit
- 小数:decimal
- 字符串:varchar,char
- 日期时间: date, time, datetime
- 枚举类型(enum)
特别说明的类型如下:
- decimal表示浮点数,如 decimal(5, 2) 表示共存5位数,小数占 2 位.
- char表示固定长度的字符串,如char(3),如果填充‘ab‘时会补一个空格为
‘ab ‘
. - varchar表示可变长度的字符串,如varchar(3),填充‘ab‘时就会存储‘ab‘
- 对于图片、音频、视频等文件,不存储在数据库中,而是上传到某个服务器上,然后在表中存储这个文件的保存路径
- 字符串 text 表示存储大文本,当字符大于 4000 时推荐使用, 比如博客
二、数据约束
约束本质上是对数据在数据类型限定的基础上添加的额外的要求.
常见的约束如下:
- 主键 primary key: 用于唯一标识一条记录. mysql 建议所有表的主键字段都叫 id, 类型为 int unsigned.
- 非空 not null: 此字段不允许填写空值.
- 惟一 unique: 此字段的值不允许重复.
- 默认 default: 当不填写字段对应的值会使用默认值,如果填写时以填写为准.
- 外键 foreign key: 对关系字段进行约束, 当为关系字段填写值时, 会到关联的表中查询此值是否存在, 如果存在则填写成功, 如果不存在则填写失败并抛出异常.
说明:虽然外键约束可以保证数据的有效性, 在进行数据的 crud(增删改查), 会降低数据库的性能, 此种情况下不推荐使用
最后附上常见的数据类型表
1. 整数类型
类型 | 字节大小 | 有符号范围(Signed) | 无符号范围(Unsigned) |
---|---|---|---|
TINYINT | 1 | -128 ~ 127 | 0 ~ 255 |
SMALLINT | 2 | -32768 ~ 32767 | 0 ~ 65535 |
MEDIUMINT | 3 | -8388608 ~ 8388607 | 0 ~ 16777215 |
INT/INTEGER | 4 | -2147483648 ~2147483647 | 0 ~ 4294967295 |
BIGINT | 8 | -9223372036854775808 ~ 9223372036854775807 | 0 ~ 18446744073709551615 |
2. 字符串
类型 | 字节大小 | 示例 |
---|---|---|
CHAR | 0-255 | 类型:char(3) 输入 ‘ab‘, 实际存储为‘ab ‘, 输入‘abcd‘ 实际存储为 ‘abc‘ |
VARCHAR | 0-255 | 类型:varchar(3) 输 ‘ab‘,实际存储为‘ab‘, 输入‘abcd‘,实际存储为‘abc‘ |
TEXT | 0-65535 | 大文本 |
3. 日期时间类型
类型 | 字节大小 | 示例 |
---|---|---|
DATE | 4 | ‘2020-01-01‘ |
TIME | 3 | ‘12:29:59‘ |
DATETIME | 8 | ‘2020-01-01 12:29:59‘ |
YEAR | 1 | ‘2017‘ |
TIMESTAMP | 4 | ‘1970-01-01 00:00:01‘ UTC ~ ‘2038-01-01 00:00:01‘ UTC |
以上是关于MYSQL数据库的数据完整性的主要内容,如果未能解决你的问题,请参考以下文章
Android 上的 Kotlin:如何在片段中使用数据库中的 LiveData?