首页
学习
活动
专区
圈层
工具
发布

mysql事务两张表

基础概念

MySQL事务是一组一起执行或都不执行的SQL语句。如果在事务中的某个操作失败,整个事务可以回滚到开始之前的状态,从而保证数据的完整性和一致性。事务具有四个特性,通常被称为ACID特性:

  1. 原子性(Atomicity):事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
  2. 一致性(Consistency):事务必须使数据库从一个一致性状态变换到另一个一致性状态。
  3. 隔离性(Isolation):事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不会互相干扰。
  4. 持久性(Durability):一旦事务提交,则其结果就是永久的,即使系统崩溃也不会丢失。

相关优势

  • 数据完整性:通过事务,可以确保数据库中的数据始终处于一致状态。
  • 并发控制:事务提供了隔离性,使得多个用户可以同时访问数据库而不会相互干扰。
  • 错误恢复:如果事务中的某个操作失败,可以回滚整个事务,从而避免数据损坏。

类型

MySQL支持多种事务类型,包括:

  • 隐式事务:默认情况下,每个单独的SQL语句都被视为一个事务。
  • 显式事务:通过BEGIN、COMMIT和ROLLBACK语句明确指定事务的开始、结束和回滚。

应用场景

在涉及多张表的操作时,事务尤为重要。例如,在银行转账过程中,需要同时更新两个账户的余额。如果其中一个操作失败,必须回滚整个事务以确保数据的准确性。

两张表的事务示例

假设有两张表:accounts(存储账户信息)和transactions(存储交易记录)。以下是一个简单的转账事务示例:

代码语言:txt
复制
START TRANSACTION;

-- 更新账户A的余额
UPDATE accounts SET balance = balance - 100 WHERE id = 1;

-- 更新账户B的余额
UPDATE accounts SET balance = balance + 100 WHERE id = 2;

-- 插入交易记录
INSERT INTO transactions (from_account, to_account, amount) VALUES (1, 2, 100);

-- 提交事务
COMMIT;

如果在上述操作中的任何一个步骤失败,可以通过ROLLBACK语句回滚整个事务,以保持数据的一致性。

可能遇到的问题及解决方法

  1. 死锁:当两个或更多的事务相互等待对方释放资源时,就会发生死锁。解决死锁的方法通常是设置合适的隔离级别,并优化查询和索引。
  2. 事务超时:长时间运行的事务可能会占用大量资源,导致其他事务等待。可以通过设置事务超时时间来解决这个问题。
  3. 并发问题:在高并发环境下,事务的隔离性可能会受到影响。可以通过调整隔离级别和使用锁机制来解决并发问题。

参考链接

请注意,在实际应用中,应根据具体需求和场景选择合适的事务类型和隔离级别,并确保数据库的性能和可扩展性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

MySQL单表&约束&事务

DQL操作单表 排序 # 通过 ORDER BY 子句,可以将查询出的结果进行排序(排序只是显示效果,不会影响真实数据) SELECT 字段名 FROM 表名 [WHERE 字段 = 值] ORDER...); -- 删除表 DROP TABLE emp2; -- 方式2 创建一个带主键的表 CREATE TABLE emp2( eid INT , ename VARCHAR(20), sex CHAR(...ROLLBACK 表示撤销事务,即在事务运行的过程中发生了某种故障,事务不能继续执行,系统将事务中对数据库的所有已完成的操作全部撤销,回滚到事务开始时的状态 事务的的四大特性ACID 特 性 含义 原...MySQL 事务隔离级别 一个数据库可能拥有多个访问客户端,这些客户端都可以并发方式访问数据库. 数据库的相同数据可能被多个事务同时访问,如果不采取隔离措施,就会导致各种问题, 破坏数据的完整性。...查询得到的数据状态不准确,导致幻读 四种隔离级别 隔离级别相关命令 # 查看隔离级别 select @@tx_isolation; # 设置事务隔离级别,需要退出 MySQL 再重新登录才能看到隔离级别的变化

2.3K30
  • MySQL事务中更新多个表数据时,某些表不支持事务会发生什么???

    我只在Mysql中做了测试,其它数据库各位读者如果有兴趣可以自己试试。 1. 创建测试数据 首先新建三张表:user、company、school。...我们知道InnoDB引擎是支持事务的,而MyISAM引擎不支持事务,因此,在这里,我使用InnoDB作为user和school两个表的引擎,而使用MyISAM作为company的引擎。...三个表结构很简单,数据类型什么的我就不放出来了,把表数据列在下面。...免费获取视频教程,微信搜索公众号:【码农编程进阶笔记】 最后的执行结果,由于company表使用了不支持事务的MyISAM引擎,所以,上述语句对company表数据的操作被真正的执行了,也就是说,company...总结 在平时的工作中,如果涉及到数据库事务操作,一定要对库和表的性质特性了解清楚,以防一些不支持事务的库和表,影响了事务操作的原子性。 你的点赞关注是对我最大的支持,求一键三连:分享朋友圈、点赞、在看

    3.2K10

    MySQL单表模拟锁和事务的几个场景

    在MySQL中对于并发,锁问题总是会有很多值得讨论的地方,但是通常来说,要模拟这些锁或者一些锁的问题需要花点功夫,比如创建多个表,创建大量的数据,然后像调试钟表的秒针一样,让问题刚好复现在哪个时间点上...如果换一个角度,单表来模拟这类而是可以吗,其实是可行的。 今天简单通过单表的测试模拟死锁,事务中的隐式提交(其实可以理解是个bug),间歇锁。...初始化数据 首先的准备工作就是初始化数据,我们创建一个表test,事务隔离级别为默认的RR。...模拟意料之外的事务自动提交 为了基于上面的测试数据,让两条数据成功插入,我们在会话2中结束事务。 mysql>commit; 然后开始做意料之外的事务自动提交测试,这一次我们在同一个会话中测试即可。...mysql > begin; mysql > insert into test values(2015,830); 这个时候如果在会话2中查看,其实会发现,事务已经帮你提交了。

    3.1K80

    表的高级操作:倾斜表&事务表

    表的高级操作:倾斜表&事务表 Hive倾斜表(Skewed Tables) 什么是倾斜表? 对于一列或多列中出现倾斜值的表,可以创建倾斜表(Skewed Tables)来提升性能。...但事务功能仅支持ORC表,而且事务功能依赖分桶的存储格式,所以事务表必须进行分桶操作。 Hive开启事务配置 默认情况下事务是非开启状态的。...set hive.exec.dynamic.partition.mode=nonstrict; 事务表的创建 首先对事务表进行创建,首先需要是ORC表,然后进行分桶,并在表中添加属性’transactional...事务表创建完成后,可以进行行级别的数据更新操作。...对于事务表,可以查看所有正在进行的事务操作: SHOW TRANSACTIONS; 事务表的压缩 随着对事务表的操作累积,delta文件会越来越多,事务表的读取会遍历合并所有文件,过多的文件数会影响效率

    1.6K20

    MySQL事务

    几个并行执行的事务,其执行结果必须与按某一顺序串行执行的结果相一致 隔离性(Isolation):事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的 持久性(Durability):...对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障 提交 默认隔离级别可重复读,若事务级别为读已提交,则终端二不commit的情况下可以读取到终端一的数据。...### 终端一 begin; 开启 insert into students (sname) value ("sss"); commit; 只有commit才表示执行成功 ### 终端二 mysql>...insert into students (sname) value ("kksk"); 测试语句 ### 终端二 mysql> select * from students; +----+-----...-+ | id | sname | +----+-------+ | 1 | Gage | | 2 | sss | | 4 | kksk | +----+-------+ 查看隔离级别 mysql

    3.1K40

    MySQL——事务

    事务概述 事务是数据库系统区别于其他一切文件系统的重要特性之一 事务是一组具有原子性的SQL语句,或是一个独立的工作单元 事务特点 1....原子性 一个事务必须被视为不可分离的最小工作单位,整个事务中的所有操作要么全部提交成功,要么全部失败,对于一个事务来说,不可能只执行其中的一部分操作。...一致性(CONSISTENCY) 一致性是指事务将数据库从一种一致性状态转换到另外一种一致性状态,在事务开始之前和事务结束后数据库中数据的完整性没有被破坏。...3.隔离性(ISOLATION) 隔离性要求一个事务对数据库中数据的修改,在未提交完成之前对于其他事务是不可见的。...大事务 运行的时间比较长,操作的数据比较多的事务 风险: 锁定太多的数据,造成大量的阻塞和锁超时 回滚所需要的时间比较长 执行时间长,容易造成主从延迟 如何处理大事务?

    2.3K20

    Mysql事务

    事务 简单来说,事务就是操作一系列事件,要么全部完成,要么全部不完成。...特性(ACID) 原子性:一系列事件,要么全部完成,要么全部不完成 一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏 持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失...账号2 人民币50元 public static void main(String[] args) throws SQLException { String url = "jdbc:mysql...,不可重复读,虚读 Serializable隔离级别下的事务具有最高的安全性,但是,由于事务是串行执行,所以效率会大大下降 建议细看:事务隔离级别的图文 脏读:一个事务读取到另外一个事务未提交的数据...丢失修改:两个事务同时访问数据,第一个修改数据后,第二个也修改数据,导致第一个修改数据丢失 不可重复读:第一个事务读取到数据后,另外一个事务修改数据并提交后第一个事务再次读取,第一个事务两次读取的数据不一样

    2.3K20

    MySQL 事务

    事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。... ♞ 持久性:即事务完成后,对数据库数据的修改被持久化存储 1.2 事务控制   在 MySQL 命令行的默认设置下,事务都是自动提交的,即执行 SQL 语句后就会马上执行 COMMIT 操作。...直接用 SET 来改变 MySQL 的自动提交模式: # 查看事务提交哦方式 select @@autocommit; # 禁止自动提交 set autocommit = 0; # 开启自动提交...默认 serializable(串行化) - - - 可以解决所有问题但是效率极低 ☞ 隔离级别相关操作 # 查看事务隔离级别 mysql> select @@tx_isolation; +----...,read uncommitted 读未提交 mysql> set global transaction isolation level read uncommitted; Query OK, 0 rows

    2.9K31

    MySQL 事务

    I(Isolation)隔离性:隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。...事务只能读取其他事务提交之后的数据,我们来模拟以下这个过程会出现的问题: 小伙手撕MySQL事务,发生了什么?...我们把这两个事务ID理解为版本号。 从插入数据开始,我们来看一下MySQL如何用这两个版本号来隔离事务。 小伙手撕MySQL事务,发生了什么? 此时又有一个事务进来,增加了一条数据并提交结束。...小伙手撕MySQL事务,发生了什么? MVCC 的查找规则1:只能查找创建时间小于等于当前事务 ID 的数据 小伙手撕MySQL事务,发生了什么?...事务5,尝试修改数据 小伙手撕MySQL事务,发生了什么? 此时回到事务2再次查询数据 小伙手撕MySQL事务,发生了什么?

    2.3K40

    MySQL事务

    一、事务概述 1.1、什么是事务 MySQL 事务主要用于处理操作量大,复杂度高的数据。...1.3、事务提交方式 mysql中有两种事务提交方式: 手动提交 自动提交 二、事务手动提交 2.1、手动提交的过程 事务执行成功的过程:开启事务->执行多条件SQL语句->成功->事务提交 事务执行失败的过程...MySQL 默认每一条 DML(增删改)语句都是一个单独的事务,每条语句都会自动开启一个事务,语句执行完毕自动提交事务,MySQL 默认开始自动提交事务。...事务的提交或回滚,提交:同步临时日志文件中的SQL操作结果到数据库表;回滚:清除临时日志文件 5、事务回滚 我们可以在mysql事务处理过程中定义保存点(SAVEPOINT),然后回滚到指定的保存点前的状态...向表中插入二条件记录 设置保存点,保存点的名字为:insert_point 向表中插入二条件记录 回到保存点:insert_point mysql> start transaction; Query

    5.2K10

    MySQL事务

    隔离性:一个事物在最终提交之前,数据的改变对其他事务是不可见的。 持久性:事务的最终操作结果能被持久保存。 MySQL事务 接下来我们介绍MySQL中的事务是如何保证ACID特性的。...如果执行commit的话,MySQL把最终结果刷到磁盘中。为了保证事务执行中,异常宕机导致事务仍可回滚,undo log的数据也是会被持久化到磁盘的。...为了解决这个问题MySQL在脏数据写入磁盘时: 先把数据复制到Doublewrite buffer 把数据顺序写入共享表空间的文件(第一次写,因为是顺序写所以效率很高) 然后把数据分别写入各个表空间(第二次写...,随机写效率低) 如果在写各表的表空间时发生异常,可以依赖共享表空间的数据进行数据恢复。...举一个具体的例子:我们先构造一张curriculum(课程表): id teacher 1 1 3 3 5 5 事务的执行顺序: 事务一 事务二 START TRANSACTION WITH CONSISTENT

    2.9K20

    MySQL事务

    什么是事务? 事务就是保证一组数据库操作要么全部成功,要么全部失败。MySQL中,事务的支持是在引擎层实现的。...200条,此时就产生了幻读问题 MySQL事务隔离级别 读未提交:一个事务还未提交,它的变更可以被其他事务看到 读提交:一个事务提交以后,它的变更才可以被其他事务看到 可重复读:一个事务执行过程中看到的数据始终保持和事务启动时看到的数据一致...MySQL事务隔离级别设置 1.通过配置文件my.cnf修改 [mysqld] transaction-isolation = REPEATABLE-READ transaction-read-only...关于MVCC的详细细节我们在后续了解完锁以后一起说,这样update语句的所有操作基本就全了(锁+事务+日志)。 MySQL的回滚日志什么时候删除?...因此如果系统中存在过多的长事务,会导致数据库存储空间增加迅速,并且也会占用锁资源,将有可能拖垮整个库。 MySQL如何启动事务? 1.set autocommit=1; 该方式下事务会自动提交。

    1.6K10

    MySQL(事务)

    目录: 事务四大特性 数据库的并发问题 数据库事务的隔离性 隔离级别 设置隔离级别 隐式事务 显式事务 事务四大特性 原子性 原子性是指事务是最小单位,不可分割,事务中的所有操作要么全部成功,...幻读(phantom read) 例如:有两个事务,t1从一个表中读取了一个字段,然后t2在该表中插入了一些新的数据,之后,t1再次读取同一个表,就会出现不同行数; 数据库事务的隔离性 数据库必须具有隔离并运行各个事务的能力...隔离级别 一个事务与其他事务隔离的程度称为隔离级别,数据库中规定了4种事务隔离级别,不同隔离级别对应不同的干扰程度,隔离级别越高,数据一致性越好,但是并发越差 四种隔离级别 MySQL支持4种隔离级别...committed,serializable,默认是同read committed; SQL Server 支持4种隔离级别,默认使用read committed隔离级别; 设置隔离级别 每次启动一个mysql...默认情况下,MySQL,SQL Server,Oracle开启了自动提交的事务。

    2.9K10

    Mysql事务

    存储引擎层:包含了MySQL常见的存储引擎,包括MyISAM,InnoDB和Memory等,最常用的是InnoDB,也是MySQL默认的存储引擎。存储引擎在建表的时候也可以指定。...若账号密码正确,MySQL会根据权限表中的记录来判定权限。...执行器:在执行阶段,MySQL会判断有没有执行语句的权限,若没有权限,会返回没有权限的错误,若有权限,则打开表继续执行。打开表时,执行器会根据你使用的存储引擎,去使用该引擎对接的接口。...行锁和表锁 按照锁的颗粒度可以划分为:行锁和表锁。表锁在操作数据时会锁定整张表,并发性较差,行锁只锁定需要操作的数据,并发性好。...MySQL中不同存储引擎支持的锁是不一样的,例如:MyISAM只支持表锁,而InnoDB即支持表锁也支持行锁,处于性能考虑,绝大多数情况下使用的都是行锁。

    2.9K10
    领券