数据完整性-03

一个数据库通常代表一个完整的业务单元,内部包含多张表,每张表用于存储相关的数据。为了确保数据的准确性和有效性,在创建表时,可以通过设置字段的类型和约束条件,来强制验证和限制数据的存储方式,从而保证数据的一致性和完整性。

一、数据类型

可以通过查看数据库的帮助文档,了解所有支持的数据类型。使用数据类型时的原则是:满足需求即可,尽量选择取值范围较小的类型,这样可以节省存储空间。

常见的数据类型包括:

  • 整数intbit
  • 小数decimal
  • 字符串varcharchar
  • 日期时间datetimedatetime
  • 枚举类型enum

特别说明

  • decimal:用于表示浮动小数,如 decimal(5,2) 表示总长度为5位,其中小数部分占2位。
  • char:固定长度的字符串,如 char(3),如果存入 'ab',则会补充空格变为 'ab '
  • varchar:可变长度的字符串,如 varchar(3),存入 'ab' 时只存储 'ab'
  • text:用于存储大文本数据,当字符长度超过4000时推荐使用。
  • 对于图片、音频、视频等二进制文件,通常不建议直接存储在数据库中,而是将其上传至文件服务器,数据库中则存储文件的路径。

数值类型(常用)

类型 字节大小 有符号范围(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

字符串

类型 字节大小 示例
CHAR 0-255 类型:char(3) 输入 'ab', 实际存储为'ab ', 输入'abcd' 实际存储为 'abc'
VARCHAR 0-255 类型:varchar(3) 输 'ab',实际存储为'ab', 输入'abcd',实际存储为'abc'
TEXT 0-65535 大文本

日期时间类型

类型 字节大小 示例
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

二、约束说明

  1. 主键(Primary Key):保证记录的唯一性,并定义物理存储顺序。
  2. 非空(Not Null):该字段必须填写值,不能为空。
  3. 唯一(Unique):该字段的值必须唯一,不能重复。
  4. 默认值(Default):当字段值为空时,会使用预设的默认值;如果填写了该字段,则以填写的值为准。
  5. 外键(Foreign Key):用于约束关联表的字段,确保该字段值存在于关联表中。如果关联表中没有相应的值,将抛出异常并阻止数据插入。

注意事项:虽然外键约束能够确保数据的完整性,但在进行增删改查(CRUD)操作时,会对数据库性能产生一定影响。因此,通常不建议在数据库中使用外键约束。为了保证数据的有效性,可以在业务逻辑层进行控制。

相关推荐
倔强的石头_1 天前
kingbase备份与恢复实战(二)—— sys_dump库级逻辑备份与恢复(Windows详细步骤)
数据库
jiayou642 天前
KingbaseES 实战:深度解析数据库对象访问权限管理
数据库
李广坤3 天前
MySQL 大表字段变更实践(改名 + 改类型 + 改长度)
数据库
爱可生开源社区4 天前
2026 年,优秀的 DBA 需要具备哪些素质?
数据库·人工智能·dba
随逸1774 天前
《从零搭建NestJS项目》
数据库·typescript
加号35 天前
windows系统下mysql多源数据库同步部署
数据库·windows·mysql
シ風箏5 天前
MySQL【部署 04】Docker部署 MySQL8.0.32 版本(网盘镜像及启动命令分享)
数据库·mysql·docker
李慕婉学姐5 天前
Springboot智慧社区系统设计与开发6n99s526(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
百锦再5 天前
Django实现接口token检测的实现方案
数据库·python·django·sqlite·flask·fastapi·pip
tryCbest5 天前
数据库SQL学习
数据库·sql