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

03.MySQL表的操作详解

MySQL表的操作详解

  1. MySQL 表的操作概述
  2. 创建表
    2.1 创建表的基本语法
  3. 查看表结构
  4. 修改表
    4.1 新增列
    4.2 修改列属性
    4.3 修改列名
    4.4 修改表名
    4.5 删除列
  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 关键参数说明
  1. 字段定义

    • 每个字段需指定名称、数据类型和可选的约束条件(如NOT NULLDEFAULT等)。
    • COMMENT用于为字段添加注释,便于后续维护。
  2. 字符集与校对规则

    • CHARSET指定表的字符集(如utf8mb4),若未指定则继承数据库默认设置。
    • COLLATE指定字符集的校对规则(如utf8mb4_unicode_ci),影响字符串比较和排序行为。
  3. 存储引擎

    • ENGINE指定表使用的存储引擎(如InnoDBMyISAM),默认为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:是否允许为空(YESNO)。
  • 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关键字,避免误删同名永久表。

http://www.xdnf.cn/news/10416.html

相关文章:

  • nc 命令示例
  • MySQ-8.42 MGR 组复制部署及详解
  • 医疗数理范式化:从范式迁移到认知革命的深度解析
  • 微服务面试(分布式事务、注册中心、远程调用、服务保护)
  • 基于GeoTools和OSM路网求解两条道路相交点-以长沙市为例
  • CSS篇-6
  • Java中的线程池七大核心参数设置策略和使用场景参数设计举例
  • 6.01打卡
  • iOS安全和逆向系列教程 第18篇:iOS应用脱壳技术详解与实战
  • python集成inotify-rsync实现跨服务器文件同步
  • GO+RabbitMQ+Gin+Gorm+docker 部署 demo
  • Qwen2.5-VL 视觉编码器的 RMSNorm
  • MQTT入门实战宝典:从零起步掌握物联网核心通信协议
  • Android Stdio 编译 文件生成,以及Gradle
  • 科研学习|科研软件——激活后的Origin导出图时突然出现了demo水印
  • TDenigne 集群可视化管理
  • UVa1457/LA4746 Decrypt Messages
  • 卫生间改造翻新怎么选品牌?智能健康、适老有爱,我选瑞尔特
  • windows+APP PDFgear 免费工具
  • 属性映射框架-MapStruct
  • 产品规格书写作结构、规范(编写指南)
  • 【MLLM】多模态LLM 2025上半年技术发展(Better、Faster、Stronger)
  • 使用MCP和Ollama本地创建AI代理:实操教程
  • 定制一款国密浏览器(13):预置国密根证书到浏览器
  • |从零开始的Pyside2界面编程|绘图、布局及页面切换
  • 【算法】递归与分治策略
  • C++11 语法特性一文详解
  • MySQL中count(1)和count(*)的区别及细节
  • Redis持久化机制详解
  • atapi!IdeReadWrite函数分析下之Send read command