更新时间:2022-05-19 10:39:00
命令:
insert into 表名(列名1,列名2...列名n) values (属性值11,属性值12...属性值1n),(属性值21,属性值22...属性值2n), (属性值n1,属性值n2...属性值nn);
只插入 name值吧。 其他值均用 自动自动,默认约束值,和默认值来填充。
insert into user(name) values('张三'),('李四'),('王二');
批量插入时,相比较单条数据插入,多了一些其他的信息。
Records: 插入的记录条数
Duplicates: 插入时被忽略的记录,如 主键重复错误
Warnings: 有问题的数据值,如数据类型转换错误
三.二 插入部分有错误的数据
用 name 和age 吧。 接下来的自动增长值,应该是 111
插入的数据,有正确的,也有错误的, 看怎么处理。
insert into user(name,age) values ('aa',24),('bb',24),(null,25),(null,26),('cc',24),('cc','年龄');
会发现,仍然将错误的数据填入进去了。要特别记忆,是插入进去了,并不是回滚了 全部没有数据,也不是只插入正确的数据,不插入错误的数据。 最后一条的 (‘cc’,‘年龄’) 时,年龄用 0进行替换。 (null,25),(null,26) 的name值 被 空字符串 替换。
在 用navicat 等数据库工具 批量导入表结构和表数据时,常常会发生这种情况。
命令:
insert into 要插入数据的表名A(A表里列名1, A表里列名2...A表里列名n) select 查询表B列名1,查询表列名2...查询表B列名n from 查询表B [where 条件 [order by 排序]]
其中, 一定要保证:
1 .(A表里列名1, A表里列名2…A表里列名n) 可以正确的插入到数据库里, 如 user中 name是非空约束,那么在 列表里面一定要有 name列进行插入。
2 . 两个表 A 与 B 不一定要是完全相同的表 (列一样,并且列顺序一样),只要保证 (A表里列名1, A表里列名2…A表里列名n) 与 查询表B列名1,查询表列名2…查询表B列名n 列表数目一致,并且数据类型顺序一致,列名存储长度 表名A>表名B. 不需要列名一样。
3 . 其实,上面的 命令 就相当于第三部分的命令一样, 也属于 批量插入表。
insert into 要插入数据的表名A(A表里列名1, A表里列名2...A表里列名n) values (查询B表 第一条结果), (查询B表 第二条结果) ...(查询B表 第n条结果)
新创建一个表 newUser 表, 里面只有 user 表的三个类似属性 id,name,age, 但在newUser 表里面叫 id,newName,newAge . 其中newName的长度是30,不是20.
1 .创建表
create table newUser( id int(11) primary key auto_increment, newName varchar(30), newAge int(3) );
2 .插入数据
insert into newUser(id,newName,newAge) select id,name,age from user;
3 .查询新表的数据
发现,将所有的 记录都插入到 newUser 表里面了。
四.二 插入有部分数据错误的结果集
新创建一个表 newUser2 表, 里面只有 user 表的三个类似属性 id,name,age, 但在newUser2 表里面叫 id,newName,newAge . 其中newName的长度是30,不是20,并且 newName是唯一约束。 (很显然,user表中name有重复的名称,插入时会触犯 newName 唯一性约束)
1 .创建表
create table newUser2( id int(11) primary key auto_increment, newName varchar(30) unique, newAge int(3) );
2 .插入数据, 会发现 插入时会报错,没有插入任何数据。
insert into newUser2(id,newName,newAge) select id,name,age from user;
唯一约束起作用了。同样,主键约束插入时也会起作用。
3 . 数据类型长度不一致。 如将 newName的长度设置为 4. user中有name的长度超过了4,如两个蝴蝶飞
alter table newUser2 drop index newName; alter table newUser2 modify newName varchar(4); insert into newUser2(id,newName,newAge) select id,name,age from user;
会发现,报错了。 第一行的长度超过了限制。
第一行的时候,不知道原先的数据有没有插入, 故改变一下name的值。
发现,也没有任何数据插入。
4 . 数据类型不一致。 如将 newName 由 varchar(4) 变成 int(11)
alter table newUser2 modify newName int(11); insert into newUser2(id,newName,newAge) select id,name,age from user;
也没有插入任何数据。
这就是 插入数据的基本用法。
谢谢!!!