注意

示例表及数据基于以下定义:

  1. Query OK, 0 rows affected (0.10 sec)
  2. obclient> SELECT * FROM t;
  3. Empty set (0.02 sec)
  • 单表插入:向表 t 中插入一行数据。
  • 单表插入:直接向子查询中插入数据
  1. obclient>INSERT INTO (SELECT * FROM t) VALUES(1,2,3);
  2. Query OK, 1 row affected (0.00 sec)
  3. obclient> SELECT * FROM t;
  4. +----+------+------+
  5. | C1 | C2 | C3 |
  6. +----+------+------+
  7. | 1 | 2 | 3 |
  8. +----+------+------+
  9. 1 row in set (0.01 sec)
  • 单表插入:包含 RETURNING 子句。
  • 普通的多表插入:当表 t 中有至少一行数据时,向表 t1 插入一行数据 (1,1,1),向表 t2 插入一行数据 (2,2,2)。
  1. WHERE ROWNUM< 2;
  2. Query OK, 2 rows affected (0.01 sec)
  3. Records: 2 Duplicates: 0 Warnings: 0
  4. obclient>SELECT * FROM t1;
  5. | C1 | C2 | C3 |
  6. +----+------+------+
  7. | 1 | 1 | 1 |
  8. +----+------+------+
  9. 1 row in set (0.02 sec)
  10. obclient>SELECT * FROM t2;
  11. +----+------+------+
  12. | C1 | C2 | C3 |
  13. +----+------+------+
  14. | 2 | 2 | 2 |
  15. +----+------+------+
  16. 1 row in set (0.01 sec)
  • 带条件的多表插入:使用 INSERT ALL,当表 t 中 c2 的值大于 1 时,向表 t1 中插入数据 (1,1,1);当表 t 中 c3 的值大于 1 时,向表 t2 中插入数据 (2,2,2);如果都不满足,则向表 t1 中插入数据 (3,3,3)。
  • 带条件的多表插入:使用 INSERT FIRST,当表 t 中 c2 的值大于 1 时,向表 t1 中插入数据 (1,1,1),向表 t2 中插入数据 (4,4,4);当表 t 中 c3 的值大于 1 时,向表 t2 中插入数据 (2,2,2);如果都不满足,则向表 t1 中插入数据 (3,3,3)。
  1. obclient>DELETE FROM (SELECT * FROM t);
  2. Query OK, 4 rows affected (0.04 sec)
  3. Query OK, 1 row affected (0.00 sec)
  4. WHEN c2 > 1 THEN INTO t1 VALUES(1,1,1) INTO t2 VALUES(4,4,4)
  5. when c3 > 1 THEN INTO t2 VALUES(2,2,2)
  6. ELSE INTO t1 VALUES(3,3,3) SELECT c2,c3 FROM t;
  7. Query OK, 2 rows affected (0.01 sec)
  8. Records: 2 Duplicates: 0 Warnings: 0
  9. obclient>SELECT * FROM t1;
  10. +----+------+------+
  11. | C1 | C2 | C3 |
  12. +----+------+------+
  13. | 1 | 1 | 1 |
  14. +----+------+------+
  15. 1 row in set (0.00 sec)
  16. obclient>SELECT * FROM t2;
  17. +------+------+------+
  18. | C1 | C2 | C3 |
  19. +------+------+------+
  20. | 4 | 4 | 4 |
  21. | 2 | 2 | 2 |
  22. +------+------+------+