萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 數據操作 DML 完整指南:INSERT、SELECT、UPDATE、DELETE 四大核心語句

Web 開發最核心的數據增刪改查:INSERT 多種寫入姿勢、SELECT 七大子句完整語法與實戰模式、UPDATE 條件更新、DELETE 條件刪除,含INSERT ... SELECT 複製數據、多表查詢、分組統計、排序分頁、事務安全模式等實戰技巧。

一、INSERT 插入數據

1. 基本語法


INSERT [INTO] tbl_name [(col_list)] VALUES (val_list), (val_list)...;
INSERT [INTO] tbl_name SET col=val, col=val...;  -- 單行,不支持多行

2. 實戰模式


-- 全列插入(主鍵自增傳 NULL 或 0)
INSERT INTO test01_01 VALUES (NULL, 'www.111cn.net', '23', 'beij');

-- 批量插入(單條 SQL,性能最優)
INSERT INTO test01_01 VALUES 
  ('www.111cn.net', '23', 'beij'),
  ('grey', '34', 'ah');

-- 指定列插入(其餘列走默認值/NULL)
INSERT INTO test01_01 (name) VALUES ('gery'), ('mack'), ('rose');

-- SET 語法(單行)
INSERT INTO test01_01 SET name='sara';

二、INSERT ... SELECT 從查詢結果寫入


-- 結構完全一致
INSERT INTO tb_name SELECT * FROM tb_name1;

-- 僅複製指定列
INSERT INTO tb_name (col1) SELECT col1 FROM tb_name1;

限制:

  • 查詢不可含 ORDER BY
  • 目標表不可出現在 FROM 子句中(ANSI SQL 禁止)

三、SELECT 查詢大全

完整語法骨架


SELECT selection_list
FROM table_list
WHERE primary_constraint
GROUP BY grouping_columns
HAVING secondary_constraint
ORDER BY sorting_columns
LIMIT count;

順序固定,除 SELECT 外均可選。MySQL 允許無 FROM 純表達式求值。

1. 基礎查詢


SELECT * FROM test01_01;
SELECT name, age FROM test01_01;
SELECT (2+3*4.5)/2.5;  -- 無表表達式

2. 條件過濾 (WHERE)


SELECT * FROM test01_01 WHERE name='www.111cn.net';
SELECT * FROM test01_01 WHERE age>=20 AND name LIKE 'zhang%';

3. 排序 (ORDER BY)


SELECT * FROM test01_01 ORDER BY age ASC;   -- 升序(默認)
SELECT * FROM test01_01 ORDER BY age DESC;  -- 降序
SELECT * FROM test01_01 ORDER BY age DESC, name ASC;  -- 多鍵排序

4. 分組統計 (GROUP BY + 聚合函數)


-- 按 name 分組計數
SELECT name, COUNT(*) FROM test01_01 GROUP BY name;

-- 僅返回聚合列時可省略 GROUP BY,但帶非聚合列必須 GROUP BY

5. 多表查詢 (隱式內連接)


SELECT t1.name AS t1name, t1.age AS t1age,
       t2.name AS t2name, t2.age AS t2age
FROM test01_01 AS t1, test01_03 AS t2
WHERE t1.name = t2.name;

建議顯式使用 INNER JOIN ... ON,語義更清晰。

6. 分頁 (LIMIT)


SELECT * FROM test01_01 LIMIT 10;        -- 前 10 行
SELECT * FROM test01_01 LIMIT 10, 20;    -- 偏移 10,取 20 行

四、UPDATE 更新數據


UPDATE tbl_name SET col1=val1, col2=val2... [WHERE condition];
  • WHERE 可選,缺省 = 全表更新(極度危險)
  • 示例:UPDATE test01_03 SET name='www.111cn.net' WHERE age='20';

五、DELETE 刪除數據


DELETE FROM tbl_name [WHERE condition];
  • WHERE 可選,缺省 = 清空全表(極度危險)
  • 示例:DELETE FROM test01_01 WHERE age=10;
  • 清空大表優先用 TRUNCATE TABLE(DDL,無事務、無觸發器、極快)

六、事務安全模式(InnoDB)


START TRANSACTION;
UPDATE accounts SET balance=balance-100 WHERE id=1;
UPDATE accounts SET balance=balance+100 WHERE id=2;
COMMIT;  -- 或 ROLLBACK;

確保轉賬類業務原子性。

七、避坑清單

  • 字符串/日期用單引號,標識符用反引號
  • UPDATE/DELETE 無 WHERE 先 SELECT 確認
  • 批量寫入用 VALUES (...),(...) 而非循環單條
  • LIMIT 深分頁性能差,改用游標/延遲關聯
  • 生產環境嚴禁裸跑 DML,必須在事務中或有回滾預案
copyright © 萬盛學電腦網 all rights reserved