
# INSERT
INSERT是将数据插入到数据库对象中的指令。
#### 常用语法
```
INSERT [INTO] tbl_name
[(col_name,...)]
{VALUES | VALUE} ({expr },...),(...),...
[ ON DUPLICATE KEY UPDATE
col_name=expr
[, col_name=expr] ... ]
OR
INSERT [INTO] tbl_name
SET col_name={expr | DEFAULT}, ...
[ ON DUPLICATE KEY UPDATE
col_name=expr [, col_name=expr] ... ]
```
#### 语法限制
- 不支持INSERT DELAYED...。
- 不支持不包含拆分字段的INSERT。
- 暂不支持PARTITION 语法，建议不要使用partition表。
- INSERT操作不支持datetime（YYYY-MM-DD HH:MM:SS）中"YYYY"取值1582年及之前年份。
- INSERT操作不支持插入拆分键值为DEFAULT关键字。
- 拆分表执行INSERT操作时如果指定了自增值，只影响该插入数据的自增值。后续数据插入时如果不指定自增值，仍以原自增值为基础进行自增。
- 不支持在VALUES中调用REPEAT函数时引用表中的列作为参数。 例如：
  ```
  INSERT INTO T(NAME) VALUES(REPEAT(ID,3));
  ```
  
- 使用INSERT DUPLICATE...更新拆分键时仅支持常量，不支持VALUES、LAST_INSERT_ID等函数或运算表达式。
- 不支持INSERT DUPLICATE语句更新含GSI的拆分表。
 
#### 使用限制
- 如果INSERT语句中拆分键的值是非法的，数据默认会路由到0号分库或者0号分表。
- 不建议在INSERT语句中使用VERSION、DATABASE、USER函数，此类函数结果受语句是否下推至DN节点执行影响，执行结果可能不符合预期。
- 不建议INSERT DUPLICATE语句更新拆分键，此类方法直接下推DN，执行结果可能不符合预期。
 
