您好!欢迎访问家园网-www.jy.wang!

家园网

MySQL增删改查(CRUD)语句详解

网络 作者:本站 点击:

一、SELECT查询语句

语法结构

SELECT [DISTINCT] 列名1, 列名2, ...
FROM 表名
[WHERE 条件]
[GROUP BY 分组列]
[HAVING 分组条件]
[ORDER BY 排序列 [ASC|DESC]]
[LIMIT 偏移量, 行数];

结构要点

  1. SELECT子句‌:必需部分,指定要查询的列

  2. FROM子句‌:必需部分,指定数据来源的表

  3. WHERE子句‌:可选,用于筛选行

  4. GROUP BY‌:可选,用于分组聚合

  5. HAVING‌:可选,对分组结果筛选

  6. ORDER BY‌:可选,指定排序方式

  7. 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 条件;

结构要点

  1. INSERT INTO‌:必需关键字,指定目标表

  2. 列名列表‌:可选,指定要插入的列

  3. VALUES‌:必需关键字,指定要插入的值

  4. 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 行数];

结构要点

  1. UPDATE‌:必需关键字,指定要更新的表

  2. SET‌:必需关键字,指定要更新的列和新值

  3. WHERE‌:可选,指定要更新的行

  4. ORDER BY‌:可选,控制更新顺序

  5. 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 行数];

结构要点

  1. DELETE FROM‌:必需关键字,指定要删除的表

  2. WHERE‌:可选,指定要删除的行

  3. ORDER BY‌:可选,控制删除顺序

  4. 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条件会清空整个表

  • 大表删除考虑使用软删除(标记删除)

  • 删除前先备份重要数据

  • 注意外键约束的影响

五、四种语句对比总结

操作必需部分主要可选子句数据影响返回内容
SELECTSELECT, FROMWHERE, GROUP BY等只读结果集
INSERTINSERT INTO, VALUES列名列表增加数据影响行数
UPDATEUPDATE, SETWHERE, ORDER BY等修改数据匹配/更改的行数
DELETEDELETE FROMWHERE, ORDER BY等删除数据删除的行数

关键区别:

  1. SELECT是只读操作,其他三种会修改数据

  2. INSERT增加新记录,UPDATE修改现有记录,DELETE移除记录

  3. 所有修改数据的操作都应谨慎使用WHERE条件

  4. 大表操作考虑使用LIMIT分批处理

标签: