Skip to content

Commit

Permalink
update sql docs
Browse files Browse the repository at this point in the history
  • Loading branch information
fengzhao committed Oct 30, 2024
1 parent ecfe490 commit a6deb8c
Showing 1 changed file with 5 additions and 4 deletions.
9 changes: 5 additions & 4 deletions docs/basic/10.sql-Transaction.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,13 +76,11 @@

### **查询会不会开事务?**

MySQL 默认是 autocommit=1,也就是说默认是立即提交。

如果想开启事务,先设置 autocommit=0,然后用 START TRANSACTION、 COMMIT、 ROLLBACK 来使用具体的事务
MySQL 中事务默认是隐式事务(即自动提交`autocommit=1`),在执行 `INSERT``UPDATE``DELETE` 等具体数据操作的时候,数据库自动开启事务、提交或回滚事务。也就是如果不是显式开启一个事务,则每条 SQL 语句都形成独立事务。如果该语句执行后没有返回错误,MySQL 会自动执行 COMMIT。但如果该语句返回错误,则根据错误情况执行 COMMIT 或 ROLLBACK

MySQL 中事务默认是隐式事务(即自动提交(autocommit)模式为 ON),执行 insert、update、delete 操作的时候,数据库自动开启事务、提交或回滚事务。

在自动提交模式下,如果没有 start transaction 显式地开始一个事务,那么每个 sql 语句都会被当做一个事务执行提交操作
如果想开启事务,先设置 `autocommit=0`,然后用 `START TRANSACTION``COMMIT``ROLLBACK` 这些事务控制语句来使用具体的事务

通过如下方式,可以关闭 autocommit;需要注意的是,autocommit 参数是针对连接的,在一个连接中修改了参数,不会对其他连接产生影响。如果你新开一个命令窗口,会恢复到默认值。

Expand Down Expand Up @@ -111,8 +109,11 @@ alter table test1 add COLUMN test4 VARCHAR(20) ;

--窗口三:查看未提交的事务,有一条记录,正在执行的sql为空
select * from INFORMATION_SCHEMA.INNODB_TRX;
```

事务的一些关键语句

```sql
-- 开始一个新的读写事务:四种写法

-- BEGIN 语句。这个语句本质上应该是辞旧迎新(提交老事务,准备新事务)。在一个会话中,如果前面的一个事务还没提交就遇到BEGIN语句时,这个BEGIN就会提交老事务,准备新事务。原因是MySQL不支持嵌套事务。前面的事务没有提交的情况下,又要BEGIN开始一个新事务,前面的事务无处安放,只能被动提交了。
Expand Down

0 comments on commit a6deb8c

Please sign in to comment.