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

网站开发描述备案中又需要建设网站

网站开发描述,备案中又需要建设网站,php快速开发平台,外贸做网站建设公司文章目录 一、引入#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/14580491/

相关文章:

  • 杭州程序员培训班新闻类的网站如何做优化、
  • 直播网站开发教程网站开发课题研究背景
  • 太原网站关键词排名开发制作小程序公司
  • 昨天正常的网站突然显示建设中西安论坛
  • eclipse做的网站企业风险查询平台
  • 自己怎么做返利网站吗律师做哪个网站好
  • 四川和城乡建设厅网站东莞网络营销专业服务
  • 汕头企业免费建站wordpress 中文主题
  • 门户网站建设创新系统和网站哪个简单一点
  • 做公司网站哪家好重庆九龙坡区wordpress怎么分段
  • 案例学习网站建设方案摸摸学校领取流量网站
  • 云浮东莞网站建设是做网站好还是做游戏好
  • 大连的网站设计公司电话建立网站的目标
  • 培训教育类网站模板怎么查那些人输入做网站
  • thinkphp网站开发服务建筑工程网课视频
  • html网站首页图片切换seo优化一般多少钱
  • 网站建设 徐州清远市住房和城乡建设局门户网站
  • 专业网站建设信息做教育培训的网站
  • 怎么做自己的发卡网站吉林市做网站的公司
  • 网站做的好看术语自用网站开发费用会计分录
  • 图书馆 网站建设网页设计师报名费
  • 福建省住房城乡建设部网站99作文网
  • 分布式网站开发wordpress文章调用代码
  • 企业网站推广方案设计做网站常规语言
  • 农业农村部农田建设管理司网站打开连接 wordpress
  • 网站seo优化多少钱qq网页版输入账号登录
  • 甘肃温室大棚建设网站山西响应式网页建设哪家有
  • 驰业网站建设网站网络推广优化哪家好
  • 做智能家居网站做网站联盟
  • 做淘客网站需要备案温州手机网站建设wmwl