MySQL表的操作详解
- MySQL 表的操作概述
- 创建表
2.1 创建表的基本语法 - 查看表结构
- 修改表
4.1 新增列
4.2 修改列属性
4.3 修改列名
4.4 修改表名
4.5 删除列 - 删除表
1. MySQL表的操作概述
MySQL表的操作是数据库开发和管理中的核心内容,主要涉及**数据定义语言(DDL)和数据操作语言(DML)**两大类操作。
- DDL(Data Definition Language):用于定义和修改数据库结构,包括创建表、删除表、修改表结构等。
- DML(Data Manipulation Language):用于操作表中的数据,例如插入记录、更新记录、删除记录等。
本文重点围绕表的DDL操作展开,详细讲解如何通过SQL语句完成表的创建、查看结构、修改和删除等操作,并结合实际案例说明其应用场景和注意事项。
2. 创建表
创建表是数据库设计的第一步,也是后续数据存储和管理的基础。MySQL中通过CREATE TABLE
语句完成表的创建,其基本语法如下:
2.1 创建表的基本语法
CREATE TABLE [IF NOT EXISTS] 表名 (字段1 数据类型 [约束条件] [COMMENT '注释信息'],字段2 数据类型 [约束条件] [COMMENT '注释信息'],...
)
[CHARSET=字符集名称]
[COLLATE=校对规则名称]
[ENGINE=存储引擎名称];
2.1.1 关键参数说明
-
字段定义:
- 每个字段需指定名称、数据类型和可选的约束条件(如
NOT NULL
、DEFAULT
等)。 COMMENT
用于为字段添加注释,便于后续维护。
- 每个字段需指定名称、数据类型和可选的约束条件(如
-
字符集与校对规则:
CHARSET
指定表的字符集(如utf8mb4
),若未指定则继承数据库默认设置。COLLATE
指定字符集的校对规则(如utf8mb4_unicode_ci
),影响字符串比较和排序行为。
-
存储引擎:
ENGINE
指定表使用的存储引擎(如InnoDB
、MyISAM
),默认为InnoDB
。可通过SHOW ENGINES;
命令查看当前支持的引擎。
2.1.2 实战案例:创建一个用户表
以创建user
表为例,要求包含用户ID、姓名、密码和注册时间字段,并指定字符集和存储引擎:
CREATE TABLE user (id INT PRIMARY KEY AUTO_INCREMENT COMMENT '用户唯一标识',name VARCHAR(50) NOT NULL COMMENT '用户名',password CHAR(60) NOT NULL COMMENT '用户密码',created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '注册时间'
)
CHARSET=utf8mb4
COLLATE=utf8mb4_unicode_ci
ENGINE=InnoDB;
执行结果说明:
- 表
user
被创建在当前选中的数据库中。 id
字段为主键,自动递增;created_at
字段默认值为当前时间戳。- 使用
utf8mb4
字符集支持中文及特殊符号,InnoDB
引擎支持事务和外键。
3. 查看表结构
在完成表的创建后,需验证表结构是否符合预期。MySQL提供了多种方式查看表的元数据信息。
3.1 使用DESC
命令查看基础结构
DESC 表名;
输出字段说明:
- Field:字段名称。
- Type:字段数据类型(如
VARCHAR(50)
)。 - Null:是否允许为空(
YES
或NO
)。 - Key:索引类型(如
PRI
表示主键)。 - Default:默认值(若未指定则为
NULL
)。 - Extra:额外属性(如
auto_increment
)。
3.2 使用SHOW CREATE TABLE
查看完整定义
SHOW CREATE TABLE 表名;
该命令输出完整的建表语句,包含字符集、存储引擎和约束条件,便于复制或调试。例如:
CREATE TABLE `user` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(50) NOT NULL,`password` char(60) NOT NULL,`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
4. 修改表
随着业务需求的变化,表结构可能需要调整。MySQL通过ALTER TABLE
语句实现表的动态修改,包括新增列、修改列属性、删除列等操作。
4.1 新增列
4.1.1 基本语法
ALTER TABLE 表名 ADD 列名 数据类型 [约束条件] [COMMENT '注释'] [位置];
- 位置参数:
AFTER 字段名
:将新列添加到指定字段之后。FIRST
:将新列添加到表的第一列。
4.1.2 示例:为用户表添加照片路径字段
ALTER TABLE user
ADD path VARCHAR(255) COMMENT '用户头像路径' AFTER password;
注意事项:
- 新增列默认值为
NULL
,若需非空需显式指定NOT NULL
。 - 已有数据的新增列值将填充为默认值(若有)或
NULL
。
4.2 修改列属性
4.2.1 基本语法
ALTER TABLE 表名 MODIFY 列名 新数据类型 [约束条件] [COMMENT '新注释'];
示例:将password
字段长度从CHAR(60)
扩展到CHAR(100)
ALTER TABLE user
MODIFY password CHAR(100) NOT NULL COMMENT '用户加密后的密码';
注意事项:
- 修改列类型可能导致数据丢失(如缩短字段长度),需谨慎操作。
- 若原列有默认值或约束,修改后需重新指定。
4.3 修改列名
4.3.1 基本语法
ALTER TABLE 表名 CHANGE 原列名 新列名 新数据类型 [约束条件] [COMMENT '新注释'];
示例:将path
字段重命名为avatar
ALTER TABLE user
CHANGE path avatar VARCHAR(255) COMMENT '用户头像路径';
注意事项:
- 修改列名需同时指定新数据类型和约束,即使未变更类型也需重复原定义。
4.4 修改表名
4.4.1 基本语法
ALTER TABLE 原表名 RENAME TO 新表名;
示例:将user
表更名为employee
ALTER TABLE user RENAME TO employee;
注意事项:
- 表名修改后,需同步更新相关SQL语句和应用程序代码。
4.5 删除列
4.5.1 基本语法
ALTER TABLE 表名 DROP 列名;
示例:删除employee
表中的avatar
字段
ALTER TABLE employee DROP avatar;
注意事项:
- 删除列会导致该列数据永久丢失,操作前需备份数据。
5. 删除表
当表不再使用时,可通过DROP TABLE
语句彻底删除表及其数据。
5.1 基本语法
DROP [TEMPORARY] TABLE [IF EXISTS] 表名;
- TEMPORARY:仅删除临时表(会话结束后自动销毁)。
- IF EXISTS:避免表不存在时报错,提高脚本健壮性。
示例:删除employee
表
DROP TABLE IF EXISTS employee;
5.2 临时表与永久表的区别
- 临时表:
- 使用
CREATE TEMPORARY TABLE
创建,仅在当前会话可见。 - 会话结束或连接关闭时自动删除。
- 表名可与永久表重复,此时永久表被隐藏。
- 使用
- 永久表:
- 普通表,需显式删除。
操作建议:
- 删除临时表时建议加上
TEMPORARY
关键字,避免误删同名永久表。