10.1.同时插入多行记录
insert into 表名(字段1,字段2,...) values (值1,值2,... ), (值1, 值2,... ), ......;
10.2.插入查询的结果数据
就是将一个select语句的查询结果,插入到某个表中!
insert into 表名(字段1,字段2,...) select (xx1, xx2, ... ) ... ;
1,插入语句的字段个数,跟select语句的字段个数相等;
2,插入语句的字段类型,跟select语句的字段类型相符;
--insert into ... select 语句:
insert into user3 (user_name, user_pass) select name, '456' as pass from user2;
10.3.set语法插入数据
insert into 表名 set 字段1=值1, 字段2=值2,.... ;
这个语法只能一次插入一行数据
insert 语句的set语法形式: insert into user3 set user_name='user6', user_pass='123', edu=2, aihao=3 ;
10.4.蠕虫复制
所谓蠕虫复制,就是针对一个表的数据,进行快速的复制并插入到所需要的表中,以期在短时间内具备“大量数据”,以用于测试或其他特殊场合,比如:
1,将一个表的大量数据,复制到另一个表中;
2,将一个表的数据复制到本身表中以产生大量数据;
10.5.插入时主键冲突的解决办法
所谓主键冲突是指,当插入一条记录的时候,如果插入的记录的主键值,在现有的数据中已经存在,则此时,因为主键不能重复,因此就产生了“主键冲突”。
主键冲突的演示:
现有数据:
插入一个数据(其主键已经存在的情形):
那如果出现主键冲突,该怎么办呢?
办法1:忽略
——终止插入,数据不改变,语句不报错。
其语法为:
insert ignore into 表名 ( 字段.... ) values (值.....);
办法2:替换
——删除原纪录,插入新纪录。
其语法为:
replace into 表名 ( 字段.... ) values (值.....);
说明:此replace的用法跟insert一样,也可以插入新纪录,只是如果新纪录出现主键冲突,就会删除原纪录后,再插入该新纪录。
办法3:更新
——设置为去更新原有数据(而并不插入)。
语法为:
insert into 表名 ( 字段.... ) values (值.....) on duplicate key update XX字段=新的值;
更新类似“替换”(replace),区别是:
替换:是将新的数据完整覆盖旧的数据
更新:可以预先设定需要覆盖的旧数据