1. 程式人生 > >插入資料:insert,replace

插入資料: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

除了使用自定義資料外,還可以是使用select語句查詢到的資料,作為插入的資料來源。
  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');