刚接触 MySQL 的同学,是不是总搞不清ALTERDROP的区别?写SELECT语句时总被 1064 语法错误卡壳?其实 SQL 没那么复杂 —— 它本质是按「功能分类」的工具集。今天这篇就带你在 Linux 环境下,从表结构操作(ALTER/DROP) 入手,把 DQL/DML/DDL 等五大 SQL 分类拆明白,再结合实战案例教你避开语法坑,从 “写语句报错” 到 “熟练改表查数据” 一步到位。

一、表结构操作——ALTER/DROP

ALTER语句

使用 ALTER TABLE 语句追加, 修改, 或删除列的语法

1.add

--  增加字段

alter  table 表名 add dateT date;

-- 设置默认值

alter table 表名 add dateT date DEFAULT "2025-12-12"; 

例如:

2.modify

modify后必须明确指定「字段类型」(哪怕只是修改注释,也要重新声明类型)

-- 修改字段类型,属性

alter table 表名 modify dateT datetime;
alter table 表名 modify dateT date comment "日期";

-- 修改字段默认不为空

alter table 表名 modify stu_id int not null;

-- 修改字段默认可以为空
alter table 表名 modify stu_id int default null;

例如:

3.drop

-- 删除字段
alter table 表名 drop 字段名;

例如:

4.change

-- 修改字段名称
alter table 表名 change stu_id sid varchar(255);

例如:

5.character set

-- 修改表的字符集
alter table 表名 character set utf8;

例如:

6.rename to

-- 修改表名
alter table 旧表名 rename to 新表名;
-- 另外一种写法
rename table 旧表名 to 新表名;

例如:

DROP语句

-- 删除表
drop table if exists 表名;

例如:

二、五大SQL分类

五大SQL分类表

分类 核心作用 核心关键字 典型操作
DQL 查询数据 SELECT、FROM、WHERE 多表查询、统计
DML 增删改数据 INSERT、UPDATE、DELETE 新增记录、改值
DDL 定义 / 修改数据库结构 CREATE、ALTER、DROP 建表、删索引
DCL 权限 / 事务控制(广义) GRANT、REVOKE、COMMIT 授权、提交事务
TCL 事务控制(狭义) COMMIT、ROLLBACK、SAVEPOINT 回滚、保存点

1.数据查询语言(DQL, Data Query Language)

核心作用:从数据库中查询 / 检索数据(仅读取,不修改数据),是最常用的 SQL 类别。

核心关键字:select(核心)、from、where、group by、having、order by、limit、join等。

-- 查询前5名年龄小于21的用户姓名和专业,按年龄降序排列
SELECT name, major
FROM 表名
WHERE age < 21
ORDER BY age DESC 
LIMIT 5;

例如:

2.数据操作语言(DML, Data Manipulation Language)

核心作用:操作(增 / 删 / 改)数据库中的数据(仅修改数据内容,不改变表结构)。

核心关键字:insert(新增)、update(修改)、delete(删除)、merge(合并,部分数据库支持)。

-- 新增一条用户记录
INSERT INTO 表名 (name, age, phone) VALUES ('张三', 25, '13800138000');

-- 修改用户专业
UPDATE 表名 SET major= '软件工程' WHERE id = 1;

-- 删除年龄大于18的用户
DELETE FROM users WHERE age > 18;

例如:

3、数据定义语言(DDL, Data Definition Language)

核心作用:定义 / 修改 / 删除数据库对象(表、索引、视图、触发器、数据库等)的结构,操作会直接生效(无需事务提交)。

核心关键字:create(创建)、alter(修改)、drop(删除)、truncate(清空表,属于 DDL 而非 DML)、rename(重命名)。

-- 创建用户表
CREATE TABLE 表名 (
  id INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(50) NOT NULL,
  age INT,
  phone VARCHAR(20) UNIQUE
);

-- 给用户表新增email字段
ALTER TABLE 表名 ADD COLUMN email VARCHAR(100);

-- 删除用户表
DROP TABLE 表名;

-- 清空用户表(删除所有数据且不可回滚)
-- TRUNCATE TABLE 表名;

例如:

4、数据控制语言(DCL, Data Control Language)

核心作用:管理数据库的权限和事务,控制用户对数据库的访问权限、事务提交 / 回滚等。

核心关键字:grant(授权)、revoke(撤销权限)、commit(提交事务)、rollback(回滚事务)、savepoint(保存点)、set transaction(设置事务属性)。

-- 授予用户test对users表的查询/插入权限
GRANT SELECT, INSERT ON 表名 TO 'test'@'localhost';

-- 撤销test用户的插入权限
REVOKE INSERT ON 表名 FROM 'test'@'localhost';

-- 提交事务(确认DML操作)
COMMIT;

-- 回滚事务(撤销未提交的DML操作)
ROLLBACK;

5.事务控制语言(TCL, Transaction Control Language)

补充说明:部分分类体系中,TCL 会从 DCL 中独立出来,专门聚焦事务管理(本质是 DCL 的子集)。

核心关键字:commit、rollback、savepoint

-- 开启事务(部分数据库需显式声明)
START TRANSACTION;
UPDATE 表名 SET age = 26 WHERE id = 1;


-- 设置保存点
SAVEPOINT sp1;
DELETE FROM 表名 WHERE id = 2;


-- 回滚到保存点(仅撤销删除操作,修改操作保留)
ROLLBACK TO sp1;


-- 提交最终修改
COMMIT;

看到这里,你应该能理清 SQL 五大分类的边界,也能在 Linux 终端里熟练用alter改表、drop删表了吧?其实 SQL 的核心是 “按功能选工具”—— 查数据用 DQL,改结构用 DDL,增删数据用 DML,记住这个逻辑就不会乱。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