MySQL插入数据(六)下

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL插入数据(六)

三. 批量插入多条记录


命令:


  insert into 表名(列名1,列名2...列名n) values (属性值11,属性值12...属性值1n),(属性值21,属性值22...属性值2n),
  (属性值n1,属性值n2...属性值nn);


三.一 插入全部正确的多条数据


只插入 name值吧。 其他值均用 自动自动,默认约束值,和默认值来填充。


  insert into user(name) values('张三'),('李四'),('王二');


20191119165739865.png


批量插入时,相比较单条数据插入,多了一些其他的信息。


Records: 插入的记录条数


Duplicates: 插入时被忽略的记录,如 主键重复错误


Warnings: 有问题的数据值,如数据类型转换错误


三.二 插入部分有错误的数据


用 name 和age 吧。 接下来的自动增长值,应该是 111


插入的数据,有正确的,也有错误的, 看怎么处理。


  insert into user(name,age) values ('aa',24),('bb',24),(null,25),(null,26),('cc',24),('cc','年龄');


20191119165745161.png


会发现,仍然将错误的数据填入进去了。要特别记忆,是插入进去了,并不是回滚了 全部没有数据,也不是只插入正确的数据,不插入错误的数据。 最后一条的 (‘cc’,‘年龄’) 时,年龄用 0进行替换。 (null,25),(null,26) 的name值 被 空字符串 替换。


20191119165756214.png


在 用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)
  );


20191119165807843.png


2 .插入数据


  insert into newUser(id,newName,newAge) select id,name,age from user;


20191119165815884.png


3 .查询新表的数据


20191119165822327.png


发现,将所有的 记录都插入到 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)
  );


20191119165826675.png


2 .插入数据, 会发现 插入时会报错,没有插入任何数据。


  insert into newUser2(id,newName,newAge) select id,name,age from user;


2019111916583874.png


20191119165842493.png


唯一约束起作用了。同样,主键约束插入时也会起作用。


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;


20191119165859260.png


会发现,报错了。 第一行的长度超过了限制。


第一行的时候,不知道原先的数据有没有插入, 故改变一下name的值。


20191119165910172.png


发现,也没有任何数据插入。


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;


20191119165923590.png


也没有插入任何数据。


这就是 插入数据的基本用法。


谢谢!!!

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
5月前
|
缓存 NoSQL 关系型数据库
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
|
3月前
|
SQL 人工智能 关系型数据库
如何实现MySQL百万级数据的查询?
本文探讨了在MySQL中对百万级数据进行排序分页查询的优化策略。面对五百万条数据,传统的浅分页和深分页查询效率较低,尤其深分页因偏移量大导致性能显著下降。通过为排序字段添加索引、使用联合索引、手动回表等方法,有效提升了查询速度。最终建议根据业务需求选择合适方案:浅分页可加单列索引,深分页推荐联合索引或子查询优化,同时结合前端传递最后一条数据ID的方式实现高效翻页。
193 0
|
2月前
|
存储 关系型数据库 MySQL
在CentOS 8.x上安装Percona Xtrabackup工具备份MySQL数据步骤。
以上就是在CentOS8.x上通过Perconaxtabbackup工具对Mysql进行高效率、高可靠性、无锁定影响地实现在线快速全量及增加式数据库资料保存与恢复流程。通过以上流程可以有效地将Mysql相关资料按需求完成定期或不定期地保存与灾难恢复需求。
216 10
|
3月前
|
SQL 存储 缓存
MySQL 如何高效可靠处理持久化数据
本文详细解析了 MySQL 的 SQL 执行流程、crash-safe 机制及性能优化策略。内容涵盖连接器、分析器、优化器、执行器与存储引擎的工作原理,深入探讨 redolog 与 binlog 的两阶段提交机制,并分析日志策略、组提交、脏页刷盘等关键性能优化手段,帮助提升数据库稳定性与执行效率。
102 0
|
6月前
|
关系型数据库 MySQL Linux
在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾
以上就是在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾的步骤。这个过程就像是一场接力赛,数据从MySQL数据库中接力棒一样传递到备份文件,再从备份文件传递到其他服务器,最后再传递回MySQL数据库。这样,即使在灾难发生时,我们也可以快速恢复数据,保证业务的正常运行。
296 28
|
5月前
|
存储 SQL 缓存
mysql数据引擎有哪些
MySQL 提供了多种存储引擎,每种引擎都有其独特的特点和适用场景。以下是一些常见的 MySQL 存储引擎及其特点:
154 0
|
7月前
|
存储 SQL 关系型数据库
【YashanDB知识库】MySQL迁移至崖山char类型数据自动补空格问题
**简介**:在MySQL迁移到崖山环境时,若字段类型为char(2),而应用存储的数据仅为'0'或'1',查询时崖山会自动补空格。原因是mysql的sql_mode可能启用了PAD_CHAR_TO_FULL_LENGTH模式,导致保留CHAR类型尾随空格。解决方法是与应用确认数据需求,可将崖山环境中的char类型改为varchar类型以规避补空格问题,适用于所有版本。
|
8月前
|
Java 关系型数据库 MySQL
SpringBoot 通过集成 Flink CDC 来实时追踪 MySql 数据变动
通过详细的步骤和示例代码,您可以在 SpringBoot 项目中成功集成 Flink CDC,并实时追踪 MySQL 数据库的变动。
1970 45
|
7月前
|
SQL 关系型数据库 MySQL
【YashanDB知识库】字符集latin1的MySQL中文数据如何迁移到YashanDB
本文探讨了在使用YMP 23.2.1.3迁移MySQL Server字符集为latin1的中文数据至YashanDB时出现乱码的问题。问题根源在于MySQL latin1字符集存放的是实际utf8编码的数据,而YMP尚未支持此类场景。文章提供了两种解决方法:一是通过DBeaver直接迁移表数据;二是将MySQL表数据转换为Insert语句后手动插入YashanDB。同时指出,这两种方法适合单张表迁移,多表迁移可能存在兼容性问题,建议对问题表单独处理。
【YashanDB知识库】字符集latin1的MySQL中文数据如何迁移到YashanDB
|
7月前
|
缓存 NoSQL 关系型数据库
Redis和Mysql如何保证数据⼀致?
1. 先更新Mysql,再更新Redis,如果更新Redis失败,可能仍然不⼀致 2. 先删除Redis缓存数据,再更新Mysql,再次查询的时候在将数据添加到缓存中 这种⽅案能解决1 ⽅案的问题,但是在⾼并发下性能较低,⽽且仍然会出现数据不⼀致的问题,⽐如线程1删除了 Redis缓存数据,正在更新Mysql,此时另外⼀个查询再查询,那么就会把Mysql中⽼数据⼜查到 Redis中 1. 使用MQ异步同步, 保证数据的最终一致性 我们项目中会根据业务情况 , 使用不同的方案来解决Redis和Mysql的一致性问题 : 1. 对于一些一致性要求不高的场景 , 不做处理例如 : 用户行为数据 ,

推荐镜像

更多