mysql insert into as_mysql insert into select使用方法详解

mysql insert into as_mysql insert into select使用方法详解mysqlinsertintoselect使用方法详解2017-11-2215:47我们先来看看mysqlinsertintoselect的语法规则。INSERT[LOW_PRIORITY|HIGH_PRIORITY][IGNORE][INTO]tbl_name[(col_name[,col_name]…)]SELECT…[ONDUPLICATEKEY…

大家好,又见面了,我是你们的朋友全栈君。

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使用行级锁定)的表,不会发生这种情况 。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/159642.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Redis连接时报错:Could not connect to Redis at 127.0.0.1:6379: Connection refused「建议收藏」

    Redis连接时报错:Could not connect to Redis at 127.0.0.1:6379: Connection refused「建议收藏」在安装好redis扩展尝试连接redis时,客户端打不开,原因是需要先开启服务端,这需要先配置redis.conf1.找到redis.conf并修改daemonizeno为daemonizeyes,这样就可以默认启动就后台运行2.使用配置开启redis服务redis-server/usr/local/redis-5.0.53.连接使用redisr…

  • Ubuntu18.04下更改apt源为阿里云源「建议收藏」

    Ubuntu18.04下更改apt源为阿里云源「建议收藏」前言:看见Ubuntu新出了18.04版本感觉不错,装一个玩玩,虽然有很多教程可以参考,但我也给出一个不是很一样的方案吧,尽量解释的详细一点。为了下载更方便,速度更快,我们往往在使用Linux系列系统时修改apt源为国内的源,一般选择有阿里云,豆瓣之类的,下面简单说下如何更改为阿里云源。1.复制源文件备份,以防万一我们要修改的文件是sources.list,它在目录/etc/ap…

  • 将oracle端口1521共享_[转载]Oracle 1521端口不通 telnet不通

    将oracle端口1521共享_[转载]Oracle 1521端口不通 telnet不通今天启动工程,突然提示无法连接远程Oracle。我试着telnetOracle服务器1521端口,提示连接失败。D:DocumentsandSettingsAdministrator>telnet10.201.70.681521正在连接到10.201.70.68…不能打开到主机的连接,在端口1521:连接失败Oracle服务器与本机都在局域网内,不存在网络不通问题,怎么会…

  • paceMaker_pacemaker怎么读

    paceMaker_pacemaker怎么读1. 简介 Pacemaker是一个集群资源管理者。他用资源级别的监测和恢复来保证集群服务(aka.资源)的最大可用性。它可以用你所擅长的基础组件(Corosync或者是Heartbeat)来实现通信和关系管理。​2. 特性 Pacemaker包含以下的关键特性:  监测并恢复节点和服务级别的故障​  存储无关,并不需要共享存储​  资源无关,任何能用脚本控制的资源

    2022年10月25日
  • 更改nginx端口_nginx 端口映射

    更改nginx端口_nginx 端口映射Postedby撒得一地on2015年8月25日innginx笔记nginx相关文章在web服务器中,不管是Apache还是Nginx,这些服务器默认占用的端口都是80端口。但是,有时候80端口被占用,或者一些其他原因,我们需要这些服务工作在非80端口上,那么如何修改Nginx默认端口,使其占用8089端口(或者其它非80端口),方法步骤如下:1.首先修改nginx根目录下的配置文件n…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号