数据库中容易混淆的关键字alter/update...

目录

[1. alter与update区别](#1. alter与update区别)

[1.1 基本概念](#1.1 基本概念)

[1.2 常见操作](#1.2 常见操作)

[1.3 核心区别比对](#1.3 核心区别比对)

[2. change与modify区别](#2. change与modify区别)

[2.1 常见操作](#2.1 常见操作)

[2.2 功能比对](#2.2 功能比对)

[3. drop、truncate与delete区别](#3. drop、truncate与delete区别)

[3.1 基本概念](#3.1 基本概念)

[3.2 常见操作](#3.2 常见操作)

[3.3 功能比对](#3.3 功能比对)


1. alter与update区别

1.1 基本概念

ALTER 是 DDL(Data Definition Language,数据定义语言)命令,用于修改数据库对象的结构

UPDATE 是 DML(Data Manipulation Language,数据操作语言)命令,用于修改表中已存在的数据

1.2 常见操作

ALTER(修改表结构)常见操作

sql 复制代码
-- 添加新字段
ALTER TABLE users 
ADD COLUMN email VARCHAR(100) COMMENT '邮箱';

-- 修改字段类型
ALTER TABLE users 
MODIFY COLUMN age SMALLINT;

-- 修改字段名和类型
ALTER TABLE users 
CHANGE COLUMN old_name new_name VARCHAR(100);

-- 删除字段
ALTER TABLE users 
DROP COLUMN phone;

-- 添加唯一索引
ALTER TABLE users 
ADD UNIQUE INDEX uk_phone (phone);

UPDATE(修改表数据)常见操作

sql 复制代码
--修改字段值
UPDATE users 
SET 
    email = 'newemail@example.com',
    phone = '13800138000',
    updated_at = NOW()
WHERE id = 1;

-- 使用子查询更新
UPDATE orders o
SET o.total_amount = (
    SELECT SUM(quantity * price) 
    FROM order_items 
    WHERE order_id = o.id
)
WHERE o.id = 1001;

-- 使用JOIN更新
UPDATE users u
INNER JOIN user_profiles p ON u.id = p.user_id
SET u.nickname = p.display_name
WHERE p.is_verified = 1;

1.3 核心区别比对

对比维度 ALTER UPDATE
作用对象 表结构(DDL) 表数据(DML)
操作类型 数据定义语言 数据操作语言
主要用途 修改表结构(字段、索引等) 修改表中的数据
是否锁表 是(会锁表) 行级锁(InnoDB)
是否可回滚 不可回滚 可回滚(事务中)
影响范围 整个表结构 指定的行和列
执行速度 影响整个表结构,较慢 只影响指定行,较快
权限要求 ALTER权限 UPDATE权限

总结:

命令 记忆要点
ALTER 表结构(字段、索引、表名等)
UPDATE 表数据(字段值)

2. change与modify区别

2.1 常见操作

sql 复制代码
-- 修改字段名
--✅ 必须使用CHANGE
ALTER TABLE users 
CHANGE COLUMN email user_email VARCHAR(100);

--修改字段类型
- 方法1:使用MODIFY(推荐,更简洁)
ALTER TABLE users 
MODIFY COLUMN age SMALLINT;

-- 方法2:使用CHANGE(也可以,但繁琐)
ALTER TABLE users 
CHANGE COLUMN age age SMALLINT;
-- 注意:需要写两次 age,繁琐

2.2 功能比对

操作 CHANGE MODIFY RENAME COLUMN (8.0+)
修改字段名 ✅ 支持 ❌ 不支持 ✅ 支持(最佳)
修改字段类型 ✅ 支持 ✅ 支持 ❌ 不支持
修改默认值 ✅ 支持 ✅ 支持 ❌ 不支持
修改注释 ✅ 支持 ✅ 支持 ❌ 不支持
修改NULL约束 ✅ 支持 ✅ 支持 ❌ 不支持
修改字段位置 ✅ 支持 ✅ 支持 ❌ 不支持
同时改名改类型 ✅ 支持 ❌ 不支持 ❌ 不支持

核心区别比对:

对比维度 CHANGE MODIFY
主要用途 修改字段名 + 类型 只修改字段类型/属性
是否可改名 ✅ 可以 ❌ 不可以
语法复杂度 较复杂(需写两次字段名) 较简单(只写一次)
使用频率 需要改名时 只改类型时
易错程度 容易写错字段名 不易出错

总结:MODIFY改类型,CHANGE改名字,选最简单的用!

3. drop、truncate与delete区别

3.1 基本概念

DROP 用于完全删除数据库对象(表、数据库、视图、索引等),包括结构和数据。

TRUNCATE 用于快速删除表中所有数据,保留表结构,重置自增ID。

DELETE 用于删除表中的数据行,但保留表结构。

3.2 常见操作

drop常见操作

sql 复制代码
-- 删除数据库
DROP DATABASE database_name;

-- 删除表
DROP TABLE table_name;

-- 删除索引
DROP INDEX index_name ON table_name;

truncate常见操作

sql 复制代码
-- 示例1:清空表
TRUNCATE TABLE logs;

delete常见操作

sql 复制代码
-- 删除指定行
DELETE FROM table_name WHERE condition;

-- 删除所有行(保留表结构)
DELETE FROM table_name;

-- 基于子查询删除
DELETE FROM orders 
WHERE user_id IN (
    SELECT id FROM users WHERE status = 0
);

-- 使用JOIN删除
DELETE o FROM orders o
INNER JOIN users u ON o.user_id = u.id
WHERE u.status = 0;

3.3 功能比对

核心功能比对:

对比维度 DROP DELETE TRUNCATE
命令类型 DDL(数据定义语言) DML(数据操作语言) DDL(数据定义语言)
作用对象 删除整个表结构+数据 删除表中的数据(行) 删除表中所有数据
是否保留表结构 ❌ 不保留 ✅ 保留 ✅ 保留
是否可回滚 ❌ 不可回滚 ✅ 可回滚(事务中) ❌ 不可回滚
删除速度 慢(逐行删除) 很快
自增ID 删除 不重置 重置为初始值
触发器 不触发 触发DELETE触发器 不触发
WHERE条件 ❌ 不支持 ✅ 支持 ❌ 不支持
释放空间 立即释放 不立即释放 立即释放
日志记录 少量日志 记录每行删除 少量日志

如何选择?

sql 复制代码
需要删除什么?
│
├─ 删除整个表(结构+数据)
│  └─ 使用 DROP TABLE
│
├─ 清空表中所有数据(保留结构)
│  ├─ 需要重置自增ID?
│  │  ├─ 是 → 使用 TRUNCATE TABLE
│  │  └─ 否 → 使用 DELETE FROM(如需回滚)
│  │
│  └─ 表有外键约束?
│     ├─ 是 → 使用 DELETE FROM
│     └─ 否 → 使用 TRUNCATE TABLE(更快)
│
└─ 删除部分数据(指定条件)
   └─ 使用 DELETE FROM ... WHERE

总结:DROP = 删除表(结构+数据) DELETE = 删除数据(保留结构,支持条件) TRUNCATE = 清空数据(保留结构,重置ID)

相关推荐
卜锦元1 分钟前
Golang后端性能优化手册(第一章:数据库性能优化)
大数据·开发语言·数据库·人工智能·后端·性能优化·golang
杨二K3 分钟前
Milvus性能权衡
数据库·人工智能·milvus
一往无前fgs4 分钟前
【问题记录】在openEuler 24 系统使用宝塔面板安装Mysql数据库启动失败问题
数据库·mysql
航Hang*10 分钟前
第3章:复习篇——第5-2节:数据库编程2
数据库·笔记·sql·mysql·sqlserver
islandzzzz10 分钟前
SQL学习应用工作场景(2)--执行优先级+语法顺序+保留2位小数
数据库·sql·学习
开开心心_Every11 分钟前
定时管理进程:防止沉迷电脑的软件推荐
xml·java·运维·服务器·网络·数据库·excel
hopsky12 分钟前
SQL语义校验方案
数据库·oracle
几度风雨见丹心12 分钟前
uniapp项目使用sqlite数据库
数据库·sqlite·uni-app
航Hang*13 分钟前
第3章:复习篇——第5-1节:数据库编程1
数据库·笔记·sql·mysql·sqlserver
Mr.朱鹏14 分钟前
分布式接口幂等性实战指南【完整版】
java·spring boot·分布式·sql·spring·云原生·幂等