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

怀柔做网站的吗北京手机app开发

怀柔做网站的吗,北京手机app开发,政务网站建设索引,企业咨询内容有哪些文章目录 一、引入#xff08;一#xff09;CURD不加控制#xff0c;会有什么问题#xff1f;#xff08;二#xff09;CURD满足什么属性#xff0c;能解决上述问题#xff1f; 二、什么是事务#xff1f;三、事务的特性#xff08;一#xff09;原子性#xff1a;… 文章目录 一、引入一CURD不加控制会有什么问题二CURD满足什么属性能解决上述问题 二、什么是事务三、事务的特性一原子性二一致性三隔离性四持久性 四、为什么会出现事务五、事务的版本支持六、事务提交方式七、事务常见操作方式一创建测试表二正常演示 - 证明事务的开始与回滚二非正常演示1 - 证明未commit客户端崩溃MySQL自动会回滚隔离级别设置为读未提交三非正常演示2 - 证明commit了客户端崩溃MySQL数据不会在受影响已经持久化四非正常演示3 - 对比试验。证明begin操作会自动更改提交方式不会受MySQL是否自动提交影响五非正常演示4 - 证明单条 SQL 与事务的关系六结论七事务操作注意事项 一、引入 一CURD不加控制会有什么问题 二CURD满足什么属性能解决上述问题 买票的过程得是原子的吧买票互相应该不能影响吧买完票应该要永久有效吧买前和买后都要是确定的状态吧 二、什么是事务 事务就是一组DML语句组成这些语句在逻辑上存在相关性这一组DML语句要么全部成功要么全部失败是一个整体。MySQL提供一种机制保证我们达到这样的效果。事务还规定不同的客户端看到的数据是不相同的。 事务就是要做的或所做的事情主要用于处理操作量大复杂度高的数据。 假设一种场景你毕业了学校的教务系统后台 MySQL 中不在需要你的数据要删除你的所有信息(一般不会:) ), 那么要删除你的基本信息(姓名电话籍贯等)的同时也删除和你有关的其他信息比如你的各科成绩你在校表现甚至你在论坛发过的文章等。这样就需要多条 MySQL 语句构成那么所有这些操作合起来就构成了一个事务。 正如我们上面所说一个 MySQL 数据库可不止你一个事务在运行同一时刻甚至有大量的请求被包装成事务在向 MySQL 服务器发起事务处理请求。而每条事务至少一条 SQL 最多很多 SQL ,这样如果大家都访问同样的表数据在不加保护的情况就绝对会出现问题。甚至因为事务由多条 SQL 构成那么也会存在执行到一半出错或者不想再执行的情况那么已经执行的怎么办呢 三、事务的特性 所有一个完整的事务绝对不是简单的 sql 集合还需要满足如下四个属性 一原子性 一个事务transaction中的所有操作要么全部完成要么全部不完成不会结束在中间某个环节。事务在执行过程中发生错误会被回滚Rollback到事务开始前的状态就像这个事务从来没有执行过一样。 二一致性 在事务开始之前和事务结束以后数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。 三隔离性 数据库允许多个并发事务同时对其数据进行读写和修改的能力隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别包括读未提交 Readuncommitted 、读提交 read committed 、可重复读 repeatable read 和串行化 Serializable 。 四持久性 事务处理结束后对数据的修改就是永久的即便系统故障也不会丢失。 上面四个属性可以简称为 ACID 。 原子性Atomicity或称不可分割性 一致性Consistency 隔离性Isolation又称独立性 持久性Durability) 四、为什么会出现事务 事务被 MySQL 编写者设计出来,本质是为了当应用程序访问数据库的时候,事务能够简化我们的编程模型,不需要我们去考虑各种各样的潜在错误和并发问题.可以想一下当我们使用事务时,要么提交,要么回滚,我们不会去考虑网络异常了,服务器宕机了,同时更改一个数据怎么办对吧? 因此事务本质上是为了应用层服务的而不是伴随着数据库系统天生就有的。 备注我们后面把 MySQL 中的一行信息称为一行记录! 五、事务的版本支持 在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务 MyISAM 不支持 六、事务提交方式 事务的提交方式常见的有两种 自动提交手动提交 查看事务提交方式 show variables like autocommit; 用 SET 来改变 MySQL 的自动提交模式: SET AUTOCOMMIT0;七、事务常见操作方式 简单银行用户表 一创建测试表 create table if not exists account( id int primary key, name varchar(50) not null default , blance decimal(10,2) not null default 0.0 )ENGINEInnoDB DEFAULT CHARSETUTF8;二正常演示 - 证明事务的开始与回滚 mysql show variables like autocommit; -- 查看事务是否自动提交。我们故意设置成自 动提交看看该选项是否影响begin ---------------------- | Variable_name | Value | ---------------------- | autocommit | ON | ---------------------- 1 row in set (0.00 sec) mysql start transaction; -- 开始一个事务begin也可以推荐begin Query OK, 0 rows affected (0.00 sec) mysql savepoint save1; -- 创建一个保存点save1 Query OK, 0 rows affected (0.00 sec) mysql insert into account values (1, 张三, 100); -- 插入一条记录 Query OK, 1 row affected (0.05 sec) mysql savepoint save2; -- 创建一个保存点save2 Query OK, 0 rows affected (0.01 sec) mysql insert into account values (2, 李四, 10000); -- 在插入一条记录 Query OK, 1 row affected (0.00 sec) mysql select * from account; -- 两条记录都在了 ---------------------- | id | name | blance | ---------------------- | 1 | 张三 | 100.00 | | 2 | 李四 | 10000.00 | ---------------------- 2 rows in set (0.00 sec) mysql rollback to save2; -- 回滚到保存点save2 Query OK, 0 rows affected (0.03 sec) mysql select * from account; -- 一条记录没有了 -------------------- | id | name | blance | -------------------- | 1 | 张三 | 100.00 | -------------------- 1 row in set (0.00 sec) mysql rollback; -- 直接rollback回滚在最开始 Query OK, 0 rows affected (0.00 sec) mysql select * from account; -- 所有刚刚的记录没有了 Empty set (0.00 sec)二非正常演示1 - 证明未commit客户端崩溃MySQL自动会回滚隔离级别设置为读未提交 -- 终端A mysql select * from account; -- 当前表内无数据 Empty set (0.00 sec) mysql show variables like autocommit; -- 依旧自动提交 ---------------------- | Variable_name | Value | ---------------------- | autocommit | ON | ---------------------- 1 row in set (0.00 sec) mysql begin; --开启事务 Query OK, 0 rows affected (0.00 sec) mysql insert into account values (1, 张三, 100); -- 插入记录 Query OK, 1 row affected (0.00 sec) mysql select * from account; --数据已经存在但没有commit此时同时查看 终端B -------------------- | id | name | blance | -------------------- | 1 | 张三 | 100.00 | -------------------- 1 row in set (0.00 sec) mysql Aborted -- ctrl \ 异常终止MySQL --终端B mysql select * from account; --终端A崩溃前 -------------------- | id | name | blance | -------------------- | 1 | 张三 | 100.00 | -------------------- 1 row in set (0.00 sec) mysql select * from account; --数据自动回滚 Empty set (0.00 sec)三非正常演示2 - 证明commit了客户端崩溃MySQL数据不会在受影响已经持久化 --终端 A mysql show variables like autocommit; -- 依旧自动提交 ---------------------- | Variable_name | Value | ---------------------- | autocommit | ON | ---------------------- 1 row in set (0.00 sec) mysql select * from account; -- 当前表内无数据 Empty set (0.00 sec) mysql begin; -- 开启事务 Query OK, 0 rows affected (0.00 sec) mysql insert into account values (1, 张三, 100); -- 插入记录 Query OK, 1 row affected (0.00 sec) mysql commit; --提交事务 Query OK, 0 rows affected (0.04 sec) mysql Aborted -- ctrl \ 异常终止MySQL --终端 B mysql select * from account; --数据存在了所以commit的作用是将数据持久 化到MySQL中 -------------------- | id | name | blance | -------------------- | 1 | 张三 | 100.00 | -------------------- 1 row in set (0.00 sec)四非正常演示3 - 对比试验。证明begin操作会自动更改提交方式不会受MySQL是否自动提交影响 -- 终端 A mysql select *from account; --查看历史数据 -------------------- | id | name | blance | -------------------- | 1 | 张三 | 100.00 | -------------------- 1 row in set (0.00 sec) mysql show variables like autocommit; --查看事务提交方式 ---------------------- | Variable_name | Value | ---------------------- | autocommit | ON | ---------------------- 1 row in set (0.00 sec) mysql set autocommit0; --关闭自动提交 Query OK, 0 rows affected (0.00 sec) mysql show variables like autocommit; --查看关闭之后结果 ---------------------- | Variable_name | Value | ---------------------- | autocommit | OFF | ---------------------- 1 row in set (0.00 sec) mysql begin; --开启事务 Query OK, 0 rows affected (0.00 sec) mysql insert into account values (2, 李四, 10000); --插入记录 Query OK, 1 row affected (0.00 sec) mysql select *from account; --查看插入记录同时查看终端B ---------------------- | id | name | blance | ---------------------- | 1 | 张三 | 100.00 | | 2 | 李四 | 10000.00 | ---------------------- 2 rows in set (0.00 sec) mysql Aborted --再次异常终止 -- 终端B mysql select * from account; --终端A崩溃前 ---------------------- | id | name | blance | ---------------------- | 1 | 张三 | 100.00 | | 2 | 李四 | 10000.00 | ---------------------- 2 rows in set (0.00 sec) mysql select * from account; --终端A崩溃后自动回滚 -------------------- | id | name | blance | -------------------- | 1 | 张三 | 100.00 | -------------------- 1 row in set (0.00 sec)五非正常演示4 - 证明单条 SQL 与事务的关系 --实验一 -- 终端A mysql select * from account; -------------------- | id | name | blance | -------------------- | 1 | 张三 | 100.00 | -------------------- 1 row in set (0.00 sec) mysql show variables like autocommit; ---------------------- | Variable_name | Value | ---------------------- | autocommit | ON | ---------------------- 1 row in set (0.00 sec) mysql set autocommit0; --关闭自动提交 Query OK, 0 rows affected (0.00 sec) mysql insert into account values (2, 李四, 10000); --插入记录 Query OK, 1 row affected (0.00 sec) mysql select *from account; --查看结果已经插入。此时可以在查 看终端B ---------------------- | id | name | blance | ---------------------- | 1 | 张三 | 100.00 | | 2 | 李四 | 10000.00 | ---------------------- 2 rows in set (0.00 sec) mysql ^DBye --ctrl \ or ctrl d,终止终 端 --终端B mysql select * from account; --终端A崩溃前 ---------------------- | id | name | blance | ---------------------- | 1 | 张三 | 100.00 | | 2 | 李四 | 10000.00 | ---------------------- 2 rows in set (0.00 sec) mysql select * from account; --终端A崩溃后 -------------------- | id | name | blance | -------------------- | 1 | 张三 | 100.00 | -------------------- 1 row in set (0.00 sec) -- 实验二 --终端A mysql show variables like autocommit; --开启默认提交 ---------------------- | Variable_name | Value | ---------------------- | autocommit | ON | ---------------------- 1 row in set (0.00 sec) mysql select * from account; -------------------- | id | name | blance | -------------------- | 1 | 张三 | 100.00 | -------------------- 1 row in set (0.00 sec) mysql insert into account values (2, 李四, 10000); Query OK, 1 row affected (0.01 sec) mysql select *from account; --数据已经插入 ---------------------- | id | name | blance | ---------------------- | 1 | 张三 | 100.00 | | 2 | 李四 | 10000.00 | ---------------------- 2 rows in set (0.00 sec) mysql Aborted --异常终止 --终端B mysql select * from account; --终端A崩溃前 ---------------------- | id | name | blance | ---------------------- | 1 | 张三 | 100.00 | | 2 | 李四 | 10000.00 | ---------------------- 2 rows in set (0.00 sec) mysql select * from account; --终端A崩溃后并不影响已经持久化。autocommit 起作用 ---------------------- | id | name | blance | ---------------------- | 1 | 张三 | 100.00 | | 2 | 李四 | 10000.00 | ---------------------- 2 rows in set (0.00 sec)六结论 只要输入begin或者start transaction事务便必须要通过commit提交才会持久化与是否设置set autocommit无关。事务可以手动回滚同时当操作异常MySQL会自动回滚单sql的本质是事务对于 InnoDB 每一条 SQL 语言都默认封装成事务自动提交。select有特殊情况因为MySQL 有 MVCC 从上面的例子我们能看到事务本身的原子性(回滚)持久性(commit) 那么隔离性一致性 七事务操作注意事项 如果没有设置保存点也可以回滚只能回滚到事务的开始。直接使用 rollback(前提是事务还没有提交)如果一个事务被提交了commit则不可以回退rollback可以选择回退到哪个保存点InnoDB 支持事务 MyISAM 不支持事务开始事务可以使 start transaction 或者 begin
http://www.hkea.cn/news/14391852/

