插入資料:insert,replace
*insert高階用法*
1、語法:insert into tbname(欄位列表) values 值列表;
1.1可以不將所有的欄位都插入資料。如果說需要完成部分欄位的插入,需要必須存在欄位列表。
沒有插入的欄位,使用預設值填充。
insert into a_table (name) values ('jack');
1.2如果插入部分欄位,可以使用下面的set語句,不同欄位用逗號隔開:
insert into a_table set a_id=7,a_name='rose';
1.3值列表的語法,可以一次性插入多條資料,每條資料採用記錄構造符 “括號”完成即可。
insert into a_table (a_name,a_part) values ('老劉','設計部'),('老鐵','財務部');
【問題】插入資料時,如果主鍵衝突會如何?
答:預設有主鍵約束,不會插入成功,但是可以在insert語法內,控制在主鍵衝突時,改成執行 更新 操作。
相當於,更新所衝突主鍵欄位相對應的更新值。update 後不跟set
例子:
MariaDB [test]> insert into a_table (a_id,a_name) values (13,'aly');
ERROR 1062 (23000): Duplicate entry '13' for key 'PRIMARY' #a_id為主鍵。
MariaDB [test]> insert into a_table (a_id,a_name) values (13,'aly')
-> on duplicate key update a_name='bob'; #把a_id=13中的a_name欄位更新成bob。
【插入資料失敗流程】
判斷是否插入資料成功--->>失敗(主鍵衝突|唯一索引衝突)--->>更新
2、插入的資料來源:
2.1
insert into a_table (a_name,a_part) select b_name,b_part from b_table;
2.2資料可以來源於其它資料表,要求:欄位數量和型別一致即可。
insert into a_table (a_name,a_part) select name,sex from stu_info;
3、通過強制使用default關鍵字,或者default()函式,使用預設值:
insert into teacher values
(13,'alex','male',default),
(14,'bob','male',default(days));
*replace替換高階用法*
1、語法:replace into,與on duplicate key update,非常相似,只要主鍵衝突就替換,不衝突就直接插入資料。
例子:replace into b_table values (2,'laowang','mishubu');