mysql insert into select使用方法详解2017-11-22 15:47

我们先来看看mysql insert into select的语法规则。

INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]

[INTO] tbl_name

[(col_name [, col_name] ...)]

SELECT ...

[ON DUPLICATE KEY UPDATE assignment_list]

value:

{expr | DEFAULT}

assignment:

col_name = value

assignment_list:

assignment [, assignment] ...

使用INSERT INTO...SELECT,您可以根据SELECT语句的结果快速地将多行插入到表中,该语句可以从一个或多个表中进行选择。

例如:

INSERT INTO tbl_temp2 (fld_id)

SELECT tbl_temp1.fld_order_id

FROM tbl_temp1 WHERE tbl_temp1.fld_order_id > 100;

以下条件适用于 INSERT INTO... SELECT声明:

指定IGNORE忽略会导致重复键违规的行。

DELAYED被忽略INSERT ... SELECT。

该INSERT语句的目标表可能出现在查询部分的FROM子句中SELECT。但是,不能插入到表中并从子查询中的同一个表中进行选择。

在从同一个表中选择并插入时,MySQL创建一个内部临时表来存放来自这些表的行SELECT,然后将这些行插入到目标表中。但是,不能使用INSERT INTO t ... SELECT ... FROM t何时 t是TEMPORARY 表,因为TEMPORARY表不能在同一语句中引用两次。

AUTO_INCREMENT 列照常工作。

为确保二进制日志可用于重新创建原始表,MySQL不允许并发插入INSERT ... SELECT语句。

为避免SELECT在INSERT引用同一个表时引用不明确的列引用问题 , 请为该SELECT部分中使用的每个表提供唯一的别名,并使用适当的别名限定该部分中的列名。

SELECT没有ORDER BY子句的语句返回行 的顺序是不确定的。这意味着,在使用复制时,不能保证这样的SELECT返回在主服务器和从服务器上的顺序相同,这可能会导致它们之间的不一致。

为防止发生这种情况,请始终INSERT... SELECT使用ORDER BY 在主服务器和从服务器上生成相同行顺序的子句编写要复制的语句。

由于这个问题,在MySQL 5.5.18中, INSERT...SELECT ON DUPLICATE KEY UPDATE和INSERT IGNORE... SELECT语句被标记为不安全的基于语句的复制。

这些语句在使用基于语句的模式时会在错误日志中产生警告,并在使用MIXED模式时使用基于行的格式写入二进制日志 。(错误#11758262,错误#50439)

INSERT INTO SELECT影响使用诸如MyISAM使用表级锁的存储引擎的分区表 的语句 会锁定源表和目标表的所有分区。对于使用存储引擎(如InnoDB使用行级锁定)的表,不会发生这种情况 。

mysql insert into as_mysql insert into select使用方法详解相关推荐

  1. mysql master 配置_MySQL双Master配置的方法详解

    刚刚抽空做了一下MYSQL 的主主同步.把步骤写下来,至于会出现的什么问题,以后随时更新.这里我同步的数据库是TEST1.环境描述.主机:192.168.0.231(A)主机:192.168.0.23 ...

  2. pdo mysql fetchall_PDO中获取结果集之fetchAll()方法详解

    fetchAll()方法是获取结果集中的所有行,返回一个包含结果集中所有行的二进制数组!大理石机械构件维修厂家 那么在上一篇<PDO中获取结果集之fetch()方法详解>中,我们介绍了fe ...

  3. mysql 线程_MySQL服务器线程数的查看方法详解

    本文实例讲述了MySQL服务器线程数的查看方法.分享给大家供大家参考,具体如下: mysql重启命令: /etc/init.d/mysql restart MySQL服务器的线程数需要在一个合理的范围 ...

  4. mysql命令去重_mysql去重的两种方法详解及实例代码

    mysql去重 方法一: 在使用MySQL时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数, ...

  5. mysql delete limit用法_mysql delete limit 使用方法详解

    mysql delete limit优点: 用于DELETE的MySQL唯一的LIMIT row_count选项用于告知服务器在控制命令被返回到客户端前被删除的行的最大值.本选项用于确保一个DELET ...

  6. 安卓开发mysql数据库_Android编程之数据库的创建方法详解

    本文实例讲述了Android编程之数据库的创建方法.分享给大家供大家参考,具体如下: 主java package com.itheima.createdatabase; import android. ...

  7. 连接mysql所必须参数_数据库连接参数使用方法详解

    在设计数据库应用程序的时候,经常需要将一些信息从程序中独立出来,以保证程序的可移植性.其中最重要的信息就是数据库的连接参数. 在Delphi中,获得正确的数据库连接参数的方法十分简单,你只需要建立一个 ...

  8. mysql数据库tns配置_oracle数据库tns配置方法详解

    TNS是Oracle Net的一部分,专门用来管理和配置Oracle数据库和客户端连接的一个工具,在大多数情况下客户端和数据库要通讯,必须配置TNS,下面看一如何配置它吧 TNS简要介绍与应用 Ora ...

  9. mysql回滚用法_Mysql误操作后利用binlog2sql快速回滚的方法详解

    前言 在日常工作或者学习中,操作数据库时候难免会因为"大意"而误操作,需要快速恢复的话通过备份来恢复是不太可能的,下面这篇文章主要给大家介绍关于Mysql误操作后利用binlog2 ...

最新文章

  1. 华为巨资收购为云计算趟平道路?
  2. Xcode代码不提示或提示慢
  3. LinkedList模拟队列和堆栈
  4. android基础(基本框架的构成)
  5. Visual Leak Detector 帮助检查内存泄露
  6. Package Manager Console 向VS2010安装 EntityFramework
  7. but was actually of type 'com.sun.proxy.$Proxy**'的两种解决方法
  8. 【Linux网络编程】TCP 和 UDP 数据报格式详解
  9. LinkButton指定ClientOnClick的问题
  10. java自动装箱和拆箱_关于java自动装箱和自动拆箱
  11. sift线特征提取代码_车道线检测LaneNet
  12. Android实现飘动的旗帜效果实例
  13. 用haslib给字符加密
  14. SpringBoot之打包错误
  15. WPF入门教程系列二十——ListView示例(二)
  16. windows service in vs
  17. 【SVN】Eclipse SVN插件下载安装
  18. NRF24L01模块使用(老干妈笔记)
  19. 腾讯云播放器TcPlayer实现网络直播
  20. Win10编译OpenJDK源码

热门文章

  1. 如何判断领导的行为风格
  2. 运营者常犯这些错误——微信公众号运营的误区分析
  3. 网页通过CSS写出生日倒计时(利用:日期倒计时、元素自动旋转、边框视觉按钮效果)[直接复制代码即可实现、含注释]
  4. 利用系统自带命令杀毒——手动杀毒
  5. java 调用ajax_JAVA AJAX调用
  6. AI 3D 传感器市场竞争白热化,中国掌握自主可控核心技术时不我待!
  7. WindowsAndroid: 在Windows中运行Android系统
  8. 电话卡插到终端服务器通话时长,通话中添加背景音的方法、终端及系统专利_专利查询 - 天眼查...
  9. 2012云世界大会催动云爆发 聚转云力量
  10. openlayers如何使用(三)动态数据加载