閱讀656 返回首頁    go 財經資訊


INSERT__數據操作語言_SQL語法參考_雲數據庫 OceanBase-阿裏雲

該語句用於添加一個或多個記錄到表。

格式

INSERT [INTO] tblname 
      [(colname,...)] 
      {VALUES|VALUE} ({expr | DEFAULT},...)
      [ ON DUPLICATE KEY UPDATE
       colname=expr
      [, colname=expr] ... ] ;

或者

INSERT [INTO] tblname
         [(colname,...)]
        {VALUES|VALUE} (colvalues,...)
        [ON DUPLICATE KEY UPDATE
          colname=expr
         [, colname=expr] ... ] ;
  • [(colname,...)]用於指定插入數據的列。

  • 同時插入多列時,用“,”隔開。

  • 支持ON DUPLICATE KEY UPDATE

  • Insert語句後麵不支持set操作

INSERT…ON DUPLICATE KEY UPDATE… 語句執行,affect row的計算:

  • 在沒有設置client_capabilities 中CLIENT_FOUND_ROWS的情況下:

    • 作為新行插入的話,affected_row= 1;

    • 存在衝突行的情況下,如果更新前後數據相同的話, affected_row = 0; 否則affectd_row = 2;

  • 如果設置了CLIENT_FOUND_ROWS:

    • 作為新行插入的話,affected_row=1;

    • 如果更新前後數據相同的話,affectd_row=1;

    • 如果更新前後數據不相同的話,affected_row=2;

  • CLIENT_FOUND_ROWS的影響在於:不設置CLIENT_FOUND_ROWS的情況下,計算affected_row的值,隻計算實際更新了行數,而設置了CLIENT_FOUND_ROWS的話,會把所有touched行數(滿足衝突條件的行)都記上,而不管其是否發生了真正的數據修改。

示例

Oceanbase>show create table test;
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                       |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| test  | CREATE TABLE `test` (
  `a` int(11) DEFAULT NULL,
  `b` int(11) DEFAULT NULL,
  UNIQUE KEY `a_uniq` (`a`) BLOCK_SIZE 16384
) DEFAULT CHARSET = utf8mb4 REPLICA_NUM = 3 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)

Oceanbase>insert into test values(1,2);
Query OK, 1 row affected (0.01 sec)

Oceanbase>insert into test values(1,3);
ERROR 1062 (23000): Duplicate entry '1' for key 'a_uniq'

Oceanbase>insert into test values(1,3) on duplicate key update a = a+1;
Query OK, 2 rows affected (0.01 sec)

Oceanbase>select * from test;
+------+------+
| a    | b    |
+------+------+
|    2 |    2 |
+------+------+
1 row in set (0.01 sec)

注意: 同時插入多個值時,如果這些值在不同的分區,會報錯。

Oceanbase>show create table tp;
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                         |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tp    | CREATE TABLE `tp` (
  `a` int(11) DEFAULT NULL,
  `b` int(11) DEFAULT NULL
) DEFAULT CHARSET = utf8mb4 REPLICA_NUM = 3 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE partition by hash(a) partitions 7 |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)

Oceanbase>insert into tp values(1,2),(2,3),(3,4);
ERROR 1235 (0A000): Insert data cross partition not supported

最後更新:2016-11-24 11:23:47

  上一篇:go DROP VIEW__數據定義語言_SQL語法參考_雲數據庫 OceanBase-阿裏雲
  下一篇:go UPDATE__數據操作語言_SQL語法參考_雲數據庫 OceanBase-阿裏雲