MySQL?DML基本操作示例詳解
DML 是用于操作數(shù)據(jù)庫(kù)中實(shí)際數(shù)據(jù)的 SQL 語(yǔ)句集合,主要包括四大操作:插入(INSERT)、查詢(SELECT)、更新(UPDATE)和刪除(DELETE)。
1、INSERT - 插入數(shù)據(jù)
1.1 基本語(yǔ)法
INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);
注意:
- 字段順序需與值的順序一一對(duì)應(yīng)
- 可不指定所有字段(未指定的字段將使用默認(rèn)值,如自增主鍵 id、created_at 等)
- 字符串值需用單引號(hào) ' 包裹
- 日期時(shí)間值可直接用字符串表示(如 '2023-10-01 12:00:00')
1.2 示例詳解
1.2.1 插入完整數(shù)據(jù)(所有列)
-- 假設(shè)表有 id, name, email, age 列,其中 id 是自增主鍵
INSERT INTO users (name, email, age)
VALUES ('張三', 'zhangsan@example.com', 25);1.2.2 插入部分?jǐn)?shù)據(jù)
-- 只插入 name 和 email,age 使用默認(rèn)值或 NULL
INSERT INTO users (name, email)
VALUES ('李四', 'lisi@example.com');1.2.3 一次性插入多行數(shù)據(jù)
INSERT INTO users (name, email, age)
VALUES
('王五', 'wangwu@example.com', 30),
('趙六', 'zhaoliu@example.com', 28),
('孫七', 'sunqi@example.com', 35);1.2.3 從其他表復(fù)制數(shù)據(jù)插入
-- 將臨時(shí)表中的數(shù)據(jù)插入到正式表 INSERT INTO users (name, email, age) SELECT temp_name, temp_email, temp_age FROM temp_users;
1.2.3 插入時(shí)處理重復(fù)鍵
-- 如果遇到重復(fù)的唯一鍵(如email),則更新其他字段
INSERT INTO users (name, email, age)
VALUES ('張三', 'zhangsan@example.com', 26)
ON DUPLICATE KEY UPDATE age = 26, name = '張三';
-- 或者忽略重復(fù)鍵的插入
INSERT IGNORE INTO users (name, email, age)
VALUES ('張三', 'zhangsan@example.com', 26);2、UPDATE - 更新數(shù)據(jù)
用于修改表中現(xiàn)有的記錄。
2.1 基本語(yǔ)法
UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;
注意:
- 嚴(yán)禁省略 WHERE 條件,否則會(huì)更新表中所有記錄
- 可同時(shí)更新多個(gè)字段,用逗號(hào)分隔
- 可使用函數(shù)或表達(dá)式作為值(如 updated_at = NOW())
2.2 示例詳解
2.2.1 更新單個(gè)字段
UPDATE users SET email = 'new_email@example.com' WHERE id = 1;
2.2.2 更新多個(gè)字段
UPDATE users
SET
name = '張三豐',
age = 28,
email = 'zhangsanfeng@example.com'
WHERE id = 1;2.2.3 基于原值更新
-- 年齡增加1歲 UPDATE users SET age = age + 1 WHERE id = 1; -- 字符串拼接 UPDATE users SET name = CONCAT(name, '先生') WHERE gender = '男';
2.2.4 使用子查詢更新
-- 將有訂單的用戶標(biāo)記為活躍用戶 UPDATE users SET is_active = TRUE WHERE id IN (SELECT DISTINCT user_id FROM orders);
2.2.5 批量更新
-- 使用 CASE 條件更新
UPDATE users
SET age_group =
CASE
WHEN age < 20 THEN '青少年'
WHEN age BETWEEN 20 AND 40 THEN '青年'
ELSE '中年及以上'
END;3、DELETE - 刪除數(shù)據(jù)
用于從表中刪除記錄。
3.1 基本語(yǔ)法
DELETE FROM table_name WHERE condition;
3.2 示例詳解
3.2.1 刪除特定記錄
DELETE FROM users WHERE id = 1;
3.2.2 刪除多條記錄
-- 刪除所有未激活的用戶 DELETE FROM users WHERE is_active = FALSE; -- 刪除年齡大于100的用戶 DELETE FROM users WHERE age > 100;
3.2.3 使用子查詢刪除
-- 刪除沒(méi)有訂單的用戶 DELETE FROM users WHERE id NOT IN (SELECT DISTINCT user_id FROM orders);
3.2.4 清空表(慎用?。?/h4>
-- 刪除所有記錄
DELETE FROM users;
-- 更快的清空表方式(不可回滾)
TRUNCATE TABLE users;
-- 刪除所有記錄 DELETE FROM users; -- 更快的清空表方式(不可回滾) TRUNCATE TABLE users;
4、SELECT - 查詢數(shù)據(jù)
用于從數(shù)據(jù)庫(kù)中查詢數(shù)據(jù),這是最復(fù)雜和最常用的 DML 語(yǔ)句。
4.1 基本語(yǔ)法
SELECT column1, column2, ... FROM table_name [WHERE condition] [ORDER BY column1 [ASC|DESC], column2 [ASC|DESC], ...] [GROUP BY column1, column2, ...] [HAVING condition] [LIMIT number];
4.2 示例詳解
4.2.1 查詢所有列
SELECT * FROM users;
4.2.2 查詢特定列
SELECT name, email FROM users;
4.2.3 使用別名
SELECT
name AS 姓名,
email AS 郵箱,
age AS 年齡
FROM users;4.2.4 使用 WHERE 條件過(guò)濾
-- 簡(jiǎn)單條件 SELECT * FROM users WHERE age > 25; -- 多條件組合 SELECT * FROM users WHERE age > 25 AND name LIKE '張%'; -- 使用 IN SELECT * FROM users WHERE age IN (25, 30, 35); -- 使用 BETWEEN SELECT * FROM users WHERE age BETWEEN 25 AND 35; -- 使用 IS NULL SELECT * FROM users WHERE email IS NULL;
4.2.4 排序結(jié)果
-- 單字段排序 SELECT * FROM users ORDER BY age DESC; -- 多字段排序 SELECT * FROM users ORDER BY age DESC, name ASC;
4.2.5 限制結(jié)果集
-- 前10條記錄 SELECT * FROM users LIMIT 10; -- 分頁(yè)查詢:從第20條開(kāi)始,取10條 SELECT * FROM users LIMIT 20, 10; -- 或者使用新語(yǔ)法 SELECT * FROM users LIMIT 10 OFFSET 20;
4.2.6 去重查詢
-- 獲取所有不同的年齡 SELECT DISTINCT age FROM users;
4.2.7 聚合函數(shù)
-- 計(jì)數(shù)
SELECT COUNT(*) FROM users;
SELECT COUNT(DISTINCT age) FROM users;
-- 求和、平均、最大、最小
SELECT
COUNT(*) AS 總?cè)藬?shù),
AVG(age) AS 平均年齡,
MAX(age) AS 最大年齡,
MIN(age) AS 最小年齡,
SUM(age) AS 年齡總和
FROM users;4.2.8 分組查詢
-- 按年齡分組統(tǒng)計(jì)
SELECT
age,
COUNT(*) AS 人數(shù)
FROM users
GROUP BY age;
-- 分組后篩選
SELECT
age,
COUNT(*) AS 人數(shù)
FROM users
GROUP BY age
HAVING COUNT(*) > 5;4.2.9 連接查詢
-- 內(nèi)連接
SELECT
u.name,
o.order_id,
o.order_date
FROM users u
INNER JOIN orders o ON u.id = o.user_id;
-- 左連接
SELECT
u.name,
o.order_id
FROM users u
LEFT JOIN orders o ON u.id = o.user_id;
-- 多表連接
SELECT
u.name,
p.product_name,
oi.quantity
FROM users u
JOIN orders o ON u.id = o.user_id
JOIN order_items oi ON o.order_id = oi.order_id
JOIN products p ON oi.product_id = p.id;4.2.10 子查詢
-- 在 WHERE 中使用子查詢
SELECT * FROM users
WHERE age > (SELECT AVG(age) FROM users);
-- 在 FROM 中使用子查詢(派生表)
SELECT *
FROM (
SELECT name, age FROM users WHERE age > 25
) AS adult_users;
-- 在 SELECT 中使用子查詢
SELECT
name,
age,
(SELECT COUNT(*) FROM orders WHERE user_id = users.id) AS order_count
FROM users;到此這篇關(guān)于MySQL DML基本操作示例詳解的文章就介紹到這了,更多相關(guān)MySQL DML操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mysql創(chuàng)建通用設(shè)備管理信息系統(tǒng)數(shù)據(jù)庫(kù)
下面通過(guò)圖文并茂的方式給大家介紹通用設(shè)備管理信息系統(tǒng)數(shù)據(jù)庫(kù)的創(chuàng)建過(guò)程,感興趣的朋友一起學(xué)習(xí)2016-04-04
MySQL 不允許從遠(yuǎn)程訪問(wèn)的解決方法
MySQL 不允許從遠(yuǎn)程訪問(wèn)的原因有很多除了下面的方法,還有需要看服務(wù)器安全設(shè)置禁止訪問(wèn)本機(jī)的3306端口。2010-03-03
MySQL數(shù)據(jù)庫(kù)定時(shí)任務(wù)舉例講解
最近項(xiàng)目里面的后臺(tái)需要用到定時(shí)任務(wù),而MySQL從5.0開(kāi)始自帶了定時(shí)事件操作,所以學(xué)習(xí)下并做下記錄,下面這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫(kù)定時(shí)任務(wù)的相關(guān)資料,需要的朋友可以參考下2023-06-06
MySQL使用binlog2sql工具實(shí)現(xiàn)在線恢復(fù)數(shù)據(jù)功能
binlog2sql 是大眾點(diǎn)評(píng)開(kāi)源的一款用于解析 MySQL binlog 的工具,根據(jù)不同選項(xiàng),可以得到原始SQL、回滾SQL等,下面我們就來(lái)看看如何使用binlog2sql實(shí)現(xiàn)在線恢復(fù)數(shù)據(jù)功能吧2025-03-03

