close
這邊會介紹 INSERT INTO 的用法,包含新增一筆、新增多筆、從其它表匯入、從其它表匯入再加上預設值。
INSERT INTO 的用法如下:
一次新增一筆:
/* 照表欄位順序給值 */ INSERT INTO `表名稱` VALUES (`欄位1值`, `欄位2值`, `欄位3值`, ...); /* 也可指定欄位給值 */ INSERT INTO `表名稱` (`欄位1`, `欄位2`, `欄位3`) VALUES (`欄位1值`, `欄位2值`, `欄位3值`);
一次新增多筆:
/* 照表欄位順序給值 */ INSERT INTO `表名稱` VALUES (`欄位1值`, `欄位2值`, `欄位3值`, ...), (`欄位1值`, `欄位2值`, `欄位3值`, ...), (`欄位1值`, `欄位2值`, `欄位3值`, ...); /* 也可指定欄位給值 */ INSERT INTO `表名稱` (`欄位1`, `欄位2`, `欄位3`) VALUES (`欄位1值`, `欄位2值`, `欄位3值`), (`欄位1值`, `欄位2值`, `欄位3值`), (`欄位1值`, `欄位2值`, `欄位3值`);
一次新增多筆,從其它表取值:
/* 照表欄位順序給值 */ INSERT INTO `表名稱` (SELECT `欄位1`, `欄位2`, `欄位3`, ... FROM `表名稱`); /* 也可指定欄位給值 */ INSERT INTO `表名稱` (`欄位1`, `欄位2`, `欄位3`) (SELECT `欄位1`, `欄位2`, `欄位3` FROM `表名稱`); /* 若欄位不一致或者欄位名稱不一致等其它問題, 也可以直接給值 */ /* 照表欄位順序給值 */ INSERT INTO `表名稱` (SELECT `欄位1`, 直接給值2, `欄位3`, ... FROM `表名稱`); /* 也可指定欄位給值 */ INSERT INTO `表名稱` (`欄位1`, `欄位2`, `欄位3`) (SELECT `欄位1`, 直接給值2, `欄位3` FROM `表名稱`);
以下為示範範例:
例如,我有兩個資料庫資料如下:
分別為表 "user",有 5 筆資料,欄位有編號、使用者名稱,編號為 AUTO_INCREMENT,表示編號會自動累加。
`id` `name` 1 Bill 2 Bob 3 Carl 4 David 5 Tom
分別為表 "player",沒有資料,欄位有編號、使用者名稱、玩家遊戲人物等級、玩家遊戲人物名稱,編號為 AUTO_INCREMENT,表示編號會自動累加。
`id` `name` `lv` `role_name`
一次新增一筆:
/* 照表欄位順序給值, 因為這邊沒有指定欄位, 所以每個欄位都必須給值, 就算編號會自動累加, 我們也不能跳過, 必須給予 NULL 的值 */ INSERT INTO `player` VALUES (NULL, 'player1', 1, 'role001'); /* 以下為執行後結果 */ `id` `name` `lv` `role_name` 1 player1 1 role001
/* 也可指定欄位給值, 給值的順序跟指定欄位的順序是一致的 */ INSERT INTO `player` (`name`, `lv`, `role_name`) VALUES ('player2', 1, 'role002'); /* 以下為執行後結果 */ `id` `name` `lv` `role_name` 1 player1 1 role001 2 player2 1 role002
/* 指定欄位順序打亂 */ INSERT INTO `player` (`lv`, `name`, `role_name`) VALUES (1, 'player3', 'role003'); /* 以下為執行後結果 */ `id` `name` `lv` `role_name` 1 player1 1 role001 2 player2 1 role002 3 player3 1 role003
一次新增多筆:
/* 照表欄位順序給值, 因為這邊沒有指定欄位, 所以每個欄位都必須給值, 就算編號會自動累加, 我們也不能跳過, 必須給予 NULL 的值 */ INSERT INTO `player` VALUES (NULL, 'player4', 1, 'role004'), (NULL, 'player5', 1, 'role005'), (NULL, 'player6', 1, 'role006'); /* 以下為執行後結果 */ `id` `name` `lv` `role_name` 1 player1 1 role001 2 player2 1 role002 3 player3 1 role003 4 player4 1 role004 5 player5 1 role005 6 player6 1 role006
/* 也可指定欄位給值, 給值的順序跟指定欄位的順序是一致的 */ INSERT INTO `player` (`name`, `lv`, `role_name`) VALUES ('player7', 1, 'role007'), ('player8', 1, 'role008'), ('player9', 1, 'role009'); /* 以下為執行後結果 */ `id` `name` `lv` `role_name` 1 player1 1 role001 2 player2 1 role002 3 player3 1 role003 4 player4 1 role004 5 player5 1 role005 6 player6 1 role006 7 player7 1 role007 8 player8 1 role008 9 player9 1 role009
一次新增多筆,從其它表取值:
/* 照表欄位順序給值, 因為兩張表的欄位不一致所以這邊我們直接給值 */ INSERT INTO `player` (SELECT NULL, `name`, 1, 'roleName' FROM `user`); /* 以下為執行後結果 */ `id` `name` `lv` `role_name` 1 player1 1 role001 2 player2 1 role002 3 player3 1 role003 4 player4 1 role004 5 player5 1 role005 6 player6 1 role006 7 player7 1 role007 8 player8 1 role008 9 player9 1 role009 10 Bill 1 roleName 11 Bob 1 roleName 12 Carl 1 roleName 13 David 1 roleName 14 Tim 1 roleName
/* 也可指定欄位給值 */ INSERT INTO `player` (`name`) (SELECT `name` FROM `user`); /* 以下為執行後結果, 因為其它欄位我們沒有給值, 所以預設為空的 */ `id` `name` `lv` `role_name` 1 player1 1 role001 2 player2 1 role002 3 player3 1 role003 4 player4 1 role004 5 player5 1 role005 6 player6 1 role006 7 player7 1 role007 8 player8 1 role008 9 player9 1 role009 10 Bill 1 roleName 11 Bob 1 roleName 12 Carl 1 roleName 13 David 1 roleName 14 Tim 1 roleName 15 Bill 0 16 Bob 0 17 Carl 0 18 David 0 19 Tim 0
/* 照指定欄位給值, 因為欄位不一致所以這邊我們直接給值 */ INSERT INTO `player` (`name`, `lv`, `role_name`) (SELECT `name`, 1, `name` FROM `user`); /* 以下為執行後結果, 因為 `role_name` 欄位我們一樣給 `name` 的值, 所以名稱會跟 `name` 一樣 */ `id` `name` `lv` `role_name` 1 player1 1 role001 2 player2 1 role002 3 player3 1 role003 4 player4 1 role004 5 player5 1 role005 6 player6 1 role006 7 player7 1 role007 8 player8 1 role008 9 player9 1 role009 10 Bill 1 roleName 11 Bob 1 roleName 12 Carl 1 roleName 13 David 1 roleName 14 Tim 1 roleName 15 Bill 0 16 Bob 0 17 Carl 0 18 David 0 19 Tim 0 20 Bill 1 Bill 21 Bob 1 Bob 22 Carl 1 Carl 23 David 1 David 24 Tim 1 Tim
文章標籤
全站熱搜