回滚事件只是让原数据看起来不变,但是id还是会自增吗?

 

回滚事件只是让原数据看起来不变,但是id还是会自增对吗?

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

import pymysql

#连接

conn = pymysql.connect(host="127.0.0.1",database="s8",user="root",password="123",charset="utf8")

 

#获取光标

cursor = conn.cursor()

 

#写sql语句

sql_insert = "insert into user1(username) value('name10');"

sql_update = "update user1 set username='name91' where userid=9;"

sql_delete = "delete from user1 where userid<3;"

 

#回滚事务:要么全执行,要么全部执行。

# 注意:新增

try:

    #执行语句

    cursor.execute(sql_insert)

    print(cursor.rowcount)

    print(cursor.lastrowid)  # 最后的id

 

    cursor.execute(sql_update)

    print(cursor.rowcount)

 

    cursor.execute(sql_delete)

    print(cursor.rowcount)

 

    #提交事务

    conn.commit()

except Exception as e:

    print(e)

    conn.rollback()

 

#关闭连接

cursor.close()

conn.close()

 

 

自增id如果也事务化会很容易导致阻塞 因此是设计使然 如果业务原因非要连续 可以不采用自增而是插入时通过count等手动赋id

因为innodb的auto_increament的计数器记录的当前值是保存在存内 存中的,并不是存在于磁盘上,当mysql 
server处于运行的时候,这个计数值只会随着insert改增长,不会随着delete而减少。而当mysql 
server启动时,当我们需要去查询auto_increment计数值时,mysql便会自动执行:SELECT MAX(id) FROM 表名 
FOR UPDATE;语句来获得当前auto_increment列的最大值,然后将这个值放到auto_increment计数器中。所以就算Rollback MySQL的auto_increament计数器也不会作负运算

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

那些年的代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值