1、事务,就是一组命令的操作。
不过这一组命令,我们有时候需要使用手动提交;
1、使用这组命令可以查询出来现在的提交方式:自动提交(就是命令输入,点击enter后,会不会直接对表格产生修改,改为0以后,就需要额外使用一个commit命令才能将命令提交执行);
2、执行出错的时候,
使用回滚事务操作,将数据改为原来的状态
rollback;
3、事务的性质(ACID,网上很多,先不写了,就是针对的一组事务命令)
4、并发事务问题:
(多个事务并发操作同一数据库时,每个事务在使用时,都对数据库进行操作,进行修改后,可能影响其他事务对数据库的访问。类似多线程对共享资源的访问),说是三种问题,实际上使用的时候,对应的是三种操作
(第一种对应的是,当前事务进行读取的时候,另外一个事务对数据表进行了修改,但是另外一个事务还没有执行到提交的那一步。这个过程里第一个事务读取到了,成为脏读)
(第二种对应,使用一个事务先后两次读取同一个记录,另外的事务在两次读取之间对数据进行了修改,导致读取到的信息不一样)
(第三种对应,使用一个事务向表格插入数据前,先查询一下,里面没有目标数据;但是后面执行insert into 插入命令时,表格中已经有了我们要插入的数据,但是使用select 查询命令时仍然查不到,也插入不了,考虑先提交当前事务看看,可能就有了。这样的重点在插入操作)
这些问题的共性,一般都是在一个事务未完成的时候,下一个事务就介入当前事务所用的表格,所以需要注意下。
幻读:
4、事务隔离级别(X号表示隔离级别可以解决的问题)
隔离越厉害性能越差。最后一种是串行访问,当前事务未处理完之前,其他事务的命令无法执行
1、设置隔离级别为 serializable 时,第一张图是在其中一个事务中进行更新数据,第二个是在第一个更新完没有提交的时候,就卡在那里了。
此时信息已经更新了
当提交后:当前事务中是这样的,另外一个事务中报了超时错误(可能时间间隔长了)
5、事务的结束和重新开始
开始可以使用 begin和start transaction;当提交后,当前事务就算结束了。这个没有找到类似的资料。
不过处理过程中,不要让事务中使用的命令超时,超时的话,可能系统会自己重新开始事务,以免出现不必要的麻烦