- 论坛徽章:
- 93
|
回复 1# ganhy
参考:- 13.2.4.1. INSERT ... SELECT语法
- INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
- [INTO] tbl_name [(col_name,...)]
- SELECT ...
- [ ON DUPLICATE KEY UPDATE col_name=expr, ... ]
- 使用INSERT...SELECT,您可以快速地从一个或多个表中向一个表中插入多个行。
- 示例:
- INSERT INTO tbl_temp2 (fld_id)
- SELECT tbl_temp1.fld_order_id
- FROM tbl_temp1 WHERE tbl_temp1.fld_order_id > 100;
- 使用INSERT...SELECT语句时会出现以下情况:
- · 明确地指定IGNORE,用于忽略会导致重复关键字错误的记录。
- · 不要同时使用DELAYED和INSERT...SELECT。
- · INSERT语句的目标表会显示在查询的SELECT部分的FROM子句中。(在有些旧版本的MySQL中不会出现这种情况。)
- · AUTO_INCREMENT列照常运行。
- · 为了确保二进制日志可以被用于再次创建原表,MySQL不允许在INSERT...SELECT运行期间同时进行插入操作。
- · 目前,您不能在向一个表插入的同时,又在一个子查询中从同一个表中选择。
- 在ON DUPLICATE KEY UPDATE的值部分中,只要您不使用SELECT部分中的GROUP BY,您就可以引用在其它表中的列。有一个副作用是,您必须使值部分中的非唯一列的名称符合要求。
- 您可以使用REPLACE替代INSERT,来覆盖旧行。对于包含唯一关键字值,并复制了旧行的新行,在进行处理时,REPLACE可以作为INSERT IGNORE的同类子句:新行被用于替换旧行,而不是被丢弃。
复制代码 |
|