当前位置: 首页 > news >正文

从0-1学习Mysql第三章: 数据类型

第三章:数据类型

在本章中,我们将学习 MySQL 中的常用数据类型,以及如何根据不同的需求选择合适的数据类型。同时,我们也会讲解 NULL 值和默认值的使用方式,以及一些常见的错误示例和面试题。通过本章的学习,你将能够理解数据类型的选择对数据库设计的影响,并学会如何合理使用它们。

1. 常用数据类型

MySQL 提供了多种数据类型,供开发者根据实际情况选择合适的类型。以下是一些常用的 MySQL 数据类型:

1.1 数值类型
  • INT(整数)
    用于存储整数。常见的有 INT, TINYINT, SMALLINT, MEDIUMINT, BIGINT 等,代表不同的存储范围。INT 是最常用的类型,适合存储大多数整数。

    CREATE TABLE example (
      id INT,        -- 整数
      age INT        -- 年龄
    );
    
  • DECIMAL(定点数)
    用于存储精确的数值,通常用于货币或计算中需要精确到小数点后的场合。可以指定小数点后的位数。

    CREATE TABLE example (
      price DECIMAL(10, 2)  -- 价格,最多10位数字,其中2位是小数
    );
    
  • FLOAT / DOUBLE(浮动小数)
    用于存储带小数的数值,但其精度可能有限。FLOATDOUBLE 都是用于存储近似数值,适用于科学计算,但不适用于需要精确的小数计算。

    CREATE TABLE example (
      rating FLOAT  -- 评分,可能是浮动的小数
    );
    
1.2 字符类型
  • VARCHAR(变长字符)
    用于存储变长的字符串。常用于存储名称、地址、邮箱等文本数据。VARCHAR 可以节省存储空间,因为它只占用实际字符数的空间。

    CREATE TABLE example (
      name VARCHAR(100)  -- 存储姓名,最多100个字符
    );
    
  • CHAR(定长字符)
    用于存储定长的字符串。例如,存储固定长度的代码或者国家的两字母代码等。CHARVARCHAR 占用更多的空间,因为它总是为每个字段分配固定的长度。

    CREATE TABLE example (
      country_code CHAR(2)  -- 存储国家代码,如 "US"
    );
    
  • TEXT(文本)
    用于存储大量文本数据。TEXT 可以存储更大容量的数据,最多支持 65,535 字符。适合存储描述、文章内容等长文本数据。

    CREATE TABLE example (
      description TEXT  -- 产品描述
    );
    
1.3 日期和时间类型
  • DATE(日期)
    用于存储日期,格式为 YYYY-MM-DD

    CREATE TABLE example (
      birthdate DATE  -- 存储出生日期
    );
    
  • DATETIME(日期和时间)
    用于存储日期和时间,格式为 YYYY-MM-DD HH:MM:SS

    CREATE TABLE example (
      created_at DATETIME  -- 存储记录创建时间
    );
    
  • TIMESTAMP(时间戳)
    用于存储从 ‘1970-01-01 00:00:00’ 到当前时间的秒数,通常用于记录事件的发生时间。

    CREATE TABLE example (
      updated_at TIMESTAMP  -- 存储更新时间
    );
    

2. 数据类型的选择与应用

选择合适的数据类型对于数据库的性能和数据准确性至关重要。我们在选择数据类型时,通常需要考虑以下几个因素:

  • 存储需求:使用合适大小的类型可以节省存储空间。比如,如果知道某个数值不会超过 100,选择 TINYINT 而不是 INT 可以节省空间。
  • 性能:较小的数据类型(如 INTVARCHAR(50))在查询时会比较大的数据类型(如 BIGINTTEXT)更高效。
  • 准确性:对于需要高精度的数字(如货币),应该使用 DECIMAL 类型而不是 FLOATDOUBLE
  • 业务需求:根据实际需求选择合适的数据类型,比如 TEXT 用于存储长文本,DATE 用于存储日期等。
2.1 选择合适的数据类型
  • 数字:如果数值范围较小,优先选择 TINYINTSMALLINT,以节省存储空间。
  • 文本:对于大文本数据,使用 TEXT,对于中等大小的文本数据,使用 VARCHAR
  • 日期:如果只需要存储日期,不需要时间,使用 DATE;如果需要存储日期和时间,使用 DATETIME

3. NULL 值与默认值的使用

