MySQL 语句分为:
语句类型 | 作用 | 关键字示例 |
---|---|---|
数据查询(DQL) | 查询数据 | SELECT |
数据操作(DML) | 插入、更新、删除数据 | INSERT , UPDATE , DELETE |
数据定义(DDL) | 定义或修改表结构 | CREATE , ALTER , DROP |
事务控制(TCL) | 控制事务执行 | BEGIN , COMMIT , ROLLBACK |
权限控制(DCL) | 管理权限 | GRANT , REVOKE |
一、查询语句(SELECT
)
用于从数据库中检索数据,是最常用的 SQL 语句。
语法结构:
SELECT column1, column2, ...
FROM table_name
WHERE condition
GROUP BY column
HAVING condition
ORDER BY column ASC|DESC
LIMIT offset, count;
关键部分解析:
SELECT
:指定查询哪些列,可以用*
表示全部列;FROM
:指定查询的数据表;WHERE
:筛选符合条件的记录(过滤行);GROUP BY
:将结果按某列分组;HAVING
:对分组后的结果进行条件过滤(区别于 WHERE,HAVING 针对聚合结果);ORDER BY
:对结果排序(升序 ASC,降序 DESC);LIMIT
:限制返回的记录数及偏移量。
示例:
SELECT name, COUNT(*) AS orders_count
FROM customers
JOIN orders ON customers.id = orders.customer_id
WHERE age > 18
GROUP BY name
HAVING orders_count > 5
ORDER BY orders_count DESC
LIMIT 10;
注意:
- 从
customers
表和orders
表连接数据(将每一个顾客(customers 表)与其在 orders 表中的订单匹配起来)。 - 筛选年龄大于 18 的顾客。
- 按顾客姓名分组,统计每个顾客的订单数量。
- 只返回订单数量超过 5 的顾客。
- 按订单数量降序排列。
- 只显示前 10 条结果。
二、数据插入语句(INSERT
)
用于添加新记录。
INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);
注意:
- 列出需要插入值的列名和对应的值。
- 也可以一次插入多条数据。
三、数据更新语句(UPDATE
)
用于修改已有数据。
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
注意:
WHERE
是关键,指定更新哪些行。若无WHERE
,所有行都会被更新!
四、数据删除语句(DELETE
)
用于删除表中的数据。
DELETE FROM table_name
WHERE condition;
注意:
- 需使用
WHERE
指定删除哪些行,没有WHERE
会删除所有数据,。
五、表结构操作(DDL)
1. 创建表:
CREATE TABLE table_name (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
age INT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
注意:
字段名 | 类型 | 约束/说明 |
---|---|---|
id | INT | 主键,自动递增。用于唯一标识每一行记录。 |
name | VARCHAR(50) | 最多可存储 50 个字符,不能为空(NOT NULL )。 |
age | INT | 存储年龄,整数类型,可以为空(没有 NOT NULL 约束)。 |
created_at | TIMESTAMP | 时间戳字段,默认值为当前时间(CURRENT_TIMESTAMP )。自动记录创建时间。 |
2. 修改表:
ALTER TABLE table_name
ADD COLUMN email VARCHAR(100);
注意:
- 修改已有表
table_name
,新增一个名为email
的字段,数据类型为VARCHAR(100)
。
3. 删除表:
DROP TABLE table_name;
注意:
- 该代码会删除整个表
table_name
。
六、事务控制语句
用于保证数据操作的完整性。
语句 | 作用说明 |
---|---|
START TRANSACTION; | 显式开启一个事务 |
BEGIN; | 等价于 START TRANSACTION ,开启事务 |
COMMIT; | 提交事务,使所有操作永久生效 |
ROLLBACK; | 回滚事务,撤销事务内的所有操作 |
SAVEPOINT 名称; | 设置一个保存点,可用于局部回滚 |
ROLLBACK TO SAVEPOINT 名称; | 回滚到指定保存点 |
RELEASE SAVEPOINT 名称; | 删除保存点(不是必须的,但可清理命名空间) |
SET AUTOCOMMIT = 0; | 禁用自动提交(事务需手动提交) |
示例——基本事务控制:
START TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;
注意:
- 如果两个
UPDATE
都成功,就COMMIT
,资金划转完成。 - 如果任一失败,执行
ROLLBACK;
,保持原始状态。
七、索引相关语句
索引提升查询性能。
CREATE INDEX idx_name ON table_name(column_name);
DROP INDEX idx_name ON table_name;
注意:
- CREATE语句给
users
表的email
列建立一个索引,查询时WHERE email = 'xxx'
会更快。 DROP
语句删除名为idx_name
的索引。
八、权限控制语句
用于 授予、撤销和查看数据库用户对数据库对象(如数据库、表、列等)的访问权限。
语句 | 作用 |
---|---|
GRANT | 授权,赋予用户某些权限 |
REVOKE | 撤销,取消用户已有权限 |
SHOW GRANTS | 查看某用户的权限 |
CREATE USER | 创建新用户 |
DROP USER | 删除用户 |
SET PASSWORD | 修改用户密码 |
FLUSH PRIVILEGES | 刷新权限表(一般不再手动调用) |
示例——完整授权流程:
-- 创建用户(创建一个名为 dev 的新用户,密码为 devpass,允许从任意主机(%)连接)
CREATE USER 'dev'@'%' IDENTIFIED BY 'devpass';
-- 授权开发者对 testdb 所有表有全部权限
GRANT ALL PRIVILEGES ON testdb.* TO 'dev'@'%';
-- 查看权限
SHOW GRANTS FOR 'dev'@'%';
-- 撤销 DELETE 权限
REVOKE DELETE ON testdb.* FROM 'dev'@'%';
-- 删除用户
DROP USER 'dev'@'%';