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

seo站群系统无锡网站设计哪家公司好

seo站群系统,无锡网站设计哪家公司好,抖音黑科技引流拓客软件,高明网站设计服务MySQL的事务性也是其重要特性之一。 什么是事务#xff1a;事务的本质是并发控制的单元#xff0c;是用户定义的一个操作序列。这些操作要么都做#xff0c;要么都不做#xff0c;是 一个不可分割的工作单位。 目的#xff1a;事务的目的在于将数据库从一种一致性状态转…MySQL的事务性也是其重要特性之一。 什么是事务事务的本质是并发控制的单元是用户定义的一个操作序列。这些操作要么都做要么都不做是 一个不可分割的工作单位。 目的事务的目的在于将数据库从一种一致性状态转换为另一种一致性状态保证系统始终处于一个完整且正确的状态。 组成事务可由一条非常简单的 SQL 语句组成也可以由一组复杂的 SQL 语句组成。 特征在数据库提交事务时可以确保要么所有修改都已经保存要么所有修改都不保存 事务是访问并更新数据库各种数据项的一个程序执行单元。 事务控制语句 -- 显示开启事务 START TRANSACTION | BEGIN-- 提交事务并使得已对数据库做的所有修改持久化 COMMIT-- 回滚事务结束用户的事务并撤销正在进行的所有未提交的修改 ROLLBACK-- 创建一个保存点一个事务可以有多个保存点 SAVEPOINT identifier-- 删除一个保存点 RELEASE SAVEPOINT identifier-- 事务回滚到保存点 ROLLBACK TO [SAVEPOINT] identifier 一、事务的ACID特性 1. ACID 四大特性 特性描述作用A原子性Atomicity事务是不可分割的最小工作单元要么全部执行成功要么全部回滚。确保事务中所有 SQL 语句要么都成功要么都失败。C一致性Consistency事务执行前后数据库必须保持一致状态不会破坏数据的完整性。保证数据在事务开始和结束后满足所有约束如外键、唯一性等。I隔离性Isolation多个事务同时执行时彼此不会相互影响避免脏读、幻读等问题。MySQL 通过不同的隔离级别控制事务之间的可见性。D持久性Durability事务一旦提交数据就会永久存储即使系统崩溃也不会丢失。通过 redo log 和 binlog 保证事务的持久性。 2. ACID 详解 2.1 原子性Atomicity ✅ 事务必须是不可分割的整体 如果某个操作失败事务会回滚撤销所有已执行的操作。MySQL 通过 UNDO LOG回滚日志实现回滚机制。 ✅ 示例 START TRANSACTION; UPDATE accounts SET balance balance - 100 WHERE id 1; UPDATE accounts SET balance balance 100 WHERE id 2; ROLLBACK; -- 撤销所有操作如果发生错误或断电所有已执行的 SQL 语句都会被回滚保证账户数据不丢失。 2.2 一致性Consistency ✅ 事务执行前后数据必须满足完整性约束 事务不能破坏数据库的外键约束、唯一性约束等规则。 ✅ 示例 假设 accounts 表规定 balance 0那么 START TRANSACTION; UPDATE accounts SET balance balance - 100 WHERE id 1; UPDATE accounts SET balance balance 100 WHERE id 2; COMMIT;如果某个账户余额变成负数事务必须回滚保持数据一致性。 2.3 隔离性Isolation ✅ 多个事务并发执行时彼此的修改互不影响 解决脏读、不可重复读、幻读等问题。MySQL 提供 四种事务隔离级别 READ UNCOMMITTED读未提交 → 允许读取未提交数据可能导致脏读。READ COMMITTED读已提交 → 只能读取已提交数据但可能出现不可重复读。REPEATABLE READ可重复读MySQL 默认 → 多次查询结果一致避免不可重复读。SERIALIZABLE可串行化 → 最高隔离级别强制事务串行执行性能最低。 ✅ 示例 SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ; START TRANSACTION; SELECT balance FROM accounts WHERE id 1; -- 第一次读取 -- 其他事务修改 balance SELECT balance FROM accounts WHERE id 1; -- 仍然是原来的值 COMMIT;可重复读默认能保证第二次查询仍然返回原始数据避免不可重复读问题。 2.4 持久性Durability ✅ 事务一旦提交数据就必须永久存储 MySQL 通过 Redo Log重做日志 和 Binlog二进制日志 记录已提交的事务。即使服务器崩溃重启后 MySQL 也能恢复数据。 ✅ 示例 START TRANSACTION; UPDATE orders SET status shipped WHERE id 123; COMMIT; -- 事务提交后数据不会丢失即使 MySQL 崩溃订单状态仍然是 shipped。 二、四大隔离级别详解 1. MySQL 四大事务隔离级别 MySQL 提供四种 事务隔离级别由低到高 隔离级别脏读不可重复读幻读性能SQL 设置READ UNCOMMITTED读未提交❌ 可能❌ 可能❌ 可能✅ 性能最高SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;READ COMMITTED读已提交✅ 不可能❌ 可能❌ 可能⏳ 适中SET TRANSACTION ISOLATION LEVEL READ COMMITTED;REPEATABLE READ可重复读MySQL 默认✅ 不可能✅ 不可能❌ 可能⏳ 适中SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;SERIALIZABLE可串行化✅ 不可能✅ 不可能✅ 不可能❌ 性能最低SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; ✅ 解决了该问题 ❌ 可能出现该问题 2. 事务隔离级别问题详解 2.1 脏读Dirty Read 定义一个事务可以读取到另一个未提交事务的修改。如果该事务回滚则读取到的数据是无效的造成数据不一致。 示例 事务 A 修改 balance 1000 → 500但未提交。事务 B 读取 balance 500但事务 A 可能回滚。事务 A 回滚balance 变回 1000但事务 B 读到了错误的数据。 ✅ 解决方法 READ COMMITTED 及以上级别可以避免脏读。 2.2 不可重复读Non-Repeatable Read 定义同一事务内多次查询同一条记录但结果不一致因为另一个事务修改并提交了数据。 示例 事务 A 读取 balance 1000。事务 B 修改并提交 balance 500。事务 A 再次读取 balance发现变成 500数据发生变化。 ✅ 解决方法 REPEATABLE READ 及以上级别可以避免不可重复读。 2.3 幻读Phantom Read 定义一个事务内多次查询相同条件的数据但结果不一致因为另一个事务插入/删除了数据。 示例 事务 A 运行 SELECT * FROM users WHERE age 30;返回 5 条数据。事务 B 插入 一条 age 30 的数据并提交。事务 A 再次运行 相同查询返回 6 条数据发生幻读。 ✅ 解决方法 SERIALIZABLE 级别可以避免幻读使用表级锁。InnoDB 默认通过 GAP 锁避免幻读。 3. 事务隔离级别总结 隔离级别适用场景优缺点READ UNCOMMITTED读未提交允许最高并发但数据不安全可能发生脏读、不可重复读、幻读READ COMMITTED读已提交大部分数据库的默认级别如 Oracle保证读到已提交数据可能发生不可重复读、幻读REPEATABLE READ可重复读MySQL 默认适合大多数应用保证同一事务多次读取结果一致可能发生幻读SERIALIZABLE可串行化最高级别数据最安全所有事务串行执行 性能最低适用于高安全性应用 三、MVCC详解 1. 什么是 MVCC多版本并发控制 MVCCMulti-Version Concurrency Control多版本并发控制是一种并发控制机制可以让多个事务无锁并发执行提高数据库性能同时避免脏读、不可重复读等问题。 MVCC 主要用于 InnoDB 存储引擎默认支持 REPEATABLE READ 隔离级别。通过 数据行的多个版本使得读操作不会被写操作阻塞提升并发性能。 2. MVCC 解决了哪些问题 ✅ 避免脏读事务只能读取已经提交的数据。 ✅ 避免不可重复读在同一事务内多次读取相同数据结果保持一致。 ✅ 提高并发性能读操作无需加锁避免锁竞争。 ❌ 无法解决幻读MVCC 无法防止插入数据带来的幻读需要使用 GAP 锁。 3. MVCC 的实现原理 3.1 MVCC 依赖的关键机制 MVCC 在 InnoDB 中主要依赖以下 三个重要的存储结构 隐藏列隐式事务 ID 和回滚指针Undo Log回滚日志Read View读视图 3.2 MVCC 关键实现细节 1隐藏列 InnoDB 为每个数据行额外存储两个隐藏列 trx_id记录插入/修改该行的事务 ID。roll_pointer指向 Undo Log可通过回滚日志获取数据的旧版本。 2Undo Log回滚日志 作用存储旧版本数据使得历史版本可读多版本存储。实现 每次 UPDATE 或 DELETE都会把旧值存入 Undo Log并更新 roll_pointer 指向旧版本数据。事务回滚时Undo Log 可用于恢复旧数据。 3Read View读视图 作用控制事务可见性决定事务是否可以看到某个版本的数据。核心逻辑 事务 T1 开启时会生成 Read View包含当前活跃事务的 trx_id 列表。查询数据时 trx_id 小于 Read View 最小活跃事务 ✅ → 可见数据已提交。trx_id 在活跃事务范围内 ❌ → 不可见数据未提交。trx_id 大于当前事务 ID ❌ → 不可见数据由新事务插入。 事务 T1 只能看到 Read View 创建时的数据快照即快照读。 4. MVCC 读写方式 1快照读Snapshot Read 读取的是数据的历史版本不加锁提高查询性能。适用 SQL实现方式 Read View 读取符合当前事务可见性的数据。Undo Log 提供历史版本数据。 2当前读Current Read 读取的是最新版本数据会加锁。适用 SQL需要保证数据一致性实现方式 事务需要读取最新版本数据并阻塞其他事务修改该数据。 5. MVCC 在不同隔离级别下的行为 隔离级别快照读当前读READ UNCOMMITTED读未提交读取未提交的数据不安全直接读取最新版本READ COMMITTED读已提交读取最新已提交版本加锁读取最新数据REPEATABLE READ可重复读MySQL 默认同一事务内多次查询结果一致加锁读取最新数据SERIALIZABLE可串行化强制事务串行执行加锁阻塞其他事务 6. MVCC 适用范围 ✅ 适用于 InnoDB 表默认支持 MVCC。 ❌ 不适用于 MyISAMMyISAM 不支持事务不会存储多个数据版本。 ❌ 不适用于 SERIALIZABLE 级别MVCC 失效会强制加锁。 7. MVCC 总结 机制作用隐藏列trx_id、roll_pointer记录事务 ID、旧数据指针Undo Log回滚日志存储数据的历史版本Read View读视图确定事务可见性控制快照读 MVCC 优势 ✅ 读操作不加锁并发性能高。 ✅ 保证事务隔离性避免脏读、不可重复读问题。 MVCC 局限 ❌ 需要存储多个版本的数据占用空间。 ❌ 无法避免幻读需要GAP 锁。 适用场景 ✅ OLTP高并发事务处理场景如 银行系统、电商订单管理。 ✅ 查询频繁但更新少的系统如 分析报表。 MVCC 是 MySQL 高性能事务控制的核心合理利用 MVCC 机制可以大幅提升数据库性能同时保证数据一致性 四、MySQL中锁机制 MySQL 的锁机制用于控制多个事务并发访问数据库时的数据一致性和并发性。不同的存储引擎如 InnoDB 和 MyISAM实现的锁机制有所不同InnoDB 采用更细粒度的锁控制并支持 行级锁、表级锁 和 意向锁 等。 1. MySQL 锁的分类 MySQL 的锁可分为 全局锁、表级锁 和 行级锁其中行级锁又包括共享锁、排他锁、意向锁、间隙锁等。 锁类型适用范围特点全局锁作用于整个数据库FLUSH TABLES WITH READ LOCK适用于备份数据影响所有操作。表级锁作用于整张表LOCK TABLES如 MyISAM 存储引擎使用表锁事务并发能力低。行级锁作用于单行数据InnoDB 支持提供更高的并发性能但需要管理更多的锁信息。 2. MySQL 表级锁 2.1 表锁Table Lock 适用于 MyISAM每次锁定整个表不支持行级锁。 操作SQL 语句特性加读锁共享锁LOCK TABLES users READ;其他线程可读但不可写加写锁排他锁LOCK TABLES users WRITE;其他线程不可读也不可写释放表锁UNLOCK TABLES;释放锁其他事务可访问 ❌ 缺点影响并发大多数情况下不推荐使用。 3. MySQL 行级锁 3.1 共享锁S 锁Shared Lock 多个事务可同时读取数据但不能修改数据。适用于 SELECT ... LOCK IN SHARE MODE。 应用场景如果多个事务需要并发读取数据并且不希望数据被修改可使用共享锁。  3.2 排他锁X 锁Exclusive Lock 排他性强其他事务不能读取或修改被锁定的行。适用于 SELECT ... FOR UPDATE。 应用场景用于更新前的查询确保数据在更新前不会被其他事务修改。  3.3 意向锁Intent Lock 自动加锁用于标识事务希望获取行级锁防止表锁和行锁冲突。InnoDB 自动管理开发者无需手动控制。 锁类型作用意向共享锁ISIntent Shared事务想要加 S 锁表级锁不能加 X 锁意向排他锁IXIntent Exclusive事务想要加 X 锁表级锁不能加 S/X 锁 应用场景防止表级锁与行级锁冲突提高锁管理效率。 3.4 间隙锁Gap Lock防止幻读 作用防止幻读用于 REPEATABLE READ 隔离级别。 应用场景当事务查询 age BETWEEN 18 AND 25 时即使不存在数据InnoDB 仍会锁住范围防止其他事务插入 age20 的新数据。 3.5 Next-Key Lock间隙锁 行锁 锁定一行数据及其范围防止新数据插入。InnoDB 在 REPEATABLE READ 级别下默认使用避免幻读。 如果 id10 存在InnoDB 不仅锁定该行还会锁定 id10 之后的索引范围**防止插入新记录。 4. 死锁Deadlock及避免方法 4.1 什么是死锁 死锁是指两个或多个事务互相等待对方释放锁导致事务无法继续执行。 4.2 如何避免死锁 方法策略固定访问顺序保证所有事务按照相同顺序访问资源避免循环等待。减少锁的持有时间及时提交事务避免长时间持有锁。使用较高的隔离级别SERIALIZABLE 可以减少并发避免复杂死锁。索引优化减少锁定的行数优化 WHERE 条件避免锁住大量数据。 总结 锁类型作用适用存储引擎全局锁锁住整个数据库影响所有操作所有存储引擎表级锁锁住整张表适用于 MyISAMMyISAMInnoDB行级锁只锁住特定行提高并发性能InnoDB共享锁S 锁允许读取不允许修改InnoDB排他锁X 锁其他事务不能读也不能写InnoDB意向锁IS/IX防止表级锁和行级锁冲突InnoDB间隙锁Gap Lock防止幻读锁定范围InnoDBNext-Key Lock行锁 间隙锁避免幻读InnoDB
http://www.pierceye.com/news/944133/

