本篇文章介绍如何使用Insert语句将数据插入到数据库。

数据插入

增删改查是数据库最常用的4个命令,插入算是第二常用,第一是SELECT。插入数据的方式大概有4种插入完整的行

插入行的一部分

插入多行数据(批量插入)

插入来自查询的数据

插入完整的行

使用Insert将一条数据插入数据库是最简单也是最基本的操作。插入操作有两种写法。

顺序插入

顺序插入指的是:给出数据库名和需要插入数据,按照数据库字段排列顺序将数据插入数据库。

举个例子:

INSERT INTO `test`.`br_user` (`user_id`, `name`, `password`, `email`) VALUES (NULL, '星空幻颖', '123456', '123@xyz.com');

这条语句向用户表插入一条用户数据。给出了姓名、密码和邮箱3个字段,其中user_id设为NULL,这样Mysql就会为我们自动创建一个自增长ID

这种顺序插入方式,必须和数据库字段一一对应的给出每个值,如果不想给值,可以设为NULL(在数据允许的情况下)。由于位置匹配有要求,所以十分不安全。假设我们需要调增数据库结构时候,此语句插入数据将会发生错误。所以一般情况下我们不采用这种方式。

字段名+值插入

首先给个例子:

INSERT INTO `test`.`br_user` (`user_id`, `name`, `password`, `email`) VALUES (NULL, '星空幻颖', '123456', '123@xyz.com');

上面这条语句可以实现和顺序插入一样的功能,但我们发现它相比于顺序插入多给出了字段名,这种方式稍微复杂点儿,但是更为安全。

在插入数据行时候,Mysql将会使用VALUES的值填入对应字段名,例如星空幻颖将会被插入到name字段。因为提供了字段名,所以字段的顺序也不一定需要按照数据库字段排序。

比方我们可以改写上面的SQL语句:

INSERT INTO `test`.`br_user` (`user_id`, `password`, `email`, `name`) VALUES (NULL, '123456', '123@xyz.com', '星空幻颖');

我们将name调增到了最后一个,但是这并不影响插入的结果。

甚至我们可以省去不写某些字段的值。(前提是字段允许为空或给出默认值的情况下)

INSERT INTO `test`.`br_user` (`password`, `name`) VALUES ('123456', '星空幻颖');

这样就安全了很多,即使我们调整数据库结构,新增一个字段,只要我们给出默认值就没有任何问题。

插入多行(批量插入)

Mysql可以一次插入一条记录到数据库,也支持一次插入多条记录。只需要给出多个VALUES使用逗号分隔(使用圆括号括起来),就可以一次插入多条记录。

INSERT INTO `test`.`br_user` (`user_id`, `password`, `email`, `name`)

VALUES (NULL, '123456', '1234@xyz.com', '星空幻颖'),

(NULL, '123456', '456@xyz.com', '星空幻颖2'),

(NULL, '123456', '789@xyz.com', '星空幻颖3'),

(NULL, '123456', '222@xyz.com', '星空幻颖4');

注意每条插入值的顺序要和你给出的字段顺序一致。

建议:在实际开发中,如果需要插入多条数据尽量使用批量插入。因为速度比一条一条插入块,性能更好。

插入检索出的数据

相同表结构

假设一个场景,我们有两张用户表,现在需要将其用户进行合并。首先我们可能会想到,将一张表数据查出,在放入到另外一张表合并。

但是有了插入检索出数据这个功能,就不需要这么麻烦了。Mysql可以一次帮我们处理好。

给出两张表br_user和br_user2。为作区分,我把br_user2姓名都改为了数字

INSERT INTO br_user(`password`, `email`, `name`) SELECT `password`, `email`, `name` FROM br_user2;

这条语句看上去好像是两个语句,但是他执行的是一个功能:将br_user2的数据挪到了br_user,一次性完成。

这里的插入多少记录到br_user决定了你的SELECT检索出来多少记录,如果一条也没有检索到,也不会报错,毕竟是合法的。当然,你也可以在SELECT语句后面使用where条件筛选数据。

提醒:这里复制数据到另外一个表,最好不要使用原来的表id,防止和需要合并的表冲突,除非你确定不会冲突。还有字段类型,如果检索出来为字符串,而插入的为整型,Mysql会帮你转换了

不同表结构

上面的例子我们为了简单明了,使用了两张完全相同结构的表。其实Mysql根本不关心你两个表结构是否相同,也不关心你检索的字段是否相同,只关心你检索出来的字段顺序。简单来说,就是你检索出来的第一个字段就会被插入到第一个字段,(上方的password会被插入到password字段),以此类推。

为了演示这个效果,我们给出一个驴唇不对马嘴的两张表,来展示强烈对比:

还是那张br_user,另外我们再给出一张br_region地区表,完全不一样。

INSERT INTO br_user(`password`, `email`, `name`) SELECT `region_py`, `region_type`, `region_name` FROM br_region where region_id <10;

由于br_region表数据量太大,我们只选取了region_id < 10的,刚好说了一下上面的附带where筛选。

