【MySQL事务创建】


前言

为了方便大家理解,我写的可能会有点多,不要嫌弃,哈哈


一、为什么要使用事务?

MySQL执行的过程是自上而下,这样就会出现一个问题,当你给另一个人转账时,你转了500元,update语句执行成功,但另一个人的update语句出现了错误,执行失败了,他没有收到钱,而你的钱也就白白没了。
事务的作用便是防止这种错误的发生,要么所有操作全部完成,要么所有操作全部不执行。


二、事务的特性

1.原子性:事务是一个完整的操作,对于事物的所有操作,要么全部完成,要么全部失败。
2.一致性:了解各个数据之间的关系,在进行修改、删除等操作时要保持一致,比如(我转了500块给你,我就少了五百块,你多了五百块);
3.隔离性:事务与事务之间的执行不能相互干扰;
4.持久性:事务进行提交后对系统的影响是永久的;


三、事务的开启与关闭

1.自4.1版本,InnoDB就被MySQL windows安装包指定为默认引擎,MySQL中的事务默认是开启的,这也就意味着我们的每一次操作都是一个独立的事务,我们可通过show variables like ‘autocommit’ 语句查看事务是否开启(ON,即1,开启;OFF,即0,关闭);

2.我们也可以通过设置对autocommit的值进行更改,(set autocommit = 0 );当autocommit的值为0时,从此刻进行的所有操作都是属于一个事务,只有进行了commit(提交事务)或rollback(事务回滚)才会结束这个事务,开始一个新的事务;

3.(这点很重要,不要中途改值)若你在autocommit关闭的中途,又开启了autocommit,那么你在关闭期间运行过的操作结果就会自动提交。


四、使用autocommit进行事务操作

提交事务:commit(将未提交的事务进行提交,提交后无法更改)
回滚事务:rollback (将未提交的事务撤回,撤回后无法恢复)

注解:这种方法若是不好理解,可以看另外一种方法,那个简单;

注意:(最简单的操作,创建一个主键,后面的就不用看了)由于本文没有创建索引,修改或删除语句运行时会出现报错为 1175 的错误,这是需要将 SQL_SAFE_UPDATES 设置为 0,即OFF (不要随便设置它的值,可能在删除或修改时丢失大量数据)具体操作可看链接https://www.cnblogs.com/fengff/p/10774145.html

代码如下(示例):


//这三条注释都是用于不是MySQL windows版本的
//创建数据表:create table 表名(属性) type = INNODB/BDB;
//(不建议)更改数据表的类型:alter table 表名 type = INNODB/BDB
//使用alter table 操作可能会使数据表数据丢失,请提前备份

SET SQL_SAFE_UPDATES = 0;//将MySQL的安全模式关闭,原因:本文没有索引,进行修改或删除操作会报(1175)的错误
use test;//不要忘记更换数据库
//我的已经是INNODB存储引擎
create table demo
(
	dname varchar(10),
    money int
)charset utf8mb4;

show variables like 'autocommit';
-- 通过上一句语句可得出,mysql 的autocommit值为 on ,1 (自动提交),当然MySQL默认操作模式就是autocommit自动提交模式
-- 此时进行的任何dml(insert,delete,update)操作都会自动提交
-- 无法采用rollback进行回滚事务
-- 运行下一句代码后,查看表格数据是否更新,你会发现表格数据已经更新
insert into demo values('艾雨',5000);
-- 此时再运行下一句代码,你会发现表的数据还是没有任何变化。
rollback;

-- 此时你把autocommit的值设置成 off,0 (取消自动提交)
set autocommit = 0;
-- 再次查看你会发现,autocommit的值变成了 off,即代表MySQL取消了自动提交模式
show variables like 'autocommit';
-- 这时运行下一行代码,再去查看表的值是否发生变化
insert into demo values('豪斯',5000);
-- 现在你再运行这个代码后再去查看表的数据是否发生变化时,你会发现表的数据不见了
rollback;
-- 当你再运行一次这个代码时,表的数据会增加一条信息
insert into demo values('豪斯',5000);
-- 但你再运行下一句代码后,不要着急走,看下面
commit;
-- 在运行一次下一句代码后去刷新表格,你会发现表的数据没有消失掉
rollback;
-- 这时你在把下面几句代码全部运行了,表的数据会增加5条
insert into demo values('豪斯',5000);
insert into demo values('豪斯',5000);
insert into demo values('豪斯',5000);
insert into demo values('豪斯',5000);
insert into demo values('豪斯',5000);
-- 再运行这句代码,你会发现5条数据都没了,相信到这里你也应该基本理解了
rollback;
-- 根据此过程你可以进行你想要的操作,成功了就提交(commit),失败了就回滚(rollback)

五、使用start transaction创建事务

开始事务:start transaction(可以在autocommit为ON的时候创建一个新的事务)

注意:1、同一个查询选项卡下只能存在一个事务,运行一次start transaction语句就相当于创建一个事务,所以在未完成所有操作之前不要运行第二次start transaction语句(运行了的话之前所有的操作产生的结果都会默认提交,不可撤回);

2、若在 autocommit 为 OFF 的情况下进行了一系列操作,但在这时运行了 start transaction 语句的话,之前在autocommit为 OFF 下进行的所有操作产生的结果会默认提交(不可撤回);

3、(最简单的操作,创建一个主键,后面的就不用看了)由于本文没有创建索引,修改或删除语句运行时会出现报错为 1175 的错误,这时需要将 SQL_SAFE_UPDATES 设置为 0,即OFF (不要随便设置它的值,可能在删除或修改时丢失大量数据)具体操作可看链接https://www.cnblogs.com/fengff/p/10774145.html

代码如下(示例):


//这三条注释都是用于不是MySQL windows版本的
//创建数据表:create table 表名(属性) type = INNODB/BDB;
//(不建议)更改数据表的类型:alter table 表名 type = INNODB/BDB
//使用alter table 操作可能会使数据表数据丢失,请提前备份

SET SQL_SAFE_UPDATES = 0;//将MySQL的安全模式关闭,原因:本文没有索引,进行修改或删除操作会报(1175)的错误
use test;//不要忘记更换数据库
//我的已经是INNODB存储引擎
create table demo
(
	dname varchar(10),
    money int
)charset utf8mb4;
-- 开启一个新的事务
start transaction;
-- 添加一条数据
insert into demo values('斯哈',5000);
-- 对数据进行修改,比如:加2000
update demo set money = money + 2000 where dname = '斯哈';
-- 这时就可以去表中查看表的数据是否得到你想要的改变
-- 如果得到,就运行commit进行提交,如果没有得到就运行rollback进行回滚
-- 回滚事务
rollback;
-- 提交事务
commit;


总结

有笔友和网友发现有不对的地方可以与我细说,我一定及时改正

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值