DDL:建库建表、改结构的底层命令
MySQL基础语法里,DDL(Data Definition Language)是操作数据库和表结构的起点。你每天写的
CREATE DATABASE、
ALTER TABLE、
DROP TABLE都属于它——不是“查数据”,而是“搭架子”。
CREATE DATABASE IF NOT EXISTS itheima DEFAULT CHARSET utf8mb4;:加
IF NOT EXISTS是防止重复创建报错;
utf8mb4是必须设的字符集,否则存 emoji 或某些生僻字会丢数据
DESC student;比
SHOW CREATE TABLE student;更快看字段名和类型,但看不到完整建表语句和索引定义
ALTER TABLE student ADD COLUMN phone VARCHAR(11) AFTER name;:新增字段时用
AFTER明确位置,避免字段顺序混乱影响应用层映射(尤其 ORM 场景)
DML:增删改数据的实操要点
DML(Data Manipulation Language)负责对表中真实数据下手,
INSERT、
UPDATE、
DELETE看似简单,但线上事故八成出在这儿。
INSERT INTO student (id, name) VALUES (1, '张三'), (2, '李四');:批量插入比单条快 5–10 倍,但要注意 MySQL 默认事务隔离级别下,整批要么全成功,要么全回滚
UPDATE student SET age = 20 WHERE id = 1;:永远带
WHERE!不加就是全表更新,没有回收站,执行完就不可逆
DELETE FROM student WHERE create_time :大表删旧数据别直接 <code>DELETE,容易锁表;应分批加
LIMIT 1000+ 循环,或改用
TRUNCATE(但会重置自增ID)
DQL:SELECT 不只是“查”,而是数据提取的第一道过滤器
SELECT是 MySQL 使用频率最高的语句,占日常操作 70% 以上。新手常以为“能出结果就行”,但字段选错、没加索引、滥用
LIKE '%xxx'会直接拖垮性能。 别写
SELECT *:即使开发环境看着快,一旦表加了 TEXT 字段或几十列,网络传输+内存开销翻倍;生产环境务必显式列出所需字段
SELECT name AS username, birthday AS birth_date FROM student ORDER BY id DESC LIMIT 20;:
AS改列名方便程序解析;
LIMIT必须配合
ORDER BY,否则分页结果不稳定 条件里慎用函数:
WHERE DATE(create_time) = '2025-01-01'会让索引失效;应改写为
WHERE create_time >= '2025-01-01' AND create_time
语法细节:大小写、分号、注释这些“小事”真会卡住你
MySQL 对大小写不敏感,但 Linux 下数据库名、表名默认区分大小写(Windows 不区分),这个差异在迁移或跨平台部署时经常引发
Table doesn't exist错误。 所有语句结尾必须有分号
;,否则客户端会一直等待输入,看起来像“卡死” 单行注释用
--(注意空格)或
#;多行用
/* ... */;注释里别混用中文标点,某些客户端解析会失败
USE itheima;后再执行
SHOW TABLES;才能看到当前库的表;如果忘了
USE,
SHOW TABLES;会返回空,而不是报错——这个静默行为最容易让人误判库是否选对
实际写 SQL 时,最常被忽略的不是高级功能,而是建库时没设
utf8mb4、删数据前没
SELECT COUNT(*)预估量、以及
UPDATE永远不加
WHERE条件。这些动作本身只多敲几个字符,但漏掉一次,可能就得加班恢复备份。
