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

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


一、CREATE:创建数据库对象

1. ​创建数据库
CREATE DATABASE shop_db 
DEFAULT CHARACTER SET utf8mb4 
COLLATE utf8mb4_unicode_ci;
  • 作用:新建一个名为 shop_db 的数据库。
  • 关键参数
    • CHARACTER SET:指定字符集(推荐 utf8mb4 支持完整 Unicode)。
    • COLLATE:设置排序规则(如区分大小写、重音处理)。
2. ​创建数据表
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. ​新增字段
ALTER TABLE users 
ADD COLUMN phone VARCHAR(20) COMMENT '手机号' AFTER email;  
  • 用途:为 users 表添加手机号字段,位置在 email 之后。
2. ​修改字段类型
ALTER TABLE users 
MODIFY COLUMN email VARCHAR(150) COMMENT '电子邮箱地址';  
  • 注意:修改字段类型可能导致数据截断,需提前备份。
3. ​删除字段
ALTER TABLE users 
DROP COLUMN phone;  
  • 风险:直接删除字段会导致数据永久丢失,需谨慎操作。
4. ​重命名表
ALTER TABLE users 
RENAME TO customer;  
  • 场景:调整表名以符合业务术语(如 users → customer)。

三、DROP:删除数据库对象

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

四、实战技巧与避坑指南

1. ​ALTER 的锁表问题
  • 现象:修改大表时可能锁表,导致业务阻塞。
  • 优化方案
    • 使用在线工具(如 pt-online-schema-change)。
    • 在低峰期操作,分批执行变更。
2. ​DROP 的防误删设计
  • 技巧:启用数据库回收站(部分云数据库支持),或配置权限隔离:
    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),避免保留字。
  • 索引优化:在频繁查询的字段上添加索引:
    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.mzph.cn/web/71031.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Asp.Net Core WebAPI开发教程(入门)

一、Asp.Net Core WebAPI项目创建 二、Asp.Net Core WebApi/Mvc路由定义 二、Asp.Net Core WebAPI 请求案例 Asp.Net WebApi Get请求整理(一) Asp.Net WebApi Post请求整理(一) Asp.Net WebApi Action命名中已‘Get’开头问题 …

VSCode大的JSON数据不能折叠问题

修改editor.foldingMaximumRegions为10000解决,默认只支持5000 在 VSCode 中,默认的 JSON 文件折叠功能对嵌套层级较深的数据支持有限。以下是几种解决嵌套 4 层以上数据无法折叠的方法: 1. 使用扩展插件 安装支持更复杂折叠功能的插件&am…

IPoIB源码深度解析:如何基于TCP/IP协议栈实现高性能InfiniBand通信

一、IPoIB的核心设计理念 IPoIB(IP over InfiniBand)是一种在InfiniBand网络上承载IP流量的技术,其核心目标是在不修改上层应用的前提下,利用InfiniBand的高带宽和低延迟特性。与自定义协议栈不同,IPoIB通过深度集成到Linux内核TCP/IP协议栈中,将InfiniBand设备抽象为标…

Vue学习教程-18Vue单文件组件

文章目录 前言一、单文件组件的构成二、组件引用三、组件的应用举例1.组件实例2.显示结果 前言 Vue 单文件组件(又名 *.vue 文件,缩写为 SFC)是一种特殊的文件格式,它允许将 Vue 组件的模板、逻辑 与 样式封装在单个文件中。组件…

掌握 findIndex、push 和 splice:打造微信小程序的灵活图片上传功能✨

文章目录 ✨ 掌握 findIndex、push 和 splice:打造微信小程序的灵活图片上传功能 🌟示例场景:小程序图片上传🌼 认识 findIndex定义语法在代码中的应用示例当前行为 🚀 认识 push定义语法在代码中的应用示例特点 ✂️ …

微服务即时通信系统---(七)文件管理子服务

目录 功能设计 模块划分 业务接口/功能示意图 服务实现流程 服务代码实现 封装文件操作模块(utils.hpp) 获取唯一标识ID 文件读操作 文件写操作 编写proto文件 文件元信息 文件管理proto 单文件上传 多文件上传 单文件下载 多文件下载 RPC调用 服务端创建子…

fluent-ffmpeg 依赖详解

fluent-ffmpeg 是一个用于在 Node.js 环境中与 FFmpeg 进行交互的强大库,它提供了流畅的 API 来执行各种音视频处理任务,如转码、剪辑、合并等。 一、安装 npm install fluent-ffmpeg二、基本使用 要使用 fluent-ffmpeg,首先需要确保系统中…

第16天:C++多线程完全指南 - 从基础到现代并发编程

