/sql-statements/sql-statement-commit.md

https://github.com/pingcap/docs-cn · Markdown · 77 lines · 52 code · 25 blank · 0 comment · 0 complexity · f41fc0b07fde86cc85ab9cdae834470a MD5 · raw file

  1. ---
  2. title: COMMIT
  3. summary: TiDB 数据库中 COMMIT 的使用概况
  4. aliases: ['/docs-cn/dev/sql-statements/sql-statement-commit/','/docs-cn/dev/reference/sql/statements/commit/']
  5. ---
  6. # COMMIT
  7. `COMMIT` 语句用于在 TiDB 服务器内部提交事务
  8. 在不使用 `BEGIN` `START TRANSACTION` 语句的情况下TiDB 中每一个查询语句本身也会默认作为事务处理自动提交确保了与 MySQL 的兼容
  9. ## 语法图
  10. **CommitStmt:**
  11. ![CommitStmt](/media/sqlgram/CommitStmt.png)
  12. **CompletionTypeWithinTransaction:**
  13. ![CompletionTypeWithinTransaction](/media/sqlgram/CompletionTypeWithinTransaction.png)
  14. ## 示例
  15. {{< copyable "sql" >}}
  16. ```sql
  17. CREATE TABLE t1 (a int NOT NULL PRIMARY KEY);
  18. ```
  19. ```
  20. Query OK, 0 rows affected (0.12 sec)
  21. ```
  22. {{< copyable "sql" >}}
  23. ```sql
  24. START TRANSACTION;
  25. ```
  26. ```
  27. Query OK, 0 rows affected (0.00 sec)
  28. ```
  29. {{< copyable "sql" >}}
  30. ```sql
  31. INSERT INTO t1 VALUES (1);
  32. ```
  33. ```
  34. Query OK, 1 row affected (0.00 sec)
  35. ```
  36. {{< copyable "sql" >}}
  37. ```sql
  38. COMMIT;
  39. ```
  40. ```
  41. Query OK, 0 rows affected (0.01 sec)
  42. ```
  43. ## MySQL 兼容性
  44. * TiDB 3.0.8 及更新版本默认使用[悲观事务模型](/pessimistic-transaction.md)[乐观事务模型](/optimistic-transaction.md)需要考虑到修改的行已被另一个事务修改导致 `COMMIT` 语句可能执行失败的情况
  45. * 启用乐观事务模型后`UNIQUE` `PRIMARY KEY` 约束检查将延迟直至语句提交 `COMMIT` 语句失败时这可能导致其他问题可通过设置 `tidb_constraint_check_in_place=TRUE` 来改变该行为
  46. * TiDB 解析但忽略 `ROLLBACK AND [NO] RELEASE` 语法 MySQL 使用该语法可在提交事务后立即断开客户端会话 TiDB 建议使用客户端程序的 `mysql_close()` 来实现该功能
  47. * TiDB 解析但忽略 `ROLLBACK AND [NO] CHAIN` 语法 MySQL 使用该语法可在提交当前事务时立即以相同的隔离级别开启新事务 TiDB 推荐直接开启新事务
  48. ## 另请参阅
  49. * [START TRANSACTION](/sql-statements/sql-statement-start-transaction.md)
  50. * [ROLLBACK](/sql-statements/sql-statement-rollback.md)
  51. * [BEGIN](/sql-statements/sql-statement-begin.md)
  52. * [事务的惰性检查](/transaction-overview.md#惰性检查)