数据操纵语言(Data Manipulation Language,简称DML)是用于操作数据库中数据的核心工具,MySQL作为最流行的开源关系型数据库之一,提供了丰富而强大的DML语句。本文我将全面分析MySQL中DML语句的各种用法、最佳实践以及常见问题解决方案,帮你全面掌握数据增删改查的核心技能。
DML是SQL语言的一个重要组成部分,主要用于对数据库中的数据进行操作,包括插入、更新和删除等操作。与数据定义语言(DDL)不同,DML不涉及数据库结构的修改,而是专注于数据本身的处理。
MySQL中的主要DML语句包括:
这些语句是数据库操作的基础,几乎所有的数据处理场景都离不开它们。
INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);
示例:
INSERT INTO users (username, email, age)
VALUES ('john_doe', '[email protected]', 30);
INSERT INTO table_name (column1, column2, ...)
VALUES
(value1_1, value1_2, ...),
(value2_1, value2_2, ...),
...;
示例:
INSERT INTO users (username, email, age)
VALUES
('alice', '[email protected]', 25),
('bob', '[email protected]', 35);
INSERT INTO target_table (column1, column2, ...)
SELECT column1, column2, ...
FROM source_table
WHERE condition;
示例:
INSERT INTO user_backup (username, email)
SELECT username, email
FROM users
WHERE age > 30;
当插入记录的唯一键冲突时执行更新操作:
INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...)
ON DUPLICATE KEY UPDATE
column1 = value1,
column2 = value2,
...;
示例:
INSERT INTO users (id, username, email)
VALUES (1, 'john_doe', '[email protected]')
ON DUPLICATE KEY UPDATE
email = '[email protected]';
select
查询语句属于SQL语句,这里仅作简单涉入,详细分解请看下篇文章
SELECT column1, column2, ...
FROM table_name
WHERE condition
ORDER BY column1 [ASC|DESC], column2 [ASC|DESC], ...
LIMIT offset, count;
示例:
SELECT username, email
FROM users
WHERE age > 25
ORDER BY username ASC
LIMIT 10;
SELECT table1.column1, table2.column2, ...
FROM table1
JOIN table2 ON table1.key = table2.key
WHERE condition;
示例:
SELECT users.username, orders.order_number
FROM users
JOIN orders ON users.id = orders.user_id
WHERE users.age > 30;
SELECT column1, column2, ...
FROM table_name
WHERE column1 IN (SELECT column1 FROM another_table WHERE condition);
示例:
SELECT username
FROM users
WHERE id IN (SELECT user_id FROM orders WHERE amount > 1000);
SELECT COUNT(column1), SUM(column2), AVG(column3), ...
FROM table_name
WHERE condition;
示例:
SELECT COUNT(*) AS total_users, AVG(age) AS average_age
FROM users
WHERE age > 25;
SELECT column1, COUNT(column2)
FROM table_name
WHERE condition
GROUP BY column1
HAVING COUNT(column2) > 10;
示例:
SELECT department, COUNT(*) AS employee_count
FROM employees
GROUP BY department
HAVING employee_count > 5;
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
示例:
UPDATE users
SET email = '[email protected]', age = 31
WHERE username = 'john_doe';
UPDATE table1
JOIN table2 ON table1.key = table2.key
SET table1.column = value, table2.column = value
WHERE condition;
示例:
UPDATE users
JOIN user_profiles ON users.id = user_profiles.user_id
SET users.age = 32, user_profiles.last_updated = NOW()
WHERE users.username = 'john_doe';
UPDATE table_name
SET column = (SELECT column FROM another_table WHERE condition)
WHERE condition;
示例:
UPDATE orders
SET status = 'completed'
WHERE order_id IN (SELECT order_id FROM payments WHERE paid = 1);
DELETE FROM table_name
WHERE condition;
示例:
DELETE FROM users
WHERE username = 'john_doe';
DELETE table1, table2
FROM table1
JOIN table2 ON table1.key = table2.key
WHERE condition;
示例:
DELETE users, user_profiles
FROM users
JOIN user_profiles ON users.id = user_profiles.user_id
WHERE users.age < 18;
DELETE FROM table_name; -- 逐行删除,保留表结构
-- 或
TRUNCATE TABLE table_name; -- 快速清空表,重置自增ID
若这篇内容帮到你,动动手指支持下!关注不迷路,干货持续输出!
ヾ(´∀ ˋ)ノヾ(´∀ ˋ)ノヾ(´∀ ˋ)ノヾ(´∀ ˋ)ノヾ(´∀ ˋ)ノ