插入数据: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');