欢迎访问 OceanBase 官网获取更多信息:https://www.oceanbase.com/
本文将主要介绍使用 SQL 语句实现表与表之间的数据迁移。
表与表之间数据迁移
语法 1
INSERT INTO target_table_name[(target_col_name[, target_col_name] …)]
SELECT [(source_col_name[, source_col_name] …)]
FROM source_table_name
[WHERE expr];
参数解释:
参数 描述
target_table_name 数据迁移的目标表。
target_col_name 目标表的列名称。如果要更新目标表的全部列数据,可以不填写列名称。
source_col_name 源表的列名称。选择需要迁移的列,如果要选中全部数据可以用 * 表示。
注意
选择的列数量需要与目的表中的列数量保持一致。
source_table_name 数据迁移的源表。
WHERE expr 迁移数据的筛选条件,不填表示迁移 SELECT 选中的所有行记录。
语法 2
功能适用性
MERGE 语句暂时只支持 OceanBase 数据库 Oracle 模式。
MERGE INTO target_table_name
USING source_table_name
ON (expr)
WHEN NOT MATCHED THEN INSERT VALUES((source_col_name[, source_col_name] …))
[WHERE expr];
参数解释:
参数 描述
target_table_name 数据迁移的目标表。
source_table_name 数据迁移的源表。
ON (expr) 源表和目标表的连接条件。
source_col_name 源表的列名称。选择需要迁移的列,如果要选中全部数据可以用 * 表示。
注意
选择的列数量需要与目标表中的列数量保持一致,并且迁移的数据要符合目标表的数据类型。
WHERE expr 迁移数据的筛选条件。
示例 1
将表 tbl1 中符合条件(age > 10)的数据插入表 tbl2 中。
obclient [test]> SELECT * FROM tbl1;
±-----±-----±-----+
| id | name | age |
±-----±-----±-----+
| 1 | ab | 8 |
| 2 | bc | 18 |
| 3 | cd | 14 |
| 4 | de | 19 |
| 5 | ef | 6 |
| 6 | fg | 15 |
±-----±-----±-----+
6 rows in set
obclient [test]> DESC tbl2;
±------±--------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±------±--------±-----±----±--------±------+
| col1 | int(11) | YES | | NULL | |
| col2 | int(11) | YES | | NULL | |
±------±--------±-----±----±--------±------+
2 rows in set
obclient [test]> SELECT * FROM tbl2;
Empty set
obclient [test]> INSERT INTO tbl2 SELECT id,age FROM tbl1 WHERE age > 10;
Query OK, 4 rows affected
Records: 4 Duplicates: 0 Warnings: 0
obclient [test]> SELECT * FROM tbl2;
±-----±-----+
| col1 | col2 |
±-----±-----+
| 2 | 18 |
| 3 | 14 |
| 4 | 19 |
| 6 | 15 |
±-----±-----+
4 rows in set
示例 2
如果在表 tbl1 中找不到与表 tbl2 取值相同的行(tbl1.id=tbl2.col1 and tbl1.age=tbl2.col2),那么将 tbl1 中的这行插入到 tbl2 中,且只插入满足 tbl1.age < 10 的行。
obclient [SYS]> SELECT * FROM tbl1;
±-----±-----±-----+
| ID | NAME | AGE |
±-----±-----±-----+
| 1 | ab | 8 |
| 2 | bc | 18 |
| 3 | cd | 14 |
| 4 | de | 19 |
| 5 | ef | 6 |
| 6 | fg | 15 |
±-----±-----±-----+
6 rows in set
obclient [SYS]> SELECT * FROM tbl2;
Empty set
obclient [SYS]> MERGE INTO tbl2
USING tbl1
ON (tbl1.id=tbl2.col1 and tbl1.age=tbl2.col2)
WHEN NOT MATCHED THEN INSERT VALUES(tbl1.id,tbl1.age)
WHERE tbl1.age < 10;
Query OK, 2 rows affected
obclient [SYS]> SELECT * FROM tbl2;
±-----±-----+
| COL1 | COL2 |
±-----±-----+
| 1 | 8 |
| 5 | 6 |
±-----±-----+
2 rows in set
相关文档
INSERT(MySQL 模式)
INSERT(Oracle 模式)
MERGE(Oracle 模式)
欢迎访问 OceanBase 官网获取更多信息:https://www.oceanbase.com/