相关文章:

  • 手机网站开发专业肇庆市端州发布
  • 服务器可以做网站吗网站页面怎么做导航
  • 好的网站设计特点网站做微信支付接口
  • 用高权重网站的目录做站群怎么样优化关键词排名seo软件
  • 济南网站建设咨 询小七甘肃园区网络搭建
  • 福建省建设工程质量安全网站天津网站建设公司推荐
  • 东莞浩智网站建设开发北京公司网站建设价格
  • 设计网站建新网站建设需要什么
  • 网站内容与功能模块设计典型十大优秀网络营销案例
  • 无锡有哪些做网站的公司在线阅读小说网站怎么建设
  • 缺乏门户网站建设wordpress 关闭文章修订
  • 外国人企业网站怎么做wordpress存档:
  • 网站开发实战作业答案龙岗中心城网站建设
  • 排版漂亮的网站做网站大公司有哪些
  • 做招商加盟做得比较好的网站wordpress函数表
  • dede建设网站教程礼盒包装设计网站
  • 怎么样做一个个人网站郑州seo关键词自然排名工具
  • 新乡市建设局网站windows7 花生壳做网站服务器
  • 网站建设仟金手指六六14手机主页推荐
  • 网络营销与传统营销的整合整站外包优化公司
  • 做网站的意义是什么网站域名 如何选择
  • 晋中市住房与城乡建设厅网站注册百度账号
  • 做电影网站技术简单的电子商务网站主页设计图
  • 企业网站开发效果大流量网站开发
  • 太平洋手机官方网站网址大全安装app
  • 人与狗做的电影网站wordpress 媒体图片
  • 淘宝内部优惠券网站怎样做的中企动力销售工作内容
  • 江阴市城乡建设网站房山重庆网站建设
  • 珠海网站制作渠道神码ai智能写作网站
  • 大连网站开发公司shepiguo怎么做wp网站