高级数据操作-新增数据
多数据插入
只要写一次insert,可以插入多条数据
基本语法
insert into 表名 [(字段列表)] values (值列表), (值列表)...; create table my_student( id int primary key auto_increment, name varchar(10) ); insert into my_student (name) values ('张三'), ('李四'), ('王五'); mysql> select * from my_student; +----+--------+ | id | name | +----+--------+ | 1 | 张三 | | 2 | 李四 | | 3 | 王五 | +----+--------+
主键冲突
insert into my_student (id, name) values (1, '张飞'); ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
1、主键冲突更新
如果插入过程中主键冲突,那么采用更新方式
insert into 表名 [(字段列表)] on duplicate key update 字段=新值; insert into my_student (id, name) values (1, '张飞') on duplicate key update name = '张飞'; mysql> select * from my_student; +----+--------+ | id | name | +----+--------+ | 1 | 张飞 | | 2 | 李四 | | 3 | 王五 | +----+--------+
2、主键冲突替换
replace into 表名 [(字段列表)] values (值列表); replace into my_student (id, name) values (1, '刘备'); mysql> select * from my_student; +----+--------+ | id | name | +----+--------+ | 1 | 刘备 | | 2 | 李四 | | 3 | 王五 | +----+--------+
蠕虫复制
一分为二,成倍增加
从已有的数据中获取数据,并且插入到数据表中
insert into 表名 [(字段列表)] select */字段列表 from 表名; insert into my_student (name) select name from my_student; mysql> select * from my_student; +----+--------+ | id | name | +----+--------+ | 1 | 刘备 | | 2 | 李四 | | 3 | 王五 | | 4 | 刘备 | | 5 | 李四 | | 6 | 王五 | +----+--------+
注意:
蠕虫复制通常是重复数据,可以短期内复制大量的数据,从而测试表的压力
需要注意主键冲突