MySQL事务中是否能建表,事务异常建表是否会回滚?

1、准备

-- 创建一个数据库
create database if not exists bank;
-- 切换到bank数据库进行操作
use bank;

-- 创建一个person的表结构
create table person(
`id` int not null auto_increment comment '编号',
`name` varchar(30) not null default '无名氏' comment '姓名',
`money` decimal(12,2) default 0.00 comment '存款',
primary key(`id`)
)engine= innodb charset=utf8;
-- engine:数据库引擎,默认是innodb,myisam以前使用比较多
--  特性    innodb                       myisam   比较
--  事务    支持                        不支持
--  外键    支持                        不支持    
--  索引    不支持全文索引              全文索引,在涉及全文索引领域的查询效率上MyISAM速度更快高 注意:5.7以后的InnoDB支持全文索引了  
--  锁      支持表、行(默认)级锁        只支持表级锁                 

-- 给表里插入数据
insert into person (`name`,`money`) values ('a',1000.00),('b',500);

-- ===========================模拟一下事务===============================
-- 特性:
-- 1.原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成(一个失败就全部失败,全部成功才成功)
-- 2.一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏
-- 3.持久性:事务处理结束后,对数据的修改就是永久的
-- 4.隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力

-- 事务的隔离级别:
-- 隔离级别	                       脏读(Dirty Read)	   不可重复读(NonRepeatable Read)	    幻读(Phantom Read)
-- 未提交读(Read uncommitted)	   可能	                   可能	                                可能
-- 已提交读(Read committed)	     不可能	                 可能	                                可能
-- 可重复读(Repeatable read)	   不可能	                 不可能                              	可能
-- 可串行化(Serializable )	     不可能	                 不可能	                              不可能

在这里插入图片描述

2、测试事务

set autocommit =0;-- 关闭事务自动提交 0:关闭(系统默认是开启状态)

start transaction;

update person set money = money-100 where `name` = 'a'; -- a账户转出00元
update person set money = money+200 where `name` = 'b'; -- b账户收入200元

commit; -- 如果以上语句执行成功,则提交事务

rollback; -- 如果执行失败,则执行回滚操作

set autocommit = 1; -- 开启事务自动提交 1:开启

在这里插入图片描述

3、测试事务中建表

set autocommit =0;-- 关闭事务自动提交 0:关闭(系统默认是开启状态)

start transaction;

update person set money = money-100 where `name` = 'a'; -- a账户转出200元
update person set money = money+200 where `name` = 'b'; -- b账户收入200元

-- 创建一个person的表结构
create table person2(
`id` int not null auto_increment comment '编号',
`name` varchar(30) not null default '无名氏' comment '姓名',
`money` decimal(12,2) default 0.00 comment '存款',
primary key(`id`)
)engine= innodb charset=utf8;

commit; -- 如果以上语句执行成功,则提交事务

rollback; -- 如果执行失败,则执行回滚操作

set autocommit = 1; -- 开启事务自动提交 1:开启

在这里插入图片描述
正常

4、事务中建表(事务中出现异常)

set autocommit =0;-- 关闭事务自动提交 0:关闭(系统默认是开启状态)

start transaction;

update person set money = money-100 where `name` = 'a'; -- a账户转出200元
update person set money = money+200 where `name` = 'b'; -- b账户收入200元

-- 创建一个person的表结构
create table person3(
`id` int not null auto_increment comment '编号',
`name` varchar(30) not null default '无名氏' comment '姓名',
`money` decimal(12,2) default 0.00 comment '存款',
primary key(`id`)
)engine= innodb charset=utf8;

999 -- 异常
commit; -- 如果以上语句执行成功,则提交事务

rollback; -- 如果执行失败,则执行回滚操作

set autocommit = 1; -- 开启事务自动提交 1:开启

在这里插入图片描述
表还是创建出来了

5、结论

结论:MySQL的DDL语句是非事务的,MySQL 事务 是对数据进行操作,对结构没有影响,比如创建表、删除表,事务就不起作用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

我们都有光明的未来

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

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

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

打赏作者

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

抵扣说明:

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

余额充值