※ 把record加到table有兩種方式:
- VALUES
• SELECT
※ 語法
- INSERT INTO VALUES 語法:

- Record 代表一組值的集合,每個值對應到表格中的一個欄位(column)。
- INSERT INTO 語法用來指定要插入資料的表格。
- 需要提供一個欄位列表(column list)和一個值列表(value list)。
- 語法執行完畢後,會將一個新的記錄插入到指定的表格中。
- 可以一次插入多個記錄,只需用逗號(
,
)分隔不同的值列表。
- INSERT INTO SELECT 語法:
INSERT INTO SELECT
語法在實務中經常用來創建總結表格(summary table),特別是當需要結合不同的表格時。使用 JOIN
語法可以將多個表格中的數據結合起來,然後使用 INSERT INTO SELECT
將這些數據插入到新的表格中。

INSERT INTO table_name(colum_list)
SELECT
select_list
FROM
another_table
WHERE
condition
說明
- INSERT INTO table_name (column_list): 指定要插入數據的目標表格和欄位列表。
- SELECT select_list FROM another_table WHERE condition: 執行SELECT查詢,從另一個表格中選擇數據,並根據條件過濾數據。
※ 實例
SUMMARY(計算每個歌單的歌數⽬)
// WITH AS(…)是一個 CTE,用來計算每個歌單中的歌曲數量。
WITH list_id_to_song_cnt AS (
SELECT list_id, COUNT(song_name) AS COUNT // 從 song 表中選擇 list_id 和歌曲數量。
FROM song // 資料來源是 song 表。
GROUP BY list_id // 根據 list_id 分組,計算每個歌單中的歌曲數量。
)
// 將計算結果插入到 list_with_song_cnt 表中。
INSERT INTO list_with_song_cnt(list_id, list_name, user_id, description, count)
// 從 list 表中選擇歌單ID、歌單名稱和歌曲數量。
SELECT t1.list_id, t1.list_name, IFNULL(t2.count, 0) // 如果 t2.count 為空,則返回0。
FROM list AS t1 // 資料來源是 list 表,並將其命名為 t1。
// 使用左連接將 list 表和CTE list_id_to_song_cnt 連接起來,根據 list_id 進行匹配。
LEFT JOIN list_id_to_song_cnt AS t2 ON t1.list_id = t2.list_id
總結
- 計算每個歌單中的歌曲數量。
- 將每個歌單的ID、名稱、使用者ID、描述和歌曲數量插入到
list_with_song_cnt
表中。如果某個歌單中沒有歌曲,則顯示0。

※ INSERT IGNORE(插入忽略)
INSERT IGNORE
語法在插入數據時,如果遇到重複鍵(如唯一鍵或主鍵)或其他約束違反的情況,會忽略該行的插入操作,而不是終止整個插入過程,也不會報錯。這對於避免重複插入相同數據非常有用。
※ 語法

說明
- INSERT IGNORE INTO table (column_list):
- INSERT IGNORE INTO: 指定要插入數據的目標表格,並使用 IGNORE 關鍵字來忽略可能引發錯誤的行。
- table: 目標表格的名稱。
- column_list: 要插入數據的欄位列表。
- VALUES (value_list1), (value_list2):
- VALUES: 指定要插入的數據值。
- (value_list1), (value_list2): 每個 value_list 代表一行數據,包含與 column_list 對應的值。
※ 實例
假設我們有一個 users
表,包含 id
和 email
欄位,並且 email
欄位具有唯一約束:
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
email VARCHAR(130) NOT NULL UNIQUE
);
我們嘗試插入兩行數據,其中一行數據的 email
欄位值重複:
INSERT IGNORE INTO users (email)
VALUES ('john.doe@gmail.com'),
('john.doe@gmail.com');
在這種情況下,INSERT IGNORE
將忽略重複的行並插入有效的行,而不會引發錯誤。