专业的昆明网站建设浦东网站建设哪家好

张小明 2025/12/31 2:25:44
专业的昆明网站建设,浦东网站建设哪家好,重庆网站模板建站,怎么改网站上的logo一.什么是事务事务把一组SQL语句打包成一个整体去执行,要么全部执行成功,要么全部执行失败.如果某一句SQL执行失败了,之前执行成功的SQL会全部回退到没有执行的状态.例如下面这个例子# 账户表 CREATE TABLE bank_account (id bigint PRIMARY KEY AUTO_INCREMENT,name varchar(2…一.什么是事务事务把一组SQL语句打包成一个整体去执行,要么全部执行成功,要么全部执行失败.如果某一句SQL执行失败了,之前执行成功的SQL会全部回退到没有执行的状态.例如下面这个例子# 账户表 CREATE TABLE bank_account ( id bigint PRIMARY KEY AUTO_INCREMENT, name varchar(255) NOT NULL, # 姓名 balance decimal(10, 2) NOT NULL # 余额 ); INSERT INTO bank_account(name, balance) VALUES(张三, 1000); INSERT INTO bank_account(name, balance) VALUES(李四, 1000); # 更新操作 # 张三余额减少100 UPDATE bank_account set balance balance - 100 where name 张三; # 李四余额增加100 UPDATE bank_account set balance balance 100 where name 李四;如果转账成功,会出现以下结果:1.张三的账户余额减少 100变成 900李四的账户余额增加了 100变成 1100不能出现张三的余额减少而李四的余额没有增加的情况2.张三和李四在发生转账前后的总额不变也就是说转账前张三和李四的余额总额为100010002000转账后他们的余额总数为 900110020003.转账后的余额结果应当保存到存储介质中以便以后读取4.还有一点需要注意在转账的处理过程中张三和李四的余额不能因其他的转账事件而受到干扰以上这四点在事务的整个执行过程中必须要得到保证这也就是事务的 ACID 特性二.事务的ACID特性1.Atomicity (原子性)一个事务中的所有操作要么全部成功要么全部失败不会出现只执行了一半的情况如果事务在执行过程中发生错误会回滚Rollback到事务开始前的状态就像这个事务从来没有执行过一样2.Consistency (一致性)在事务开始之前和事务结束以后数据库的完整性不会被破坏。这表示写入的数据必须完全符合所有的预设规则包括数据的精度、关联性以及关于事务执行过程中服务器崩溃后如何恢复3.Isolation (隔离性)数据库允许多个并发事务同时对数据进行读写和修改隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务可以指定不同的隔离级别以权衡在不同的应用场景下数据库性能和安全4.Durability (持久性)事务处理结束后对数据的修改将永久的写入存储介质即便系统故障也不会丢失。三.为什么要使用事务事务具备的 ACID 特性是我们使用事务的原因在我们日常的业务场景中有大量的需求要用事务来保证。支持事务的数据库能够简化我们的编程模型不需要我们去考虑各种各样的潜在错误和并发问题在使用事务过程中要么提交要么回滚不用去考虑网络异常服务器宕机等其他因素因此我们经常接触的事务本质上是数据库对 ACID 模型的一个实现是为应用层服务的。四.使用事务1.查看支持使用事务的存储引擎可以看到MySQL中支持事务的存储引擎是InnoDB2.语法:开启事务之后,只要执行了rollback操作或者commit操作,事务都会关闭!!!3.开启一个事务后执行修改后回滚还是使用一开始的转账例子先创建一个表,里面有张三和李四的记录create table if not exists bank_account( id int primary key auto_increment, name varchar(50), balance decimal(20,2) ); insert into bank_account(name,balance) values(张三,1000); insert into bank_account(name,balance) values(李四,1000);然后查看bank_account开启事务start transaction;然后执行转账操作update bank_account set balance balance - 100 where name 张三; select * from bank_account; update bank_account set balance balance 100 where name 李四; select * from bank_account;先将张三减去100再给李四加100可以看到此时我们的要求已经达成了,但是我们开启了事务,还没有提交此时我们回滚事务然后再去查看bank_account,发现之前的修改都没有生效4.开启一个事务后执行修改后提交还是刚刚那个例子先开启事务,然后查看当前表中内容执行转账操作update bank_account set balance balance - 100 where name 张三; update bank_account set balance balance 100 where name 李四;再次查看表中数据然后提交事务最后查看表中数据,发现之前的修改已经生效5.保存点概念:在执行事务的过程中可以设置保存点,ROLLBACK时可以把数据恢复到保存点的状态语法:savepoint 保存点名继续使用转账例子开启一个新事务,分别在三处设置保存点,看看实际效果分别在给张三-100前,给张三-100后,给李四100后设置了一个保存点,此时只开启事务,没有提交查看当前bank_account表可以看到修改已经成功试着回滚到保存点point003,预计应该没有任何变化,因为在设置point003之后没有对任何数据进行修改可以看到回滚之后数据没有发生变化,符合预期试着回滚到point002,预计原本在point002之后执行的MySQL语句,李四的balance100会被回滚符合预期最后回滚到point001,数据预计回到最初的状态6.自动/手动提交事务默认情况下MySQL 是自动提交事务的也就是说我们执行的每个修改操作比如插入、更新和删除都会自动开启一个事务并在语句执行完成之后自动提交发生异常时自动回滚。可以通过以下语句设置MySQL是否自动提交如果将事务设置成手动提交,在执行完一系列SQL语句之后,如果忘记提交,直接断开连接的话,再次登入数据库,之前的SQL都会回滚到事务开始之前.五.事务的隔离性和隔离级别1.什么是隔离性MySQL 服务可以同时被多个客户端访问每个客户端执行的 DML 语句以事务为基本单位那么不同的客户端在对同一张表中的同一条数据进行修改的时候就可能出现相互影响的情况为了保证不同的事务之间在执行的过程中不受影响那么事务之间就需要要相互隔离这种特性就是隔离性。2.隔离级别事务具有隔离性那么如何实现事务之间的隔离隔离到什么程度如何保证数据安全的同时也要兼顾性能这都是要思考的问题。事务间不同程度的隔离称为事务的隔离级别不同的隔离级别在性能和安全方面做了取舍有的隔离级别注重并发性有的注重安全性有的则是并发和安全适中在 MySQL 的 InnoDB 引擎中事务的隔离级别有四种分别是3.查看和设置隔离级别查看隔离级别语法:设置隔离级别语法:各个隔离级别具体什么样子,我会在下面进行实际演示,先看怎么设置隔离级别示例:设置全局事务隔离级别为串行化,后续所有事务生效,不影响当前事务tip:全局事务是只有下次连接数据库才会生效,对当前连接不会影响set global transaction isolation level serializable;示例:设置会话事务隔离级别为串行化,当前会话后续所有事务生效,不影响当前事务,可以再任何时候执行tip:会话事务是只有在当前连接生效,当你断开再次连接数据库的时候就会回到默认的隔离级别set session transaction isolation level serializable;如果不指定作用域,设置只针对下一个事务,之后的事务又会回到默认的隔离级别set transaction isolation level serializable;其他设置隔离级别的方法:六.不同隔离级别之间存在的问题这里我们使用cmd,打开两个客户端,方便问题重现,在重现问题之前需要确定autocommit 01.READUNCOMMITTED-读未提交与脏读存在问题:出现在事务的 READ UNCOMMITTED 隔离级别下由于在读取数据时不做任何限制所以并发性能很高但是会出现大量的数据安全问题比如在事务 A 中执行了一条 INSERT 语句在没有执行 COMMIT 的情况下会在事务 B 中被读取到此时如果事务 A 执行回滚操作那么事务 B 中读取到事务 A 写入的数据将没有意义我们把这个现象叫做 “脏读”。问题重现:先打开客户端A设置隔离级别为读未提交查看是否生效再打开客户端B确认隔离级别,可以看出已经生效然后再客户端A执行一系列MySQL语句,往bank_account里面插入一条新数据,但是并未提交客户端A中可以查看然后再打开客户端B进行查看,可以看出在客户端A没有提交的情况下,客户端B依然可以查看到客户端A修改的内容此时在客户端A进行回滚操作再去客户端B查看,发现刚刚插入的王五那条数据已经不在了,这种现象就叫做脏读tip:由于 READ UNCOMMITTED 读未提交易会出现 脏读 现象在正常的业务中出现这种问题会产生非常危重后果所以正常情况下应该避免使用 READ UNCOMMITTED 读未提交这种的隔离级别。2.READCOMMITTED-读已提交与不可重复读存在问题:为了解决脏读问题可以把事务的隔离级别设置为 READ COMMITTED这时事务只能读到了其他事务提交之后的数据但会出现不可重复读的问题比如事务 A 先对某条数据进行了查询之后事务 B 对这条数据进行了修改并且提交 (COMMIT) 事务事务 A 再对这条数据进行查询时得到了事务 B 修改之后的结果这导致了事务 A 在同一个事务中以相同的条件查询得到了不同的值这个现象要 “不可重复读”。问题重现:现在客户端A中设置全局事务为读已提交,查看已经生效再打开客户端B查看隔离级别,也已经生效然后先打开客户端A,新增一条王五数据,查看表中数据插入数据之后开启事务再打开客户端B,开启事务,修改表中王五数据,将balance改为10000,查看表中数据,成功修改,此时客户端B并未提交,在客户端A中是查不到的查看客户端A中的bank_account,发现还是2000,这就解决了之前的脏读问题然后提交客户端B中的事务再去客户端A中查看,发现已经是10000了,这就是读已提交3.REPEATABLEREAD-可重复读与幻读存在问题:为了解决不可重复读问题可以把事务的隔离级别设置为 REPEATABLE READ这时同一个事务中读取的数据在任何时候都是相同的结果但还会出现一个问题事务 A 查询了一个区间的记录得到结果集 A事务 B 向这个区间的间隙中写入了一条记录并提交事务 A 再查询这个区间的结果集时会查到事务 B 新写入的记录得到结果集 B两次查询的结果集不一致这个现象就是 “幻读”。MySQL 的 InnoDB 存储引擎使用了 Next-Key 锁解决了大部分幻读问题由于 REPEATABLE READ 隔离级别默认使用了 Next-Key 锁为了重现幻读问题我们把隔离级回退到更新时只加了排他锁的 READ COMMITTED。问题重现:先设置为read committed打开客户端A,开启事务,往李四和王五中间插入一条数据再打开客户端B,查看bank_account表,查不到这个测试幻读这个数据,是因为客户端A没有提交,客户端A提交事务再去客户端B中查看,可以看到多了一条数据4.SERIALIZABLE-串行化进⼀步提升事务的隔离级别到SERIALIZABLE 此时所有事务串行执行可以解决所有并发中的安全问题。七.不同隔离级别的性能与安全
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