这里region_py被放入了password;region_type被放入了email;region_name被放入了name。他们有啥关系?啥关系都没有。

这个为我们以后不同表之间转移数据提供了方便。你可以帮老板造假数据,来个10万用户。

SQL语言在方便也需要数据库软件来管理。资源合集:出名的数据库管理工具

星空幻颖,严颖

mysql非必现数据插不进去_MySQL必知必会:数据插入(Insert)相关推荐

  1. mysql导入csv文件 第一行有问题_mysql 导入 csv文件中数据,只能导入第一行

    用workbench导入csv数据,只能导入数据的第一行,也就是标注每一列的列名的那一行. 但问题是,每次导入完成时,系统提示已经导入了500条记录(这个文件中的确有500条记录),可是刷新数据库后打 ...

  2. mysql汉字插不进去_Mysql下插入汉字失败

    1.问题:mysql 遇到某些中文插入异常 最近有同学反馈了这样一个问题: 上述语句在脚本中 load 入库的时候会 hang 住,web 前端.命令行操作则要么抛出 Incorrect string ...

  3. mysql教材第四章课后题答案_mySQL 教程 第4章 数据查询

    mySQL运算符 这些运算符在SQL查询中用得到. 算数运算符 + 加 - 减 * 乘 / DIV 除 % MOD 取余数 比较运算符 = 等于 <> != 不等于 < <= ...

  4. mysql 查询两表 两列 比较大小写_mysql 查询表中列的数据不区分大小写的解决

    mysql查询默认是不区分大小写的 如: select * from some_table where str='abc'; select * from some_table where str='A ...

  5. mysql查询重复名字的数据都查出来_mysql查出重复的所有数据

    写入值 DROP TABLE IF EXISTS `tp_users`; CREATE TABLE `tp_users` ( `user_id` int(11) unsigned NOT NULL A ...

  6. 回归插补法_没有完美的数据插补法,只有最适合的

    数据缺失是数据科学家在处理数据时经常遇到的问题,本文作者基于不同的情境提供了相应的数据插补解决办法.没有完美的数据插补法,但总有一款更适合当下情况. 我在数据清理与探索性分析中遇到的最常见问题之一就是 ...

  7. 直线插补计算过程_【计鹏视角】风速数据插补对发电量的影响

    测风数据在插补时通常通过相关函数实现,相关函数一般采用线性方程函数,线性函数根据不同通道的风速相关性散点图来得到. 不同高度层的相关性散点图是成"带"状分布,相关系数越大,&quo ...

  8. php爬虫:知乎用户数据爬取和分析

    php爬虫:知乎用户数据爬取和分析 2016-04-10    PHP开发者     (点击上方公众号,可快速关注) 作者:崔小拽        原文链接:http://cuihuan.net/art ...

  9. mysql表里插不进去数据_Oracle数据中表值插不进去问题(转)

    相信我们在进行测试的时候,有的时候会遇上数据库表的值插不进去的情况,在执行SQL语句的时候,好像卡住一样,没有反应.但是当你把SQL语句copy下来放在PL/SQL中执行的时候,在语法没有任何的错误, ...

最新文章

  1. java单循环 比较得分_java – 为什么两个单独的循环比一个快?
  2. 大学计算机思维导图_我学计算机,也会修电脑
  3. 【NOI2013】向量内积
  4. Linux学习之系统编程篇:死锁的情形及其解决
  5. 用java智能锁远程,从生产者-消费者模型了解线程、同步、锁(java)
  6. ps -ef 输出结果的具体含义
  7. python实现模拟浏览器登录_Python使用win32com实现的模拟浏览器功能示例
  8. python掷骰子_掷骰子童芯派 python硬件编程(上传模式)
  9. Activiti6自学之路(一)—— Activiti6介绍
  10. 01.CCNA 200-301 题库_1-50
  11. Java验证导入excel格式
  12. AsposeWord转pdf的正确姿势
  13. 【深度学习21天学习挑战赛】备忘篇: from_tensor_slices的作用和用法
  14. hdu5294||2015多校联合第一场1007 最短路+最大流
  15. 深入理解Magento第五章 – Magento资源配置
  16. ICPC 昆明 单挑打铁记
  17. Pitest内存泄露分析 (工具使用IDEA、Jprofiler)
  18. 物联网让生活更加轻松的五种方式
  19. 【转】ARM GIC中断系列(三):gicv3架构基础
  20. 微信小程序 诡异的异步调用问题,函数执行结果与预想不一致

热门文章

  1. 0830通用问题解决
  2. win10操做系统恢复操做
  3. django-orm操作小结
  4. linux-新建一个centos虚拟机系统-安装全过程图示
  5. redis 6.0 redis-proxy搭建
  6. C程序设计导引(1)
  7. 13-5 15 xshell使用xftp pure-ftpd
  8. 什么样的前端框架才是一个好框架
  9. 近期状态几点简单思考
  10. Exchange Online Whitelist