mysql 问题解答-CSDN博客

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

01 Mysql有哪些数据类型

MySQL支持多种数据类型,这些类型可以分为几个大的类别:数值类型、日期和时间类型、字符串(字符和字节)类型、空间类型、JSON类型。下面是每种类型的简要说明和用途,以及示例。

数值类型

  1. 整型:

    • TINYINT:非常小的整数,如性别标识(0代表女性,1代表男性)。
    • SMALLINT:小型整数,如年龄字段。
    • MEDIUMINT:中型整数,可能用于存储社区内的用户数量。
    • INTINTEGER:标准整数,适用于存储更大范围的数值,如用户ID。
    • BIGINT:更大范围的整数,例如存储社交媒体平台的全球用户ID。

    每种整型都有相应的UNSIGNED属性,可以存储更大的正数值。

  2. 浮点型和定点型:

    • FLOAT:单精度浮点数,如存储商品的价格。
    • DOUBLE:双精度浮点数,如存储科学数据或精确计算。
    • DECIMALNUMERIC:用于存储精确的小数,常用于财务计算,例如账户余额。

日期和时间类型

  1. DATE:包含日期值的列(年月日),例如存储用户的生日。
  2. TIME:包含时间值(时分秒),例如记录事件的持续时间。
  3. DATETIME:包含日期和时间值,用于记录文章发布的具体时间。
  4. TIMESTAMP:包含日期和时间值,通常用于记录数据行的创建和修改时间。
  5. YEAR:年份值,比如表示汽车的制造年份。

字符串类型

  1. 字符型:

    • CHAR:定长字符串,如存储车牌号。
    • VARCHAR:变长字符串,适用于存储长度不固定的文本,如用户姓名。
  2. 文本型:

    • TINYTEXT:非常短的文本,如注释。
    • TEXT:标准的文本数据,如博客文章。
    • MEDIUMTEXT:中等长度的文本,如较长的文章。
    • LONGTEXT:极长文本数据,适用于存储大型文本,如书籍内容。
  3. 二进制型:

    • BINARYVARBINARY:类似于CHARVARCHAR,但是用于二进制字符串。
    • TINYBLOBBLOBMEDIUMBLOBLONGBLOB:用于存储二进制数据,如图片或文件。

空间类型

  • GEOMETRYPOINTLINESTRINGPOLYGON 等:这些类型用于存储地理空间数据,例如在地图应用中标示位置或区域。

JSON类型

  • JSON:用于存储JSON(JavaScript Object Notation)文档。在需要存储非结构化数据或复杂数据结构的应用中非常有用,例如存储配置参数或临时数据。

示例应用场景

假设你正在开发一个电子商务平台,你可能需要以下数据类型:

  • 商品ID:INTBIGINT(如果预计商品数量非常大)。
  • 商品价格:DECIMAL(用于保证价格的精确度)。
  • 用户名:VARCHAR(因为用户名长度可能不同)。
  • 用户密码:VARCHAR(通常存储密码的散列值)。
  • 商品描述:TEXT(因为描述的长度可能超出VARCHAR的限制)。
  • 用户注册时间:DATETIME(记录日期和时间)。
  • 商品图片:BLOB 或直接存储图片的URL(如果图片以文件形式存储在数据库中)。
  • 用户地理位置:POINT(如果需要存储用户的精确位置)。
  • 用户配置:JSON(可以灵活地存储用户的配置设置)。

在设计数据库时,选择合适的数据类型对于优化性能、空间利用和数据完整性至关重要。正确的数据类型不仅可以减少存储空间的浪费,还可以加快查询速度,确保数据的准确性。

04 CHAR,VARCHAR 和 Text 的区别?

text用于存储文章,博客等任何可能超过VARCHAR限制的文本。
在MySQL中,TEXT类型的列不能指定默认值。这是因为TEXT类型是用来存储大段文本的,它们通常是不定长的,可以存储非常长的字符串,而MySQL不允许给这种类型的列指定默认值。

此外,TEXT类型的数据通常被存储在表的数据页之外。这意味着当数据库存储和检索这种类型的数据时,可能需要更多的磁盘I/O操作,因为它必须跨越不同的位置。这种存储方式与CHARVARCHAR类型相比,可能会使得处理速度较慢。

下面是一个简单的例子来解释这一点:

假设你有一个博客系统,每篇博客的内容可能包括大量文本。你可以为博客内容创建一个TEXT类型的列。

CREATE TABLE blog_posts (
  id INT AUTO_INCREMENT PRIMARY KEY,
  title VARCHAR(255),
  content TEXT,
  published_date DATETIME
);

在这个blog_posts表中,content列被定义为TEXT类型,因为博客文章可能非常长,超过了VARCHAR类型的最大长度限制。

现在,如果你想为content列设置一个默认值(比如一个空字符串),这样的操作是不被允许的:

ALTER TABLE blog_posts ALTER COLUMN content SET DEFAULT '';

执行这条语句会导致错误,因为TEXT类型的列不支持默认值。

当你要查询表中的博客文章时:

SELECT * FROM blog_posts WHERE id &
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: mysql