怎么做app和网站购物车页面即将自动跳转

为什么黑客网安人都爱挖src?挖漏洞到底有多香?! 对黑客网安人来说,挖src既能积累实战经验还能拿不到不错的赏金,可谓是技术和钱双收!接下来带大家深入了解一下挖src的细节。 一、 主要途径与平台 漏洞赏金…

张小明 2025/12/29 4:42:05 网站建设

下载黑龙江建设网官网网站搭建网站服务器教程

人口老龄化浪潮席卷而来,养老需求与医疗资源的不平衡成为社会痛点。如何破解这一难题?答案藏在“创新驱动”与“多元融合”的深层实践中。唯有以创新为引擎,打破边界,融合多方力量,方能织就一张覆盖城乡、温暖人心的医…

张小明 2025/12/29 4:42:06 网站建设

软件工程难学吗合肥seo按天扣费

Flutter:在流动的 UI 中,重新理解“界面”的意义 我们常说“用户界面”,仿佛界面是静态的、可切割的一层皮肤。但在 Flutter 的世界里,UI 是流动的、有生命的、由状态驱动的河流。 这不是一篇教你如何创建项目或使用 StatefulWi…

张小明 2025/12/29 4:42:07 网站建设

网站关键词优化到首页后怎么做wordpress运行环境要求

第一章:深入理解Symfony 8依赖注入核心机制Symfony 8 的依赖注入(Dependency Injection, DI)机制是其架构设计的核心之一,它通过容器管理对象的创建与依赖关系,实现松耦合和高可测试性。该机制允许开发者将服务定义集中…

张小明 2025/12/29 4:42:05 网站建设

域名申请好了怎么做网站网络推广平台加盟

供应链与物流运营中劳动力调度的轻量级量子启发式遗传算法 1. 引言 劳动力调度在供应链和物流行业中起着至关重要的作用,效率和客户服务对于保持竞争力至关重要。然而,这些行业面临着劳动力短缺的重大挑战,疫情更是加剧了这一问题。此外,疫情推动了电子商务的繁荣,进一步…

张小明 2025/12/29 0:51:03 网站建设

湘潭网站建站公司大学生想做网站

LDAP认证、规划与管理全解析 1. LDAP认证方法与服务 LDAP 提供多种认证方法,不同的认证方法在密码传输、存储和加密方面各有特点,以下是详细的认证方法介绍: | 认证方法 | Bind | 网络传输密码 | Sun Java System Directory Server 密码 | Session | 加密情况 | | — | …

张小明 2025/12/29 4:42:09 网站建设