第16天&#xff1a;C多线程完全指南 - 从基础到现代并发编程 一、多线程基础概念 1. 线程创建与管理&#xff08;C11&#xff09; #include <iostream> #include <thread>void hello() {std::cout << "Hello from thread " << std::this_…

Pwntools 的详细介绍、安装指南、配置说明

Pwntools&#xff1a;Python 开源安全工具箱 一、Pwntools 简介 Pwntools 是一个由 Security researcher 开发的 高效 Python 工具库&#xff0c;专为密码学研究、漏洞利用、协议分析和逆向工程设计。它集成了数百个底层工具的功能&#xff0c;提供统一的 Python API 接口&am…

ES的简单讲解

功能 &#xff1a; 文档存储 与 文档搜索 特点&#xff1a;比如有一个文档名 “你好” 可以用‘你‘&#xff0c;好&#xff0c;你好都可以搜索到这个文档 ES核心概念 类似于数据库中表的概念&#xff0c;在表的概念下又对数据集合进行了细分 ​ ES_Client查询接口 cpr::R…

leetcode_字典树 139. 单词拆分

139. 单词拆分 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true。 注意&#xff1a;不要求字典中出现的单词全部都使用&#xff0c;并且字典中的单词可以重复使用。 思路: 定义状态&#xff1a; 设dp[i]表…

宝塔安装向量数据库-Milvus

注&#xff1a;宝塔需要安装好docker容器组件&#xff01; 1、纯血宝塔安装 1.1 在线上镜像中&#xff0c;拉取milvus镜像&#xff0c;创建milvus容器 1.2 安装milvus管理工具ATTU&#xff1b;同样方式拉取线上镜像创建attu容器 2、自定义安装 2.1修改配置 {"registry-…

【K8S】Kubernetes 基本架构、节点类型及运行流程详解(附架构图及流程图)

Kubernetes 架构 k8s 集群 多个 master node 多个 work nodeMaster 节点&#xff08;主节点&#xff09;&#xff1a;负责集群的管理任务&#xff0c;包括调度容器、维护集群状态、监控集群、管理服务发现等。Worker 节点&#xff08;工作节点&#xff09;&#xff1a;实际运…

数据库MySQL,在终端输入后,提示不是内部命令等

【解决问题】mysql提示不是内部或外部命令&#xff0c;也不是可运行的程序 一般这种问题是因为没有在系统变量里面添加MySQL的可执行路径 以下是添加可执行路径的方法&#xff1a; 第一步&#xff1a;winR输入services.msc 然后找到MySQL&#xff0c;右击属性并复制MySQL的可执…

Python 中的线程模块

Python 中的线程模块 Python 中的线程模块 Python 中的线程模块 thread 模块是一个标准模块&#xff0c;提供了简单易用的方法为程序构建多线程。在幕后&#xff0c;该模块使用较低级的 _thread 模块&#xff0c;在 Python 早期版本中&#xff0c;该模块是多线程的流行选择。 …

PhotoShop学习01

了解Photoshop 这里省略了Photoshop的软件安装&#xff0c;请自行查找资源下载。 1.打开图片 下图为启动photoshop后出现的界面&#xff0c;我们可以通过创建新文件或打开已有文件来启用photoshop的工作界面。 可以通过左边的按钮进行新文件的创建或打开已有文件。 也可以点…

Python大战Java:AI时代的编程语言‘复仇者联盟‘能否换C位?

背景 当Java程序员在咖啡机前念叨’Python凭什么抢我饭碗’时&#xff0c;AI实验室里的Python工程师正用5行代码召唤出神经网络——这场编程语言的’权力的游戏’&#xff0c;胜负可能比你想象的更魔幻&#xff01;" 一、茶水间里的战争&#xff1a;Java和Python的相爱相…

GitCode 助力 python-office:开启 Python 自动化办公新生态

项目仓库&#xff1a;https://gitcode.com/CoderWanFeng1/python-office 源于需求洞察&#xff0c;打造 Python 办公神器 项目作者程序员晚枫在运营拥有 14w 粉丝的 B 站账号 “Python 自动化办公社区” 时&#xff0c;敏锐察觉到非程序员群体对 Python 学习的强烈需求。在数字…

javaweb + AI day03

一、web基础 二、分层解耦 注意&#xff1a;bean的名字默认是类名的首字母小写&#xff01;&#xff01;&#xff01; 三、Mysql count不参与null值统计 四、JDBC 五、MyBatis 数据库连接池

运行程序时出现加载配置文件时出错,对路径****的访问被拒绝

问题&#xff1a;最近给客户用c#语言编写进销存项目&#xff0c;在用vs2022自带的打包工具Microsoft visual studio installer projects 打包生成了安装文件&#xff0c;顺利安装后&#xff0c;点击桌面快捷方式后出现如下错误 经过查询相关资料发现是桌面快捷方式的权限问题&a…