相关文章:

  • 网站做自适应好不好网站开发结构图
  • wordpress sky主题东莞整站优化排名
  • 黑龙江 建设监理协会网站开发公司资质查询
  • 中标建设集团有限公司 网站怀化主要网站
  • 国外网站seo国外企业网站建设
  • 很简单的做设计的网站网站建设会议讲话
  • 泉港区建设局网站廉政配置wordpress环境
  • 公众号开发培训网站谷歌优化怎么做
  • 网站设计合理汕头市潮南区紧急提醒
  • 国外网站流量查询企业网站报价单
  • 聊城高唐网站建设公司wordpress设置域名
  • 有帮忙做儿童房设计的网站吗东莞横沥网站制作
  • 国外网站模板欣赏WordPress 编辑器修改默认字号
  • 厦门同安网站建设视频购物网站开发方案
  • 什么是建设网站的主题兼职做问卷调查的网站
  • 装饰网站建设软件下载公司旅游视频网站模板免费下载
  • aws网站建设个体户做网站去哪里做
  • 用四字成语做网站域名好吗宁波网站推广专业服务
  • 深圳网站建设公司是网络推广网上营销
  • 网站视频站建设教程和仿qq商城版淘宝客网站源码模板+带程序后台文章dede织梦企业程序
  • 温州红酒网站建设长沙移动网站建设
  • 如何制作网站?企业网站制作步骤
  • 桓台县旅游网站建设购物网站建设技术难点
  • 单页网站推广网站qq链接怎么做
  • wordpress仿站步骤平乡网站建设
  • 青岛高端网站建设公司新网站seo技术
  • 手机网站后台甘肃网络推广技巧
  • 做co网站阿里云建站方案
  • 如何做网站首页优化怎么查网站点击量
  • 北京网站制作百度推广潜江资讯网二手房出售