题解 向数据库中插入数据
批量插入数据,不使用replace操作
http://www.nowcoder.com/practice/153c8a8e7805400ba8e384e03acc6b3e
My SQL 中常见的三种插入数据的方式: insert into/replace into/insert ignore into
1. insert into
最常见的插入数据的语句,语句格式:
# 插入一行数据
insert into 表名(column1,column2,...) values(values for col1,values for col2,...)
# 插入多行数据
insert into 表名(column1,column2,...)
values(values for col1,values for col2,...), #第一行
values(values for col1,values for col2,...), #第二行
...
# 表名后的column可省略 values按照column顺序插入
insert into 在执行时 数据库会检查主键,如果出现重复会报错;
2. replace into
replace into 在尝试将数据插入表中时,会有一下两种情况:
- 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。 (替换)
- 如果主键/唯一索引没有重复,则直接插入数据,此时等同于insert into
语句格式:
replace into 表名(column1,column2,...)
values(values for col1,values for col2,...),
values(values for col1,values for col2,...),
...
replace into 在使用时需注意:插入数据的表必须有主键或者是唯一索引,否则,replace into 会直接插入数据,这将导致表中出现重复的数据
3. insert ignore into
使用insert into插入数据时,若主键重复,insert语句会报错,此时可以使用insert ignore into语句,其作用与insert into 相同,但若出现重复数据(主键或唯一标识索引相同)insert 会忽略新插入的数据
#创建员工信息表
CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));
insert into employees values (001,'1998-10-12','Vivi','Green','F','2020-10-12')
#插入数据
insert into employees values (001,'1998-10-12','Vivi','Green','F','2020-10-12')
-- 报错
insert ignore into employees values (001,'1998-10-12','Vivi','Green','F','2020-10-12')
--运行成功 但由于数据重复 忽略这条新数据(原表仍保留之前那一条数据)