插入數據: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‘);
插入數據:insert,replace