数据库操作命令详解:CREATE、ALTER、DROP 的使用与实践

embedded/2025/3/6 3:03:04/

引言
数据库是存储和管理数据的核心工具,而 ​DDL(Data Definition Language,数据定义语言)​​ 是构建和调整数据库结构的基石。本文将通过实际示例,详细讲解 CREATE(创建)、ALTER(修改)、DROP(删除)三大核心命令的使用方法、注意事项及典型场景,帮助开发者高效管理数据库


一、CREATE:创建数据库对象

1. ​创建数据库
sql">CREATE DATABASE shop_db 
DEFAULT CHARACTER SET utf8mb4 
COLLATE utf8mb4_unicode_ci;
  • 作用:新建一个名为 shop_db 的数据库
  • 关键参数
    • CHARACTER SET:指定字符集(推荐 utf8mb4 支持完整 Unicode)。
    • COLLATE:设置排序规则(如区分大小写、重音处理)。
2. ​创建数据表
sql">CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY COMMENT '用户ID',username VARCHAR(50) NOT NULL UNIQUE COMMENT '用户名',email VARCHAR(100) NOT NULL COMMENT '邮箱',created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  • 核心字段
    • AUTO_INCREMENT:自增主键,常用于唯一标识。
    • NOT NULL 和 UNIQUE:约束数据完整性。
    • DEFAULT:字段默认值(如自动填充时间戳)。
  • 表选项
    • ENGINE:指定存储引擎(InnoDB 支持事务,推荐)。
    • COMMENT:为表或字段添加注释,提升可维护性。

二、ALTER:修改数据库结构

1. ​新增字段
sql">ALTER TABLE users 
ADD COLUMN phone VARCHAR(20) COMMENT '手机号' AFTER email;  
  • 用途:为 users 表添加手机号字段,位置在 email 之后。
2. ​修改字段类型
sql">ALTER TABLE users 
MODIFY COLUMN email VARCHAR(150) COMMENT '电子邮箱地址';  
  • 注意:修改字段类型可能导致数据截断,需提前备份。
3. ​删除字段
sql">ALTER TABLE users 
DROP COLUMN phone;  
  • 风险:直接删除字段会导致数据永久丢失,需谨慎操作。
4. ​重命名表
sql">ALTER TABLE users 
RENAME TO customer;  
  • 场景:调整表名以符合业务术语(如 users → customer)。

三、DROP:删除数据库对象

1. ​删除数据表
sql">DROP TABLE customer;  
  • 影响:表结构和数据永久删除,不可恢复!
  • 安全建议
    • 先备份:CREATE TABLE backup_customer AS SELECT * FROM customer;
    • 确认无依赖:检查外键关联或业务代码是否引用该表。
2. ​删除数据库
sql">DROP DATABASE shop_db;  
  • 慎用:删除数据库会清除所有表和数据,仅用于测试环境或明确清理。

四、实战技巧与避坑指南

1. ​ALTER 的锁表问题
  • 现象:修改大表时可能锁表,导致业务阻塞。
  • 优化方案
    • 使用在线工具(如 pt-online-schema-change)。
    • 在低峰期操作,分批执行变更。
2. ​DROP 的防误删设计
  • 技巧:启用数据库回收站(部分云数据库支持),或配置权限隔离:
    sql">GRANT DELETE, INSERT, SELECT ON shop_db.* TO 'app_user'@'%';  
    REVOKE DROP ON shop_db.* FROM 'app_user'@'%';  
    • 限制生产账号的 DROP 权限,避免误操作。
3. ​CREATE 的规范化建议
  • 字段命名:使用 snake_case(如 user_id),避免保留字。
  • 索引优化:在频繁查询的字段上添加索引:
    sql">CREATE INDEX idx_created_at ON users(created_at);  

五、总结

  • CREATE:用于构建数据库骨架,需明确字段类型、约束和存储引擎。
  • ALTER:灵活调整结构,但需关注数据安全与性能影响。
  • DROP:彻底清理数据,操作前务必确认备份和依赖关系。

最佳实践

  1. 所有 DDL 操作前备份数据。
  2. 使用事务或工具辅助高风险操作(如 MySQL 的 innodb_online_alter_log_max_size)。
  3. 通过注释和文档记录表结构变更历史。

掌握这些命令后,您将能游刃有余地设计和管理数据库,支撑业务高效运转!


http://www.ppmy.cn/embedded/170369.html

相关文章

RAG检索增强生成(Retrieval-Augmented Generation)介绍(双模态架构:检索子系统、生成子系统)实现知识获取与内容生成的协同

文章目录 增强生成(RAG)技术:原理、架构与前沿实践1. RAG技术架构剖析1.1 技术融合范式- **检索子系统**- **生成子系统** 2. 核心组件与工作流程2.1 数据预处理管线- **多粒度分块策略**- **特征增强技术** 2.2 混合检索引擎 3. 性能优化关键…

anolis8.9-k8s1.32-系统基本配置

一、系统信息 # cat /etc/anolis-release Anolis OS release 8.9 二、 firewalld设置 firewall-cmd --zonepublic --add-port6443/tcp --permanentfirewall-cmd --zonepublic --add-port10250-10259/tcp --permanentfirewall-cmd --zonepublic --add-port30000-32767/tcp -…

Redis——缓存穿透、击穿、雪崩

缓存穿透 什么是缓存穿透 缓存穿透说简单点就是大量请求的 key 根本不存在于缓存中,导致请求直接到了数据库上,根本没有经过缓存这一层。举个例子:某个黑客故意制造我们缓存中不存在的 key 发起大量请求,导致大量请求落到数据库…

算法思想-贪心算法

算法思想 - 贪心算法 引言 贪心算法(Greedy Algorithm)是一种在每个步骤中都做出局部最优选择的算法,期望通过这些局部最优解能够得到全局最优解。它并不总是能找到全局最优解,但在某些情况下,贪心算法可以非常高效地…

【STM32 基于PID的闭环电机控制系统】

STM32 基于PID的闭环电机控制系统 目录 STM32 基于PID的闭环电机控制系统一、PID算法在STM32F103C8T6中的实现思路二、代码实现与解释三、PID算法的调试与优化四、总结 一、PID算法在STM32F103C8T6中的实现思路 基本概念 • 目标 :通过PID算法调节电机的转速&#…

2.4GHZ无线跳频算法 C语言

目录 一、概述 二、2.4GHZ无线调频算法C语言代码 关键点说明: 实际应用注意事项: 一、概述 2.4GHz频段常用在蓝牙、Wi-Fi或者Zigbee这些无线技术中,不同的协议可能有不同的跳频机制。比如蓝牙使用的是自适应跳频,而传统的可能用伪随机序列跳频。 用户可能是在开发自己…

rust学习笔记11-集合349. 两个数组的交集

rust除了结构体,还有集合类型,同样也很重要,常见的有数组(Array)、向量(Vector)、哈希表(HashMap) 和 集合(HashSet)字符串等,好意外呀…

Ubuntu 22.04 启动登录页面显示 IP 地址

Ubuntu 22.04 启动登录页面显示 IP 地址的配置方法 Ubuntu 22.04 默认登录界面不会直接显示 IP 地址,但可通过以下步骤实现开机后登录页面的 IP 展示: ‌方法一:通过修改 /etc/issue 文件显示 IP‌ ‌编辑 /etc/issue 文件‌ 该文件控制登…