蚂蚁彩票www.nama2015.com

58彩票www.oneshot04.com

旺旺彩票www.ooxx456.com

快赢彩票www.sgbingyou.com

凤凰彩票www.zgwscy360.com

吉利彩票www.tech414.com

万豪彩票www.vooily.com

新利彩票www.zyq2012.com

名门彩票www.hiyunte.com

123彩票www.hhrzsz.com

万喜彩票www.ronghaiyi.com

盛通彩票www.nznhco.com

永盛彩票www.m2volt.com

大通彩票www.bangfy.com

万家彩票www.ysh777.com

千禧彩票www.jntjzc.com

中福彩票www.qdxrtzc.com

万利彩票www.ynkyz.com

98彩票www.sixitz.com

博乐彩票www.alxqxxx.com

云鼎彩票www.njbjjd.com

永利彩票www.izaukb.com

趣彩彩票www.neusna.com

广发彩票www.yinxing02.com

葡京彩票www.ylyx1688.com

顺发彩票www.stampfle.com

鸿利彩票www.taotao5le.com

我赢彩票www.tctz558.com

大发彩票www.tlvip993.com

苹果彩票www.tuhao2015.com

欢乐彩票www.uvyyvc.com

盛兴彩票www.vwin356.com

智博彩票www.wdzc888.com

环球彩票www.hlwgtt.com

金彩彩票www.youtube4u.com

彩盈彩票www.yz-cheap.com

丰亿彩票www.zgnck.com

金沙彩票www.zjfwbank.com

金福彩票www.zlcemk.com

大运彩票www.zx3xrj.com

乐购彩票www.lpdzz.com

热购彩票www.qwknt.com

宏发彩票www.dkyky.com

八八彩票www.chwizd.com

凤凰彩票www.qgklri.com

易发彩票www.nrrnx.com

众彩彩票www.bdjlx.com

世纪彩票www.qxqpr.com

必发彩票www.lianjiat.com

创元彩票www.rmdhn.com

E乐彩票www.avgads.com

利来彩票www.cfmft.com

华夏彩票www.hcfgx.com

金砖彩票www.ookk77.com

大金彩票www.qdnpp.com

全迅彩票www.cskcbz.com

菠萝彩票www.qdfbn.com

通博彩票www.lpwln.com

盛世彩票www.lyqhx.com

鼎盛彩票www.fznzy.com

东方彩票www.mywnp.com

皇冠彩票www.zspnsh.com

港龙彩票www.dbrgj.com

幸运彩票www.nyhuigou.com

全民彩票www.689jp.com

状元彩票www.hn882.com

88彩票www.ynhaimao.com

天天彩票www.lehaha668.com

凤凰彩票www.weiguyuan.com

500万彩票www.usaviaton.com

E时彩www.urns4sale.com

J8彩票www.ggw74.com

GT彩票www.gyyhzb.com

中华彩票www.jncfgs.com

568彩票www.1-webinar.com

传奇彩票www.my2wave.com

杏彩彩票www.10tozero.com

金誉彩票www.dss91.com

众购彩票www.ddyyddyy.com

非凡彩票www.daverney.com

重慶彩票www.daff8881.com

双赢彩票www.jgcp99.com

盛源彩票www.jhh123.com

旺旺彩票www.bahid-inv.com

万喜彩票www.kenya2016.com

盛通彩票www.hexun888.com

首页 游戏 资讯 关注 科技 财经 汽车 房产 图片 视频

数据

旗下栏目: 业内 数据 数码 手机

从Web查询数据库之PHP与MySQL篇

来源:网络整理 作者:梧州新闻网 人气: 发布时间:2018-06-05
摘要:本文介绍了从Web查询数据库的方法,语言是PHP,数据库为MySQL。PHP支持连接到许多不同数据库的函数,包括Oracle、Microsoft SQL Server和PostgreSQL。

推荐相关文章:

