1. 数据类型

整数类型

  • TINYINT:非常小的整数,通常占用 1 个字节。在 MySQL 中,有符号的范围是 -128 到 127,无符号的范围是 0 到 255。常用于存储状态码等数据量较小的整数。
1
2
3
4
-- 在 MySQL 中创建一个包含 TINYINT 类型列的表
CREATE TABLE example_table (
    status TINYINT
);
  • SMALLINT:小整数,一般占用 2 个字节。有符号范围是 -32768 到 32767,无符号范围是 0 到 65535。
  • INT(INTEGER):常用的整数类型,占用 4 个字节。有符号范围是 -2147483648 到 2147483647,无符号范围是 0 到 4294967295。适用于存储用户 ID、数量等。
  • BIGINT:大整数,占用 8 个字节,可存储非常大的整数。

浮点类型

  • FLOAT:单精度浮点数,占用 4 个字节,可提供大约 7 位的小数精度。
1
2
3
4
-- 在 MySQL 中创建包含 FLOAT 类型列的表
CREATE TABLE product (
    price FLOAT
);
  • DOUBLE:双精度浮点数,占用 8 个字节,提供大约 15 位的小数精度。精度比 FLOAT 更高。

日期和时间类型

  • DATE:用于存储日期,格式通常为 YYYY-MM-DD
1
2
3
4
-- 在 MySQL 中创建包含 DATE 类型列的表
CREATE TABLE event (
    event_date DATE
);
  • TIME:用于存储时间,格式为 HH:MM:SS。
  • DATETIME:用于存储日期和时间,格式为 YYYY-MM-DD HH:MM:SS,范围从 1000 - 01 - 01 00:00:00 到 9999 - 12 - 31 23:59:59。
  • TIMESTAMP:也用于存储日期和时间,但范围比 DATETIME 小,从 1970 - 01 - 01 00:00:01 UTC 到 2038 - 01 - 19 03:14:07 UTC。它会根据时区进行调整,并且在更新记录时可以自动更新时间戳。

字符串类型

  • CHAR:固定长度的字符串,最多可以存储 255 个字符。如果存储的字符串长度小于指定的长度,会用空格填充。
1
2
3
4
-- 在 MySQL 中创建包含 CHAR 类型列的表
CREATE TABLE users (
    gender CHAR(1)
);
  • VARCHAR:可变长度的字符串,最多可以存储 65535 个字符(具体取决于字符集和数据库配置)。只占用实际存储字符串所需的空间。
  • TEXT:用于存储大量的文本数据,如文章内容等。在 MySQL 中,有不同的 TEXT 类型,如 TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT,存储容量依次增大。

二进制类型

  • BINARY:固定长度的二进制字符串,与 CHAR 类似,只是存储的是二进制数据。
  • VARBINARY:可变长度的二进制字符串,与 VARCHAR 类似。
  • BLOB:用于存储大量的二进制数据,如图像、音频、视频等。同样在 MySQL 中有 TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB 等不同类型。

其他类型

  • DECIMAL:用于存储精确的十进制数,通常用于存储货币或其他需要精确计算的数值。第一个参数表示总位数,第二个参数表示小数位数。
1
2
3
4
-- 在 MySQL 中创建包含 DECIMAL 类型列的表
CREATE TABLE prices (
    price DECIMAL(10, 2)
);
  • BIT:用于存储位字段,通常用于存储布尔值或标志位。
1
2
3
4
-- 在 MySQL 中创建包含 BIT 类型列的表
CREATE TABLE permissions (
    flags BIT(4)
);
  • BOOLEAN(BOOL):用于存储布尔值,通常只有两个可能的值:TRUE 或 FALSE。在 MySQL 中,实际上是用 TINYINT (1) 来实现的,0 表示 FALSE,1 表示 TRUE。
1
2
3
4
-- 在 MySQL 中创建包含 BOOLEAN 类型列的表
CREATE TABLE settings (
    is_active BOOLEAN
);
  • ENUM:枚举类型,用于存储一组预定义的值。
1
2
3
4
-- 在 MySQL 中创建包含 ENUM 类型列的表
CREATE TABLE products (
    color ENUM('Red', 'Green', 'Blue')
);
  • SET:集合类型,用于存储一组预定义的值。
1
2
3
4
-- 在 MySQL 中创建包含 SET 类型列的表
CREATE TABLE user_roles (
    roles SET('Admin', 'Moderator', 'User')
);
  • JSON:用于存储 JSON 格式的数据。
1
2
3
4
-- 在 MySQL 中创建包含 JSON 类型列的表
CREATE TABLE user_data (
    preferences JSON
);
  • GEOMETRY:用于存储地理空间数据,如点、线、多边形等。 注意事项

  • 选择合适的数据类型:根据实际需求选择合适的数据类型,以节省存储空间和提高性能。

  • 避免使用 NULL 值:如果某个列可以为空,应该使用 NULL 值来表示。

  • 考虑数据的一致性:在使用日期和时间类型时,确保数据的一致性,避免存储不一致的日期和时间。

2. 索引

索引是一种数据结构,用于加速数据库查询操作。它可以提高查询性能,特别是在大型数据库中。索引可以在表的一列或多列上创建,用于加速对这些列的查询。

索引的类型包括:

  • 主键索引(Primary Key Index):在表的主键列上创建的索引,用于唯一标识表中的每一行。
  • 唯一索引(Unique Index):在表的一列或多列上创建的索引,用于确保这些列的值是唯一的。
  • 普通索引(Normal Index):在表的一列或多列上创建的索引,用于加速查询操作。
  • 全文索引(Full-Text Index):用于在文本字段上进行全文搜索的索引。