关于数据库单线程事务的一个实验

程序中突然出现一个情况,一个数据被重复提交两次。于是有同事指出你代码中其中一行做了另一个表的操作,由于外部事务中断不会也终止这条操作,所以导致了,重写, 然而我想说这个不太符合我的知识体系,于是我做了实验。此次开发框架是tp5

建立两张表test1,test2,分别有字段id、name和id、b_name,然后做如下种情况操作:

1、启动表1的事务,但是只写入表2插入一条数据,回滚表1

2、启动表1事务,对表2插入,然后回滚表2,

3、启动表1事务,对表2插入,然后commit表1,

4、启动表1事务,对表2插入,然后commit表2,

5、启动表2的事务,但是只写入表1插入一条数据,回滚表2

6、启动表2事务,对表1插入,然后回滚表2,

7、启动表2事务,对表1插入,然后commit表2,

8、启动表2事务,对表1插入,然后commit表1,

9、启动xdebug,启动表1事务,对表2插入,下一句是对表1插入,但是断点卡在对表1 插入时,然后强制程序中断,

经过以上实验得出结果:

1、事务发生到对应语句时,的确与数据库有交互(会影响自增id的游标记录),但是没有commit之前是不会对数据造成影响

2、事务一旦启动,除非回滚或者提交,否则期间操作都将被丢弃,

3、实验只针对单线情况讨论,多线程情况不做分析

ps:另外修改的操作也做了,事实也和我原有理论知识一样,事务提交之前,其他的语句是不会被修改的,


你可能感兴趣的:(php,数据库事务)