100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > mysql insert into as_mysql insert into select使用方法详解

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

时间:2021-11-07 06:05:33

相关推荐

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

mysql insert into select使用方法详解-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使用行级锁定)的表,不会发生这种情况。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。