首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> SQL 基礎

SQL INSERT INTO 語句完整教學:插入資料兩種語法、自動遞增與指定欄位實戰

     編輯:SQL 基礎

SQL INSERT INTO 插入資料完整教學


INSERT INTO 用於向資料表新增資料列。提供兩種語法形式,支援指定欄位、預設值、自動遞增等彈性機制。


兩種語法形式

形式 1:僅提供值(需按欄位順序、全欄位)

INSERT INTO table_name
VALUES (value1, value2, value3, ...);
  • 必須對應表定義的所有欄位順序與數量。
  • 不靈活,表結構變更易出錯,不建議生產環境使用。

形式 2:指定欄位與值(推薦)

INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
  • 可略過有預設值、自動遞增、允許 NULL 的欄位。
  • 欄位順序可自訂,與 VALUES 順序一一對應即可。
  • 程式碼可讀性高,維護容易。

演示資料庫:RUNOOB 範例資料

Websites 表(插入前)

+----+--------------+---------------------------+-------+---------+
| id | name         | url                       | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 1  | Google       | https://www.google.cm/    | 1     | USA     |
| 2  | 淘寶         | https://www.taobao.com/   | 13    | CN      |
| 3  | 菜鳥教程     | https://www.runoob.com/    | 4689  | CN      |
| 4  | 微博         | https://weibo.com/         | 20    | CN      |
| 5  | Facebook     | https://www.facebook.com/ | 3     | USA     |
+----+--------------+---------------------------+-------+---------+

實戰範例

範例 1:指定四欄位插入(id 為自動遞增,略過)

INSERT INTO Websites (name, url, alexa, country)
VALUES ('百度', 'https://www.baidu.com/', '4', 'CN');

執行後讀取 Websites 表:

新資料 id 自動分配為 6。

範例 2:僅插入三欄位(alexa 略過,將用預設值或 NULL)

INSERT INTO Websites (name, url, country)
VALUES ('stackoverflow', 'https://stackoverflow.com/', 'IND');

執行後讀取 Websites 表:

新資料 id=7,alexa 為 NULL(或預設值)。


自動遞增欄位(Identity / Auto Increment)

  • 主鍵常設為自動遞增,插入時勿指定值,讓資料庫自動分配。
  • MySQL:AUTO_INCREMENT;SQL Server:IDENTITY(1,1);PostgreSQL:SERIAL / IDENTITY;Oracle:SEQUENCE + 觸發器或 12c IDENTITY。
  • 若需指定值(如資料遷移),需開啟 SET IDENTITY_INSERT ON(SQL Server)或類似機制。

批次插入(多列單一語句)

INSERT INTO Websites (name, url, alexa, country)
VALUES
  ('SiteA', 'https://a.com', '100', 'US'),
  ('SiteB', 'https://b.com', '200', 'UK'),
  ('SiteC', 'https://c.com', '300', 'JP');
  • 單一語句插入多列,效能遠優於多次單列 INSERT。
  • MySQL 建議單次不超過 1000-5000 列,視 max_allowed_packet 而定。

INSERT ... SELECT / ON DUPLICATE KEY UPDATE

  • INSERT INTO target SELECT ... FROM source:跨表複製,詳見 INSERT INTO SELECT 章節。
  • MySQL ON DUPLICATE KEY UPDATE:主鍵/唯一鍵衝突時轉更新,實現 Upsert。
  • PostgreSQL ON CONFLICT DO UPDATE、SQL Server MERGE、Oracle MERGE 為對應功能。

最佳實務總結

  1. 永遠使用「指定欄位」形式(形式 2)。
  2. 自動遞增主鍵勿手動指定。
  3. 批次插入優化大量寫入效能。
  4. 插入前驗證資料類型、長度、約束符合度。
  5. 重要業務採用交易確保原子性。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved