当前位置: 首页 > news >正文

网站制作教学广州网络推广平台

网站制作教学,广州网络推广平台,网站需要去工信部做备案,网页设计师的工作时间在数据库操作中#xff0c;确保数据的准确性和一致性至关重要。MySQL 事务#xff08;Transaction#xff09;提供了一种机制#xff0c;可以将一系列数据库操作捆绑成一个逻辑单元#xff0c;要么全部成功执行#xff0c;要么全部不执行#xff0c;从而保障数据的完整可…在数据库操作中确保数据的准确性和一致性至关重要。MySQL 事务Transaction提供了一种机制可以将一系列数据库操作捆绑成一个逻辑单元要么全部成功执行要么全部不执行从而保障数据的完整可靠。本文将深入探讨 MySQL 事务的概念、ACID 原则、隔离级别、使用方法以及最佳实践。 一、什么是事务 事务Transaction 是数据库管理系统DBMS执行过程中的一个逻辑单位它由一个或多个数据库操作如 INSERT, UPDATE, DELETE组成这些操作共同完成一项具体的业务任务。事务的核心特性是原子性事务内的所有操作要么全部成功提交Commit数据状态发生永久改变要么全部失败回滚Rollback数据库恢复到事务开始前的状态仿佛什么也没发生过。 简单类比 银行转账是一个经典的事务场景。从账户 A 向账户 B 转账 100 元包含两个操作 账户 A 扣款 100 元。账户 B 存款 100 元。 这两个操作必须共同组成一个事务。如果扣款成功但存款失败例如系统故障整个转账操作必须回滚账户 A 的钱要退回以保证资金不会凭空消失或产生。 二、为什么需要事务事务的重要性 事务在多用户、高并发的数据库环境中扮演着不可或缺的角色其主要重要性体现在 数据一致性Consistency 确保数据库从一个一致的状态转变到另一个一致的状态。即使在并发操作或系统故障的情况下事务也能防止数据损坏或出现不合逻辑的状态。数据可靠性Reliability 通过原子性和持久性事务保证了用户操作的最终结果是可靠的不会因为部分失败而导致数据混乱。并发控制Concurrency Control 在多个用户同时访问和修改数据时事务的隔离性机制可以防止各种并发问题如脏读、不可重复读、幻读确保每个用户感觉像是在独立使用数据库。错误恢复Error Recovery 如果事务执行过程中发生错误如违反约束、磁盘已满、系统崩溃可以回滚事务使数据库恢复到操作开始前的状态避免了不完整或错误的数据提交。 三、事务的核心原则ACID ACID 是衡量事务可靠性的四个核心特性是事务管理必须遵循的黄金标准 原子性 (Atomicity): 定义 事务是一个不可分割的工作单元事务中的所有操作要么都发生要么都不发生。如果事务中的任何一个操作失败则整个事务都会回滚到最初状态就像这个事务从未执行过一样。实现 主要通过数据库的日志机制如 Undo Log来实现。 一致性 (Consistency): 定义 事务必须使数据库从一个一致性状态转变到另一个一致性状态。这意味着事务执行的结果必须是使数据库保持数据完整性约束如主键、外键、唯一约束、检查约束等以及业务规则的正确性。实现 由应用程序和数据库共同保证。应用程序逻辑负责业务层面的一致性数据库负责通过约束和触发器等机制维护数据层面的一致性。原子性、隔离性和持久性也是保证一致性的基础。 隔离性 (Isolation): 定义 一个事务所做的修改在最终提交以前对其他事务是不可见的。多个并发事务之间应相互隔离使得它们在逻辑上看起来是串行执行的以防止并发操作导致的数据混乱。实现 主要通过锁机制Locking和多版本并发控制MVCC来实现。MySQL 提供了不同的事务隔离级别来平衡隔离性和并发性能。 持久性 (Durability): 定义 一旦事务成功提交则它对数据库数据的修改就是永久性的即使后续系统发生故障如断电或崩溃已提交的数据也不会丢失。实现 主要通过数据库的日志机制如 Redo Log和数据同步机制如写时复制、定期刷盘来实现。 四、MySQL 中的事务控制SQL 命令 MySQL 中控制事务主要使用以下 SQL 语句 开始事务 (START TRANSACTION / BEGIN): 显式地标记一个事务的开始。 START TRANSACTION; -- 或者 BEGIN;执行 START TRANSACTION 后后续的 SQL 语句直到 COMMIT 或 ROLLBACK都将作为该事务的一部分。 提交事务 (COMMIT): 将事务中的所有修改永久保存到数据库中。 COMMIT;回滚事务 (ROLLBACK): 撤销事务中尚未提交的所有修改使数据库恢复到事务开始前的状态。 ROLLBACK;保存点 (SAVEPOINT): 允许在事务内部创建一个“保存点”可以将事务回滚到某个指定的保存点而不是整个事务回滚。 SAVEPOINT 保存点名称;回滚到保存点 ROLLBACK TO SAVEPOINT 保存点名称;释放保存点通常不需要手动释放COMMIT 或 ROLLBACK 整个事务会自动释放 RELEASE SAVEPOINT 保存点名称;设置自动提交 (autocommit): MySQL 默认情况下是自动提交模式 (autocommit1)即每条 SQL 语句非 DDL 语句如 SELECT, INSERT, UPDATE, DELETE都会被当作一个独立的事务自动执行并提交。 查看当前 autocommit 状态SELECT autocommit; -- 1 表示开启0 表示关闭关闭自动提交当前会话SET autocommit 0;关闭后需要显式使用 COMMIT 来提交事务或者使用 ROLLBACK 来回滚。开启自动提交当前会话SET autocommit 1;当使用 START TRANSACTION 或 BEGIN 时当前会话的 autocommit 会被临时禁用直到事务通过 COMMIT 或 ROLLBACK 结束。 五、并发事务可能引发的问题 如果没有适当的隔离机制多个事务并发执行时可能会导致以下问题 脏读 (Dirty Read): 描述 一个事务读取到了另一个事务尚未提交的数据。如果那个未提交的事务最终回滚了那么第一个事务读取到的就是“脏”数据是不正确的。示例 事务A修改了某行数据但未提交事务B读取了该修改后的数据。如果事务A回滚事务B读取的数据就是无效的。 不可重复读 (Non-Repeatable Read): 描述 一个事务在同一次查询中对同一行数据执行多次相同的查询但得到了不同的结果。这是因为在查询间隔期间有其他事务提交了对该行数据的修改。示例 事务A读取某行数据然后事务B修改了该行数据并提交事务A再次读取该行数据时发现数据已变。 幻读 (Phantom Read): 描述 一个事务在同一次查询中对某个范围的数据执行多次相同的查询但第二次查询返回了第一次查询中没有出现的“幻影”行新增的行或者第一次查询中的某些行消失了被删除的行。这是因为在查询间隔期间有其他事务插入或删除了符合该范围条件的行并提交。示例 事务A查询所有年龄大于20岁的用户得到10条记录。事务B插入了一条新的年龄为25岁的用户并提交。事务A再次执行相同的查询发现变成了11条记录。与不可重复读的区别 不可重复读侧重于同一行数据的修改而幻读侧重于一个范围内数据的增删。 丢失更新 (Lost Update): 第一类丢失更新 一个事务的回滚导致了另一个已提交事务的更新丢失。在现代数据库中通过锁和MVCC机制通常可以避免第二类丢失更新 两个事务同时读取同一数据基于该数据进行修改然后先后提交。后提交的事务会覆盖先提交事务的更新导致先提交事务的更新“丢失”。例如库存扣减问题可以通过悲观锁如 SELECT ... FOR UPDATE 或乐观锁来解决。 六、事务隔离级别 (Transaction Isolation Levels) 为了解决上述并发问题SQL 标准定义了四种事务隔离级别。不同的隔离级别在数据一致性和并发性能之间做出不同的权衡。隔离级别越高数据一致性越好但并发性能可能越低。 隔离级别脏读 (Dirty Read)不可重复读 (Non-Repeatable Read)幻读 (Phantom Read)读未提交 (Read Uncommitted)可能可能可能读已提交 (Read Committed)不可能可能可能可重复读 (Repeatable Read)不可能不可能可能 (InnoDB通过MVCCNext-Key Lock解决了一部分)串行化 (Serializable)不可能不可能不可能 读未提交 (Read Uncommitted): 最低的隔离级别。一个事务可以读取到其他事务尚未提交的修改。会导致脏读、不可重复读和幻读。并发性能最高但数据一致性最差实际应用中很少使用。 读已提交 (Read Committed): 一个事务只能读取到其他事务已经提交的修改。解决了脏读问题。仍然可能发生不可重复读和幻读。大多数数据库的默认隔离级别如 Oracle, SQL Server, PostgreSQL。 可重复读 (Repeatable Read): 确保在一个事务内多次读取同一行数据时结果总是一致的即使其他事务在此期间修改了该行并提交。解决了脏读和不可重复读问题。标准的 SQL 定义下此级别仍可能发生幻读。MySQL InnoDB 存储引擎的默认隔离级别。 InnoDB 通过多版本并发控制MVCC和 Next-Key Locking 机制在很大程度上避免了幻读问题。 串行化 (Serializable): 最高的隔离级别。强制事务串行执行即一个接一个地执行完全避免了并发问题。解决了脏读、不可重复读和幻读问题。数据一致性最好但并发性能最差因为事务需要排队等待。 设置事务隔离级别 -- 查看全局隔离级别 SELECT global.transaction_isolation;-- 查看当前会话隔离级别 SELECT session.transaction_isolation; -- 或者 SELECT tx_isolation; (旧版)-- 设置全局隔离级别 (对新建立的连接生效) SET GLOBAL transaction_isolation REPEATABLE-READ;-- 设置当前会话隔离级别 (对当前连接立即生效) SET SESSION transaction_isolation READ-COMMITTED;可设置的值READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE。 七、MySQL 存储引擎与事务 并非所有的 MySQL 存储引擎都支持事务。 InnoDB 默认且最常用的存储引擎完全支持 ACID 事务。提供了行级锁、MVCC 等高级特性来保证事务的正确性和高并发性。MyISAM 不支持事务。操作是原子性的语句级别但不能将多条语句组织成一个事务进行提交或回滚。它使用表级锁并发写性能较低。其他如 Memory, Archive 等引擎通常也不支持事务或支持有限。 因此在需要事务支持的应用中必须选择 InnoDB 作为表的存储引擎。 八、使用事务的最佳实践 保持事务简短 事务应尽可能短小只包含必要的数据库操作。长事务会长时间持有锁增加锁冲突的概率降低并发性能。避免在事务中进行用户交互 不要等待用户输入或进行耗时的外部调用这会导致事务长时间未提交占用资源。先收集所有必要信息再开始事务。合理选择隔离级别 根据业务需求和对数据一致性的要求选择合适的隔离级别。并非总是需要最高的隔离级别较低的隔离级别可以提供更好的并发性。了解不同隔离级别可能带来的问题。显式控制事务 对于需要原子性保证的一系列操作务必使用 START TRANSACTION, COMMIT, ROLLBACK 进行显式控制而不是依赖 autocommit。错误处理 在应用程序代码中务必对事务操作进行恰当的错误处理如 try-catch 块。一旦发生错误应及时 ROLLBACK 事务。注意锁竞争 了解事务如何使用锁行锁、表锁、间隙锁等优化 SQL 查询以减少锁的范围和持有时间。对于热点数据要特别小心锁竞争问题。测试并发场景 在开发和测试阶段模拟并发场景来验证事务的正确性和应用的健壮性。减少不必要的锁定 对于只需要读取数据的操作如果业务允许轻微的数据不一致例如在 Read Committed 级别下可以避免使用 SELECT ... FOR UPDATE 这样的悲观锁以提高并发。
http://www.w-s-a.com/news/443219/

相关文章:

  • 户县网站建设珠海专业制作网站
  • 麦当劳的网站优化建议猎头公司工作怎么样
  • 合肥地区网站制作网页浏览器打不开
  • 做网站的不给ftp网站如何做触屏滑动
  • wordpress statraq重庆百度优化
  • 企业网站官网英文WordPress站点切换为中文
  • 服装公司网站定位一点号自媒体平台
  • 密云微网站建设汽车之家手机官网首页
  • 多语言外贸网站制作苏州建设网站微信公众号
  • 用wordpress建站学什么百度给企业做网站吗
  • 福建城乡建设网站做数码测评的网站
  • 东海县建设局网站wordpress 好用的主题
  • 网站图片设计制作制作一个门户网站需要多少钱
  • 虚拟币交易网站源码自己给网站做支付接口
  • 免费的seo网站在线 crm
  • 绍兴市高速公路建设指挥部网站网站主页和子页风格如何统一
  • 获取网站状态网站租金可以做办公费吗
  • 网站开发执行什么标准号wordpress主题 表白
  • 杭州网站推广与优化凡科网是免费的吗
  • 公司网站的重要性门户网站推广介绍方案
  • 做金融网站看那些素材江门网红打卡景点蓬江区
  • 饮食网站模板建网站中企动力优
  • 郑州 制造 网站东平企业建站公司
  • 天津设计师网站大全展示型网站搭建
  • 南宁网站建设 传导网站开发平台开发公司
  • 网站建设好处上海建设工程网站
  • 黑河哈尔滨网站建设太原网站制作定制开发
  • 建站做网站香河住房与建设局网站
  • 如何制造一个网站域名分类网站
  • 解析视频的网站怎么做凡科网快图