数据库事务系列-MySQL跨行事MySQL事务模型在网上也有很多的介绍,在写这篇文章之前本人也翻看了很多资料作为参考,以期让自己理解的更加深入全面。有的文章说的倒很全面,但缺乏些许条理,

腾讯云推每月12元的MySQL 5.6腾讯云宣布推出每月12元的MySQL5.6版数据库入门机型,从现在起到2018年6月12日以前售价都是12元。这是腾讯为数据库团队打造的一款适用于入门、学习、培训,生产

从Web查询数据库之PHP与MySQL篇

PHP+MySQL的组合是构建网站的一个常见搭配,不过如何使用PHP通过Web访问MySQL数据库呢?下面从Web数据库架构的工作原理讲起。

从Web查询数据库:Web数据库架构的工作原理

一个用户的浏览器发出一个HTTP请求,请求特定的Web页面,在该页面中出发form表单提交到php脚本文件(如:results.php)中处理

Web服务器接收到对results.php页面的请求后,检索文件,并将其传递给PHP引擎处理

PHP引擎开始解析脚本。脚本主要包括了连接数据库和执行查询的命令。PHP启动了对MySQL服务器的连接并向该服务器发送适当的查询。

MySQL服务器接收到数据库查询的请求,开始处理这个查询,并将查询结果返回给PHP引擎。

PHP引擎完成了脚本的运行后,将该HTML返回Web服务器。

Web服务器再将HTML返回给客户端浏览器,用户就可以看到响应后的结果页面。

从Web查询数据库的基本步骤

检查并过滤来自用户的数据 首先,我们将过滤用户可能在其搜索条件的起始或结束位置不小心输入的空白字符,这是用函数trim()来实现。 我们这么麻烦的检查用户输入数据的原因是防止多个接口连接数据库,因为用户从不同的界面进入,这样可能导致安全问题。

然后,当准备使用用户输入的任何数据时,也要适当的过滤一些控制字符,,当用户输入数据到数据库时必须转义数据,,此时 使用盗的函数有addslashes()函数、stripslashes()函数和get_magic_qutoes_gpc()函数。addslashes()函数为了数据 库查询语句等的需要在某些字符前加上了反斜线;stripslashes()函数去掉字符串中的反斜线字符;get_magic_qutoes_gpc()函数 魔术添加转义字符 “”,获取当前活动配置magic_quotes_runtime设置,如果运行时关闭魔术引号,返回0,否则返回1。我们也可以使用 htmispecialchars()对HTML中的特殊意义字符警醒编码,htmispecialchars()函数把一些预定义的字符转换为 HTML 实体 【预定义的字符是: (和号) 成为 (双引号) 成为 ' (单引号) 成为 ' (小于) 成为 > (大于) 成为 >】

建立一个到适当数据库的连接 PHP为连接MySQL提供了函数库mysqli(i表示改进)。
当在PHP中使用mysqli函数库是可以使用面向对象或面向过程的语法:

1、面向对象, @ $db = new mysqli('hostname','username','password','dbname');返回一个对象

2、面向过程: @ $db = mysqli_connect('hostname','username','password','dbname');返回一个资源,这个资源表示数据库的连接,而且 如果使用过程方法,必须将这个资源传递到mysqli的所有其它函数。这与处理函数非常类似

mysqli的大多数函数都有面向对象接口和过程接口,二者的差异则在于过程版本的函数名称以mysqli_开头,同时要求传入mysqli_connect()函数获得的资源句柄。 对于这个规则来说,数据可连接是一个异常,因为它是由mysqli对象的构造函数来创建的。因此尝试连接时需要进行检查,mysqli_connect_errno()函数将在出现连接 错误时返回一个错误号,如果成功,则返回0.

请注意:

