MySQL增刪改查之增insert、replace
一、INSERT語句
帶有values子句的insert語句,用於數據的增加
語法:
INSERT [INTO] tbl_name[(col_name,...)] {VALUES | VALUE} (expr ,...),(...),...
①用來把一個新行插入到表中
②為和其它數據庫保持一致,不要省略INTO關鍵字以及使用VALUES而不是value關鍵字
③插入一行時,要求必須對該行所有的列賦值。但是賦值方式可以是顯式賦值(直接給出值)和隱式賦值(由MySQL自動賦值)
基本格式:
insert into <表名> (列名1,列名2,列名3,......) values (值1,值2,值3,......);
解析:
①(列名1,列名2,列名3,......)稱為 列清單
②(值1,值2,值3,......)稱為 值清單
③列清單和值清單中的列和值必須相互對應(數據類型)
1、在表名后面列出所有的列名
示例:插入一個新的球隊到teams表中
mysql> INSERT INTO teams(teamno,playerno,division) VALUES(3,6,'third');
2、在表名后面省略所有的列名
要求:VALUES子句中的值必須按照列在表結構中的順序來一一賦值
mysql> INSERT INTO teams VALUES(4,104,'third');
3、在表名后面只列出部分的列名
注意:所有沒有明確賦值的列,將通過隱式賦值自動得到null值
mysql> insert into <表名> (列名1,列名3......) values (值1,值3,......);
添加一個新行數據,沒有指定賦值的列,結果集改行數據的列名2處隱式賦null值
當然,可使用字面量NULL給列賦空值
mysql> insert into <表名> (列名1,列名2,列名3) values (值1,null,值3);
4、VALUES子句中除了字面量,還可以使用函數、計算、標量子查詢等
INSERT INTO <表名1>(列1,列2)
VALUES((SELECT count(*) FROM 表名2),
(SELECT sum(列名) FROM 表名3));
注意:子查詢必須放在單獨的小括號中
一條INSERT語句可以插入多個行:
示例:添加4個新的球隊
INSERT INTO teams(teamno, captainno,division)
VALUES (6,7,'third'),
(7,27,'fourth'),
(8,39,'fourth'),
(9,112,'sixth');
注意:這種語法只要有1行出錯,則插入全部取消
INSERT語句中可以使用IGNORE選項來當INSERT語句出錯時,不顯示錯誤消息:但是INSERT語句不會執行

5、從其他表中復制數據:帶子查詢的INSERT語句,實現從其他表中(可按條件)復制數據進入目標表
語法:
INSERT [INTO] tbl_name[(col_name,...)]
SELECT ...
注意:
①如果在表名后面列出了列名,那么列的數量和數據類型必須和子查詢的select列表相匹配
②如果在表名后面沒有列出了列名,默認就是直接復制
insert.... select.... 語句常在需要進行數據表的備份時使用
無條件復制:將一個表中的原始數據記錄,插入到另一個表中
按條件copy:將一個表查詢出來的進行聚合操作之后的記錄,插入到目標表中

當然,可以把本表中的行再次添加到本表中,但是必須注意主鍵值不要重復。
二、REPLACE語句:替代已有的行
INSERT語句的一個變種;
當添加新行時:
①如果主鍵值重復,那么就覆蓋表中已有的行
②如果沒有主鍵值重復,則插入該行
語法:
REPLACE [INTO] tbl_name [(col_name,...)]
VALUES (expr,...),(...),...
或者
REPLACE [INTO] tbl_name [(col_name,...)]
SELECT ...

