一、SELECT查询语句
语法结构
SELECT [DISTINCT] 列名1, 列名2, ... FROM 表名 [WHERE 条件] [GROUP BY 分组列] [HAVING 分组条件] [ORDER BY 排序列 [ASC|DESC]] [LIMIT 偏移量, 行数];
结构要点
SELECT子句:必需部分,指定要查询的列
FROM子句:必需部分,指定数据来源的表
WHERE子句:可选,用于筛选行
GROUP BY:可选,用于分组聚合
HAVING:可选,对分组结果筛选
ORDER BY:可选,指定排序方式
LIMIT:可选,限制返回行数
示例
-- 查询员工表中薪资大于5000的市场部员工 SELECT employee_id, first_name, last_name, salary FROM employees WHERE department = 'Marketing' AND salary > 5000 ORDER BY salary DESC LIMIT 10;
关键点
可以使用
*选择所有列但不推荐列名可以使用AS设置别名
WHERE条件中可以使用比较运算符和逻辑运算符
多表查询需要指定JOIN条件
注意点
避免使用SELECT *,只查询需要的列
大表查询要使用LIMIT限制结果集
为常用查询条件创建索引
注意NULL值的特殊处理
二、INSERT插入语句
语法结构
-- 单行插入 INSERT INTO 表名 (列1, 列2, ...) VALUES (值1, 值2, ...); -- 多行插入 INSERT INTO 表名 (列1, 列2, ...) VALUES (值1, 值2, ...), (值1, 值2, ...), ...; -- 从查询结果插入 INSERT INTO 表名 (列1, 列2, ...) SELECT 列1, 列2, ... FROM 另一表 WHERE 条件;
结构要点
INSERT INTO:必需关键字,指定目标表
列名列表:可选,指定要插入的列
VALUES:必需关键字,指定要插入的值
SELECT子句:替代VALUES从其他表查询插入
示例
-- 插入单条产品记录 INSERT INTO products (product_id, name, price, stock) VALUES (1001, '无线鼠标', 99.99, 50); -- 批量插入订单项 INSERT INTO order_items (order_id, product_id, quantity) VALUES (5001, 1001, 2), (5001, 1002, 1), (5001, 1003, 3);
关键点
列名和值必须一一对应
可以省略列名列表,但必须提供所有列的值
自增列可以指定NULL或DEFAULT
使用多行插入提高性能
注意点
注意主键和唯一约束
确保外键约束满足
字符串和日期值需要引号
大表插入考虑暂时禁用索引
三、UPDATE更新语句
语法结构
UPDATE 表名 SET 列1 = 值1, 列2 = 值2, ... [WHERE 条件] [ORDER BY 列名] [LIMIT 行数];
结构要点
UPDATE:必需关键字,指定要更新的表
SET:必需关键字,指定要更新的列和新值
WHERE:可选,指定要更新的行
ORDER BY:可选,控制更新顺序
LIMIT:可选,限制更新的行数
示例
-- 更新特定产品的价格 UPDATE products SET price = price * 1.1, updated_at = NOW() WHERE product_id = 1001; -- 批量更新库存状态 UPDATE inventory SET status = 'OUT_OF_STOCK' WHERE quantity = 0 AND status != 'DISCONTINUED' LIMIT 100;
关键点
SET子句可以包含表达式
可以同时更新多个列
使用WHERE条件精确控制更新范围
可以使用LIMIT分批更新大表
注意点
没有WHERE条件会更新整个表
注意事务大小,避免长时间锁定
更新前先备份重要数据
考虑使用乐观锁处理并发更新
四、DELETE删除语句
语法结构
DELETE FROM 表名 [WHERE 条件] [ORDER BY 列名] [LIMIT 行数];
结构要点
DELETE FROM:必需关键字,指定要删除的表
WHERE:可选,指定要删除的行
ORDER BY:可选,控制删除顺序
LIMIT:可选,限制删除的行数
示例
-- 删除特定订单 DELETE FROM orders WHERE order_id = 5001; -- 批量删除过期日志 DELETE FROM system_logs WHERE created_at < DATE_SUB(NOW(), INTERVAL 1 YEAR) LIMIT 1000;
关键点
可以精确删除单行或多行
支持使用LIMIT分批删除
删除操作通常不可逆
会触发相关的外键约束检查
注意点
没有WHERE条件会清空整个表
大表删除考虑使用软删除(标记删除)
删除前先备份重要数据
注意外键约束的影响
五、四种语句对比总结
关键区别:
SELECT是只读操作,其他三种会修改数据
INSERT增加新记录,UPDATE修改现有记录,DELETE移除记录
所有修改数据的操作都应谨慎使用WHERE条件
大表操作考虑使用LIMIT分批处理