当连接到数据库是,通常会议错误抑制符@作为第一含代码。这样可以巧妙的处理任何错误,也可以通过异常来处理。另外,MySQK对同时连接 数据库的连接数量有一定的限制。MySQLi参数max_connections决定了同时连接的个数,该参数和相关的Apache参数MaxClients的作用是告诉服务器拒绝新的连接请求, 从而保证系统资源不会再系统忙碌时或系统瘫痪时被请求或使用。要设置Apache中的MaxClients参数可以编辑系统中的httpd.conf文件。要为MySQLi设置max_connections参数 可以编辑文件my.conf。

选择使用的数据库: 在MySQL命令行使用 use dbname;命令;在php中可以用$db->select_db(dbname);或mysqli_select_db(db_resource,dbname)。

查询数据库 要执行数据库查询,首先应构造查询语句:$query = select * from user;然后运行 $result = $db->query($query);或者$result = mysqli_query($db,$query); 面向对象版本将返回一个结果对象;过程版本将返回一个结果资源。无论何种方法都将结果保存在$result变量中工以后使用。如果函数运行失败将返回false。

获取查询结果 使用不同的函数以不同的方式将查询结果从结果对象或标识符中取出来,结果对象或标识符是访问查询返回行的关键。

通常我们要得到结果集中记录行的行数,并且使用mysqli_fetch_assoc()函数。

返回行数:$num_results = $result->num_rows;(行数保存在对象的num_rows成员变量中)或$num_results = mysqli_num_rows($result);

然后使用循环遍历每一行,在循环中调用 $row = $result->fectch_assoc();或者 $row = mysqli_fetch_assoc($result);返回该行的信息。 如果是对象返回行则每个关键词为一个属性名,每个值为属性中的相应的值;如果以资源返回则返回数组。

还有其他从结果标识符中获取结果的方法,例如:使用$row = $result->fecth_row($result);或者$row = mysqli_fetch_row($result);将结果取回 到一个列举数组中;也可以使用$row = $result->fecth_object();或者 $row = mysqli_fecth_object($result);江一行去回到一个对象中。

从数据库断开 先释放结果集:$result->free();或 mysqli_free_result($result);然后关闭数据库连接:$db->close()或者 mysqli_close($db); 严格的说,这并不必须,因为脚本执行完毕的时候他们将被自动关闭。

从Web查询数据库:使用Prepared语句