3.1 NULL 值
  • NULL 值表示数据缺失或不可用。在 MySQL 中,NULL 并不等同于空字符串 ('') 或零(0),它是一个特殊的值,表示“没有值”。

  • 在创建表时,可以通过 NULLNOT NULL 来指定某个字段是否可以为空。

    CREATE TABLE users (
      id INT AUTO_INCREMENT PRIMARY KEY,
      name VARCHAR(100) NOT NULL,  -- 姓名不能为空
      age INT NULL  -- 年龄可以为空
    );
    
3.2 默认值
  • 默认值用于当插入数据时,如果未指定某个字段的值,MySQL 会自动为该字段填入一个默认值。

    CREATE TABLE users (
      id INT AUTO_INCREMENT PRIMARY KEY,
      name VARCHAR(100) NOT NULL,
      created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP  -- 默认值为当前时间
    );
    

4. 常见错误示例与解释

4.1 插入数据时字段类型不匹配
INSERT INTO users (age) VALUES ('twenty-five');

错误原因:age 字段是 INT 类型,而插入的是字符串 'twenty-five',应该插入一个数字。

4.2 插入 NULL 值时违反了 NOT NULL 约束
CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(100) NOT NULL
);

INSERT INTO users (name) VALUES (NULL);

错误原因:name 字段设置了 NOT NULL 约束,而插入的值为 NULL。正确的做法是为 name 提供一个非 NULL 的值。

4.3 存储浮动小数时精度丢失
CREATE TABLE products (
  price DECIMAL(5, 2)
);

INSERT INTO products (price) VALUES (123.456);

错误原因:DECIMAL(5, 2) 表示最多 5 位数字,其中 2 位为小数,因此 123.456 将被截断为 123.45

5. 常见面试题及解答

  1. 什么是 AUTO_INCREMENT

    • AUTO_INCREMENT 是一个自动增长的字段类型,通常用于主键字段。每次插入新记录时,MySQL 会自动为该字段生成一个唯一的值。
  2. 为什么使用 DECIMAL 而不是 FLOATDOUBLE 来存储货币数据?

    • 因为 DECIMAL 存储的数值是精确的,不会出现浮动误差,而 FLOATDOUBLE 存储的数值是近似的,适合科学计算,但不适合存储需要精确计算的小数。
  3. VARCHARCHAR 的区别是什么?

    • VARCHAR 是变长字符串,存储空间是实际使用的字符数;而 CHAR 是定长字符串,存储固定长度的字符,如果字符串长度不足,会用空格填充。
  4. MySQL 中的 NULL 与空字符串 ('') 有什么区别?

    • NULL 表示数据缺失或不可用,而空字符串表示存在一个长度为零的字符串。它们在逻辑上是不同的,不能互换使用。

小结

通过本章的学习,你了解了 MySQL 中常用的数据类型,包括数值类型、字符类型、日期和时间类型等。你还学会了如何选择合适的数据类型

相关文章:

  • 基于Spring Boot的健康医院门诊在线挂号系统设与实现(LW+源码+讲解)
  • angular新闻列表分页
  • WPS计算机二级•文档的页面设置与打印
  • Spring参数的问题
  • P8597 [蓝桥杯 2013 省 B] 翻硬币
  • vue3中的watch
  • R语言学习笔记——确定指标权重:层次分析法/熵权法/CRITIC方法
  • 可狱可囚的爬虫系列课程 13:Requests使用代理IP
  • 分布式深度学习:探索无限可能
  • Kotlin 知识点二 延迟初始化和密封类
  • 基于DeepSeek-R1的本地知识库构建与应用研究
  • 【JavaScript】JavaScript 常见概念 - 变量与数据类型 - 运算符 - 条件语句 - 循环 - 函数 - 数组操作 - 对象
  • MQ(Message Queue)
  • 全面理解-深拷贝与浅拷贝
  • 第5章 软件工程(一)
  • iOS - 超好用的隐私清单修复脚本(持续更新)
  • 低延迟,高互动:EasyRTC的全场景实时通信解决方案
  • Linux学习笔记之文件
  • 亚马逊云科技MySQL托管服务:Amazon RDS for MySQL的技术优势与成本优化实践
  • 蓝桥杯宝石组合(数论,因数)
  • 如何做网站聚合页/营销云
  • 做推广的装修网站/seo查询排名系统
  • 网站调试/搜索引擎优化的主要内容
  • 上海行业网站建设/百度软件商店
  • 重庆做网站建设公司哪家好/百度网站怎么申请注册
  • 网站模板中心 网站推荐/网站权重优化