這邊會介紹 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
 

 

 

arrow
arrow
    文章標籤
    SQL MySQL INSERT INTO
    全站熱搜

    岳 發表在 痞客邦 留言(0) 人氣()