在 MySQL 中创建表时,你需要定义每列的**数据类型**来指定列将存储的数据格式和大小。以下是常见的数据类型及其使用示例。不同的 MySQL 版本可能会对某些数据类型有所不同,但大部分数据类型在 MySQL 中都有一致的支持。
1. 数字数据类型
数字数据类型用于存储整数、浮动点数和定点数。常见的数字数据类型如下
整数类型
TINYINT
:存储小范围的整数。SMALLINT
:存储较小范围的整数。MEDIUMINT
:存储中等范围的整数。INT
或INTEGER
:存储常规的整数。BIGINT
:存储大范围的整数。
CREATE TABLE example_integer (
tinyint_col TINYINT,
smallint_col SMALLINT,
mediumint_col MEDIUMINT,
int_col INT,
bigint_col BIGINT
);
小数/浮点数类型
FLOAT
:存储单精度浮动点数。DOUBLE
或DOUBLE PRECISION
:存储双精度浮动点数。DECIMAL
或NUMERIC
:存储定点数,用于存储精确的小数。
CREATE TABLE example_float (
float_col FLOAT(7, 2), -- 7总位数,其中2位小数
double_col DOUBLE(16, 6),
decimal_col DECIMAL(10, 2) -- 总位数为10,其中小数位为2
);
2. 字符串数据类型
字符串类型用于存储文本数据,包括短文本和长文本。常见的字符串数据类型如下:
定长字符串
CHAR
:存储固定长度的字符串(最多255字符)。
CREATE TABLE example_char (
fixed_char CHAR(10) -- 10个字符长度
);
变长字符串
VARCHAR
:存储可变长度的字符串(最大65535字符,受表的行大小限制)
CREATE TABLE example_varchar (
variable_varchar VARCHAR(255) -- 最大255个字符
);
文本类型
TEXT
:用于存储较长的文本(最大65535字符)。TINYTEXT
:最大255字符。MEDIUMTEXT
:最大16MB的文本。LONGTEXT
:最大4GB的文本。
CREATE TABLE example_text (
short_text TINYTEXT,
medium_text MEDIUMTEXT,
long_text LONGTEXT
);
3. 日期和时间数据类型
日期和时间类型用于存储与时间相关的数据。
DATE
:存储日期(格式:YYYY-MM-DD
)。DATETIME
:存储日期和时间(格式:YYYY-MM-DD HH:MM:SS
)。TIMESTAMP
:存储时间戳,自动设置为当前时间或更新时间。TIME
:存储时间(格式:HH:MM:SS
)。YEAR
:存储年份(格式:YYYY
)。
CREATE TABLE example_datetime (
event_date DATE,
event_datetime DATETIME,
event_timestamp TIMESTAMP,
event_time TIME,
event_year YEAR
);
4. 布尔类型
MySQL 中没有专门的 BOOLEAN
类型,通常使用 TINYINT(1)
来表示布尔值。0
代表 FALSE
,1
代表 TRUE
。
CREATE TABLE example_boolean (
is_active TINYINT(1) -- 布尔值,0或1
);
5. 枚举和集合类型
ENUM
:枚举类型,表示一组预定义的值。只能选择其中一个值。SET
:集合类型,表示一组预定义的值,允许选择多个值。
CREATE TABLE example_enum_set (
gender ENUM('male', 'female', 'other'), -- 只能是三个值之一
colors SET('red', 'green', 'blue', 'yellow') -- 可以是多个颜色的集合
);
6. 二进制数据类型
二进制类型用于存储二进制数据。
BINARY
:固定长度的二进制数据。VARBINARY
:可变长度的二进制数据。BLOB
:二进制大对象,用于存储大量二进制数据(最大64KB)。TINYBLOB
:小型二进制大对象(最大255字节)。MEDIUMBLOB
:中型二进制大对象(最大16MB)。LONGBLOB
:大型二进制大对象(最大4GB)。
CREATE TABLE example_blob (
fixed_binary BINARY(16),
variable_binary VARBINARY(255),
blob_data BLOB,
tiny_blob TINYBLOB,
medium_blob MEDIUMBLOB,
long_blob LONGBLOB
);
7. 自增列
AUTO_INCREMENT
可以在列上定义自动递增,通常用于主键字段。
CREATE TABLE example_auto_increment (
id INT AUTO_INCREMENT PRIMARY KEY, -- 自动递增主键
name VARCHAR(255)
);
8. 外键约束和索引
MySQL 支持外键约束,确保数据的完整性。外键通常用于连接两个表,指向另一表的主键或唯一键。
CREATE TABLE example_foreign_key (
id INT AUTO_INCREMENT PRIMARY KEY,
category_id INT,
FOREIGN KEY (category_id) REFERENCES category(id)
);
9. 表的其他常见约束
NOT NULL
:确保列不为空。DEFAULT
:为列指定默认值。UNIQUE
:确保列的值唯一。PRIMARY KEY
:指定列为主键。INDEX
:创建索引。
CREATE TABLE example_constraints (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) UNIQUE,
age INT DEFAULT 18,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX idx_name (name)
);
完整示例:创建一个完整的表
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE,
birth_date DATE,
registration_time DATETIME DEFAULT CURRENT_TIMESTAMP,
is_active TINYINT(1) DEFAULT 1,
profile_picture LONGBLOB,
bio TEXT,
gender ENUM('male', 'female', 'other') NOT NULL
);
总结
在 MySQL 中创建表时,使用不同的列数据类型来定义列的存储格式。通过选择适当的数据类型,可以优化存储空间和查询性能。在设计数据库时要注意:
- 为每列选择合适的数据类型和大小。
- 考虑性能、存储需求和数据验证。