mysqli函数库支持prepared语句的使用。它们对于在执行大量具有不同数据的相同查询时,可以提高速度,也可以免受SQL注射风格(injection-stytle——的攻击。

prepared语句的基本思想是可以向MySQL发送一个需要执行的查询模板,然后在单独发送数据。我们可以向相同的prepared语句发送大量的相同的数据;这个特性对批量处理的插入操作来说是非常有用的。

我们一般使用一下几个步骤:

1、构造模板。已插入为例: $query = insert into user values(?,?,?,?);

2、使用prepared语句,构建一个语句对象或需要用来完成实际处理的资源。 $stmt = $db->prepare($query);或者mysqli_stmt_prepare($query);

3、调用$stmt->bind_param(sssd,$str1,$str3,$str3,$int4)或者mysqli_stmt_bind_param(sssd,$str1,$str3,$str3,$int4) 告诉php那些变量应该被问号所替换。第一个参数是一个格式化字符串,后面是将要被替换的变量。

3、调用$stmt->execute()或者mysqli_stmt_execute()函数,将真正运行这个query语句

对于select类型查询,可以使用$stmt->bind_result()或mysqli_stmt_bind_result()函数提供希望填充结果列的变量列表,然后每次调用 $stmt->fetch()或者mysqli_stmt_fetch()函数时,结果集下一行的值将被填充到这些绑定变量中。

使用PHP与数据库交互的其他接口

PHP支持连接到许多不同数据库的函数,包括Oracle、Microsoft SQL Server和PostgreSQL。通常,连接和查询这些火速据库的基本原理是相同的,个别 函数名称可能不同。如果希望使用PHP还没有提供支持的特殊数据库,可以使用常规的ODBC函数。

ODBC表示开放的数据库连接,他是连接数据库的标准。ODBC只具有任何函数集的优先功能,如果要求必须兼容所有的数据库,就不能使用任何数据库的特殊功能。

除了PHP附带的函数库以外,一些可供使用的数据库抽象类如MDB2允许为不同的数据库类型使用相同的函数名。但是要提前安装抽象层,例如安装PEAR MDB2抽象层。

数据库事务系列-MySQL跨行事务模型

人工智能+区块链的发展趋势及应用调研报告

数据库事务系列-MySQL跨行事务模型

说来和MySQL倒是有缘,毕业的第一份工作就被分配到了RDS团队,主要负责把MySQL弄到云上做成数据库服务。虽说整天和MySQL打交道,但说实话那段时间并没有很深入的理解MySQL内核,做的事情基本都是围绕着MySQL做管控系统,比较上层。好在周边都是MySQL内核神级人物,在他们的熏陶下多多少少对MySQL的一些基本知识有一些零碎的记录和模糊的认识,这些基础对于今天整理理解MySQL跨行事务模型非常重要。更重要的,有很多不解的地方也可以向大神请教。

MySQL事务模型在网上也有很多的介绍,在写这篇文章之前本人也翻看了很多资料作为参考,以期让自己理解的更加深入全面。看了大多数介绍文章之后发现部分文章并不完整,比如有的只介绍了几种隔离级别下MySQL的表现,并没有从技术角度进行解读。有的文章说的倒很全面,但缺乏些许条理,读起来并不容易理解。这也是笔者希望能够带给大家一点不一样的东西,从技术角度进行解读,并且利于理解。

MySQL事务原子性保证

#p#分页标题#e#

事务原子性要求事务中的一系列操作要么全部完成,要么不做任何操作,不能只做一半。原子性对于原子操作很容易实现,就像HBase中行级事务的原子性实现就比较简单。但对于多条语句组成的事务来说,如果事务执行过程中发生异常,需要保证原子性就只能回滚,回滚到事务开始前的状态,就像这个事务根本没有发生过一样。如何实现呢?

MySQL实现回滚操作完全依赖于undo log,多说一句,undo log在MySQL除了用来实现原子性保证之外,还用来实现MVCC,下文也会涉及到。使用undo实现原子性在操作任何数据之前,首先会将修改前的数据记录到undo log中,再进行实际修改。如果出现异常需要回滚,系统可以利用undo中的备份将数据恢复到事务开始之前的状态。下图是MySQL中表示事务的基本数据结构,其中与undo相关的字段为insert_undo和update_undo,分别指向本次事务所产生的undo log。

数据库事务系列-MySQL跨行事务模型

事务回滚根据update_undo(或者insert_undo)找到对应的undo log,做逆向操作即可。对于已经标记删除的数据清理删除标记,对于更新数据直接回滚更新;插入操作稍微复杂一些,不仅需要删除数据,还需要删除相关的聚集索引以及二级索引记录。

undo log是MySQL内核中非常重要的一块内容,涉及知识比较多而且复杂,比如:

undo log必须在数据修改之前持久化,undo log持久化需不需要记录redo以防止宕机异常?如果需要就又涉及宕机恢复…

通过undo log如何实现MVCC?

那些undo log可以在什么场景下回收清理?如何清理?

MySQL事务一致性保证:强一致性事务保证

MySQL事务隔离级别

Read Uncommitted(>RU技术解读:使用X锁实现写写并发)

#p#分页标题#e#

Read Uncommitted只实现了写写并发控制,并没有有效的读写并发控制,导致当前事务可能读到其他事务中还未提交的修改数据,这些数据准确性并不靠谱(有可能被回滚掉),因此在此基础上作出的一切假设就都不靠谱的。在现实场景中很少有业务会选择该隔离级别。

写写并发实现机制和HBase并无两样,都是使用两阶段锁协议对相应记录加行锁实现。不过MySQL中行锁机制比较复杂,根据行记录是否是主键索引、唯一索引、非唯一索引或者无索引等分为多种加锁情况。这里举个简单例子做下说明:update user set userName = “libis” where id = 15。(如果大家有兴趣,可以参考登博的这篇文章:《MySQL加锁处理分析》)

如果id列是主键索引,MySQL只会为聚簇索引记录加锁。

如果id列是唯一二级索引,MySQL会为二级索引叶子节点以及聚簇索引记录加锁。

如果id列是非唯一索引,MySQL会为所有满足条件(id = 15)的二级索引叶子节点以及对应的聚簇索引记录加锁。

#p#分页标题#e#

如果id列是无索引的,SQL会走聚簇索引全表扫描,并将扫描结果加载到SQL Server层进行过滤,因此InnoDB会为扫描过的所有记录先加上锁,如果SQL Server层过滤不符合条件,InnoDB会释放该锁。因此InnoDB会为扫描到的所有记录都加锁,很恐怖吧!

接下来无论是RC、RR,抑或是Serialization,写写并发控制都使用上述机制,所以不再赘述。接下来会重点分析RC和RR隔离级别中的读写并发控制机制。

在详细介绍RC和RR之前,有必要在此先行介绍MySQL中MVCC机制,因为RC和RR都使用MVCC机制实现事务之间的读写并发。只不过两者在实现细节上有一些区别,具体区别接下来再聊。

MVCC in MySQL

MySQL中MVCC机制相比HBase来说要复杂的多,涉及的数据结构也比较复杂。为了解释的比较清晰,以一个栗子为模版进行解释。比如当前有一行记录如下图所示:

数据库事务系列-MySQL跨行事务模型

#p#分页标题#e#

前面四列是该行记录的实际列值,需要重点关注的是DB_TRX_ID和DB_ROLL_PTR两个隐藏列(对用户不可见)。其中DB_TRX_ID表示修改该行事务的事务ID,而DB_ROLL_PTR表示指向该行回滚段的指针,该行记录上所有版本数据,在undo中都通过链表形式组织,该值实际指向undo中该行的历史记录链表。

现在假设有一个事务trx2修改了该行数据,该行记录就会变为下图形式,DB_TRX_ID为最近修改该行事务的事务ID(trx2),DB_ROLL_PTR指向undo历史纪录链表:

数据库事务系列-MySQL跨行事务模型

了解了MySQL行记录之后,再来看看事务的基本结构,下图是MySQL的事务数据结构,上文我们提到过。事务在开启之后会创建一个数据结构存储事务相关信息、锁信息、undo log以及非常重要的read_view信息。

read_view保存了当前事务开启时整个MySQL中所有活跃事务列表,如下图所示,在当前事务开启的时候,系统中活跃的事务有trx4、trx6、trx7以及trx10。另外,up_trx_id表示当前事务启动时,当前事务链表中最小的事务ID;low_trx_id表示当前事务启动时,当前事务链表中最大的事务ID。

数据库事务系列-MySQL跨行事务模型

read_view是实现MVCC的一个关键点,它用来判断记录的哪个版本对当前事务可见。如果当前事务要读取某行记录,该行记录的版本号(事务ID)为trxid,那么: 

如果trxid < up_trx_id,说明该行记录所在的事务已经在当前事务创建之前就提交了,所以该行记录对当前事务可见。

如果trxid > low_trx_id,说明该行事务所在的事务是在当前事务创建之后才开启,所以该行记录对当前事务不可见。

#p#分页标题#e#

如果up_trx_id < trxid < low_trx_id, 那么表明该行记录所在事务在本次新事务创建的时候处于活动状态。从up_trx_id到low_trx_id进行遍历,如果trxid等于他们之中的某个事务id的话,那么不可见,否则可见。

以下面行记录为例,该行记录存在多个版本(trx2、trx5、trx7以及trx12),其中trx12是最新版本。看看该行记录中哪个版本对当前事务可见。

该行记录的最新版本为trx12,与当前事务read_view进行对比发现,trx12大于当前活跃事务列表中的最大事务trx10,表示trx12是在当前事务创建之后才开启的,因此不可见。

#p#分页标题#e#

再查看该行记录的第二个最新版本为trx7,与当前事务read_view对比发现,trx7介于当前活跃事务列表最小事务ID和最大事务ID之间,表明该行记录所在事务在当前事务创建的时候处于活动状态,在活跃列表中遍历发现trx7确实存在,说明该事务还没有提交,所以对当前事务不可见。

继续查看该记录的第三个最新版本trx5,也介于当前活跃事务列表最小事务ID和最大事务ID之间,表明该行记录所在事务在当前事务创建的时候处于活动状态,但遍历发现该版本并不在活跃事务列表中,说明trx5对应事务已经提交(注:事务提交时间与事务编号没有任何关联,有可能事务编号大的事务先提交,事务编号小的事务后提交),因此trx5版本行记录对当前事务可见,直接返回。

数据库事务系列-MySQL跨行事务模型

Read Committed(技术解读:写写并发使用X锁,读写并发使用MVCC避免脏读)

上文介绍了MySQL中MVCC技术实现机制,但要明白RC隔离级别下事务可见性,还需要get一个核心点:RC隔离级别下的事务在每次执行select时都会生成一个最新的read_view代替原有的read_view。

数据库事务系列-MySQL跨行事务模型

如上图所示,左侧为1号事务,在不同时间点对id=1的记录分别查询了三次。右侧为2号事务,对id=1的记录进行了更新。更新前该记录只有一个版本,更新好变成了两个版本。

#p#分页标题#e#

1号事务在RC隔离级别下每次执行select请求都会生成一个最新的read_view,前两次查询生成的全局事务活跃列表中包含trx2,因此根据MVCC规定查到的记录为老版本;最后一次查询的时间点位于2号事务提交之后,因此生成的全局活跃事务列表中不包含trx2,此时在根据MVCC规定查到的记录就是最新版本记录。

Repeatable Read(技术解读:写写并发使用X锁,读写并发使用MVCC避免不可重复读;当前读使用Gap锁避免幻读)

和RC模式不同,RR模式下事务不会再每次执行select的时候生成最新的read_view,而是在事务第一次select时就生成read_view,后续不会再变更,直至当前事务结束。这样可以有效避免不可重复读,使得当前事务在整个事务过程中读到的数据都保持一致。示意图如下所示:

数据库事务系列-MySQL跨行事务模型

这个就很容易理解,三次查询所使用的全局活跃事务列表都一样,且都是第一次生成的read_view,那之后查到的记录必然和第一次查到的记录一致。

RR隔离级别能够避免幻读吗?

#p#分页标题#e#

如果对幻读还不了解的话,可以参考该系列的第一篇文章。如下图所示,1号事务对针对id>1的过滤条件执行了三次查询,2号事务执行了一次插入,插入的记录刚好符合id>1这个条件。可以看出来,三次查询得到的数据是一致的,这个是由RR隔离级别的MVCC机制保证的。这么看来,是避免了幻读,但是在最后1号事务在id=2处插入一条记录,MySQL会返回Duplicate entry的错误,可见避免了幻读是一种假象。

数据库事务系列-MySQL跨行事务模型

严格意义避免幻读(技术解读:当前读使用Gap锁避免幻读)

之前提到的所有RR级别的select语句我们称为快照读,快照读能够保证不可重复读,但并不能避免幻读。于是MySQL又提出”当前读”的概念,常见的当前读语句有:

select for update 

 

select lock in share mode 

 

update / delete  

#p#分页标题#e#

并且规定,RR级别下当前读语句会给记录加上一种特殊的锁-Gap锁,Gap锁并不锁定某个具体的记录,而是锁定记录与记录之间的间隔,保证这个间隔中不会插入新的其他记录。下图是一个示意图:

大数据

上图中1号事务首先执行了一个当前读的select语句,这个语句会在 id > 0的所有间隔加上Gap锁,接下来2号事务在id = 3处执行插入时系统就会返回Lock wait timeout execcded的异常。当然,,其他事务可以在id <= 0的条件下插入成功,这没问题。

Serializable (技术解读:S锁(读)+X锁(写))

Serialization隔离级别是最严格的隔离级别,所有读请求都会加上读锁,不分快照读和当前读,所有写会加上写锁。当然,这种隔离级别的性能因为锁开销而相对最差。

MySQL事务持久性保证

MySQL事务持久化策略和HBase基本相同,但是涉及的组件相对比较多,主要有doublewrite、redo log以及binlog:

MySQL数据持久化(DoubleWrite)

#p#分页标题#e#

实际上MySQL的真实数据写入分为两次写入,一次写入到一个称为DoubleWrite的地方,写成功之后再真实写入数据所在磁盘。为什么要写两次?这是因为MySQL数据页大小与磁盘一次原子操作大小不一致,有可能会出现部分写入的情况,比如默认InnoDB数据页大小为16K,而磁盘一次原子写入大小为512字节(扇区大小),这样一个数据页写入需要多次IO,这样一旦中间发生异常就会出现数据丢失。另外需要注意的是DoubleWrite性能并不会影响太大,因为写入DoubleWrite是顺序写入,对性能影响来说不是很大。

redolog持久化策略(innodb_flush_log_at_trx_commit)

redolog是InnoDB的WAL,数据先写入redolog并落盘,再写入更新到bufferpool。redolog的持久化策略和HBase中hlog的持久化策略一致,默认为1,表示每次事务提交之后log就会持久化到磁盘;该值为0表示每隔1秒钟左右由异步线程持久化到磁盘,这种情况下MySQL发生宕机有可能会丢失部分数据。该值为2表示每次事务提交之后log会flush到操作系统缓冲区,再由操作系统异步flush到磁盘,这种情况下MySQL发生宕机不会丢失数据,但机器宕机有可能会丢失部分数据。

binlog持久化策略(sync_binlog)

#p#分页标题#e#

binlog作为Server层的日志系统,主要以events的形式顺序纪录了数据库的各种操作,同时可以纪录每次操作所花费的时间。在MySQL官方文档上,主要介绍了Binlog的两个最基本核心作用:备份和复制,因此binlog的持久化会一定程度影响数据备份和复制的完整性。和redo持久化策略相同,可取值有0,1,N。默认为0,表示写入操作系统缓冲区,异步flush到磁盘。该值为1表示同步写入磁盘。为N则表示每写N次操作系统缓冲就执行一次刷新操作。

总结一下,本文是数据库事务系列文章的第三篇,核心介绍了MySQL的单机跨行事务模型,其中对隔离性所涉及到的锁技术、MVCC机制进行了比较详细的说明。对事务原子性、持久性等相关特性也进行简单的分析和说明。接着笔者将会带大家一起聊聊分布式事务模型,看看和单机事务模型到底有何区别。

【编辑推荐】

不小心删除了公司数据库,是什么样一种体验?

MySQL架构设计谈:从开发规范、选型、拆分到减压

一个简单的MySQL数据迁移示例

没遇到过这十个MySQL数据库经典错误,你一定不是个好工程师


责任编辑:梧州新闻网
首页 | 游戏 | 资讯 | 关注 | 科技 | 财经 | 汽车 | 房产 | 图片 | 视频

Power by pk10 梧州新闻网 www.e-russia.com.cn 广西梧州第一新闻门户网站---梧州新闻网 版权所有 pk10开奖直播

电脑版 | 移动版