首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Thinkphp同时Mysql与MongoDB数据库

最近公司的项目需求,由于原来是使用的关系型数据库MySQL,涉及到的新业务需要非关系型,所以考虑到了mogodb,但是遇到的问题是项目需要Thinkphp5同时使用Mysql和Mongodb数据库 ?...本篇文章详细介绍Thinkphp5 如何同时使用Mysql和MongoDB数据库。 一、在database.php配置默认关系型MySQL数据库连接 ?...'type' => 'mysql', 'hostname' => '服务器IP地址', 'database' => '数据库名', 'username'...=> '用户名', 'password' => '密码', 'hostport' => '数据库端口', 二、在config.php配置第二个非关系型数据库连接 ?...Thinkphp5扩展MongoDB可参考:Thinkphp5 扩展 MongoDB 详解 三、数据库使用 //默认MySQL数据库读取数据 $test = Db::name("test")->select

3.3K20
您找到你想要的搜索结果了吗?
是的
没有找到

mysql、幻、不可重复读

,我们称之为“脏”不可重复读小张想查看 id=1 的英雄是谁,于是他进行了 SQL 查询:SELECT name FROM heros_temp WHERE id = 1;图片然而此时,小李开始了一个事务操作...幻小张想要看下数据表里都有哪些英雄图片这时当小张执行完之后,小李又开始了一个事务,往数据库里插入一个新的英雄“吕布”BEGIN;INSERT INTO heros_temp values(4, '吕布...这种异常情况我们称之为“幻”。总结脏:读到了其他事务还没有提交的数据。不可重复读:对某数据进行读取,发现两次读取的结果不同,也就是说没有读到相同的内容。...这是因为有其他事务对这个数据同时进行了修改或删除。...幻:事务 A 根据条件查询得到了 N 条数据,但此时事务 B 更改或者增加了 M 条符合事务 A 查询条件的数据,这样当事务 A 再次进行查询的时候发现会有 N+M 条数据,产生了幻

79950

MySQLMySQL事务的问题:脏、幻、不可重复读

MySQL事务的问题:脏、幻、不可重复读 在上一篇文章中,我们已经学习过了事务相关的基础知识,今天,我们继续学习事务有可能带来的一些问题。...-- my.cnf [server] transaction-isolation = READ-UNCOMMITTED 脏的意思就是两个事务同时在运行,其中 A 事务修改了某个字段,B 事务读取了这个字段...很明显,这就产生了问题,这个就是脏带来的结果,一致性出现了问题。 不可重复读 不可重复读是啥意思呢?...注意,在不可重复读中,没有回滚的操作,另外,如果两个事务同时都是修改一条数据的话,那么后修改的数据会覆盖前面修改事务的操作结果,这也是不可重复读的问题。...; +----------+ | username | +----------+ | aaa | +----------+ 1 row in set (0.00 sec) 幻 最后一个幻

9110

带你 MySQL 源码:select *

本文内容基于 MySQL 8.0.32 源码。正文1. 整体介绍对于 select * from table 中的星号,我们再熟悉不过了:它告诉 MySQL 返回表所有字段的内容。...MySQL 服务端收到 select 语句之后,会在 server 层把星号展开为表中的所有字段,然后告诉存储引擎返回这些字段的内容。...// 比较星号前面的数据库名和当前迭代的表所属的数据库名是否相同 if ((table_name && my_strcasecmp(table_alias_charset...} } ...insert_fields() 的主要逻辑如下:按照 select 语句中表的出现顺序迭代每个表,每迭代一个表,都会判断该表名和星号前面的表名(如果有)是否相同,以及该表所属的数据库名和星号前面的数据库名是否相同...如果当前迭代的表名、表所属的数据库名和星号前面的表名、数据库名都相同,接下来会进行访问权限检查。

55800

MySQL事务(脏、不可重复读、幻)

数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作;这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行;事务是一组不可再分割的操作集合(工作逻辑单元); 2.事务的四大特性ACID...数据库管理系统通常使用锁来实现这个特征。 持久性(DURABILITY):   一个被完成的事务的效果应该是持久的。...、INSERT等DQL及DML语句的执行,mysql会自动提交该事务,如果关闭就需要手动提交或者回滚来完成操作。...脏的情况:对于两个事务T1与T2,T1读取了已经被T2更新但是还没有提交的字段之后,若此时T2回滚,T1读取的内容就是临时并且无效的   开启两个mysql客户端,并创建一张测试表transaction...@@tx_isolation; #查询隔离级别 SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; # 更改隔离级别   两个客户端同时开启事务

1.1K10

Mysql、幻、不可重复读(二)

Mysql、幻、不可重复读引言在数据库领域中,脏、幻和不可重复读是常见的问题,特别是在并发操作的环境下。本文将详细介绍这三个问题的定义、原因以及如何通过Mysql来解决它们。1....脏(Dirty Read)脏指的是一个事务读取到了另一个事务未提交的数据。当一个事务修改数据但还没有提交时,另一个事务读取到了这个未提交的数据,并做出了相应的操作。...事务2在事务1未提交的情况下读取到了这条记录,导致脏的问题。2....幻(Phantom Read)幻指的是一个事务在读取某个范围内的记录时,另一个事务在该范围内插入了新的记录,导致第一个事务再次读取到了该范围内的新记录,就像幻觉一样。...在事务中使用锁定(SELECT ... FOR UPDATE)来锁定读取的数据,保证事务期间数据的一致性。在设计数据库时,合理规划表结构和索引,减少不可重复读的可能性

16600

MySQL的脏、幻、不可重复度是什么

什么是脏又称为无效数据读取,指在数据库访问中,事务T1修改了某个数值,随后事务T2读取了该数值,而后因某种原因,T1撤销了对该数值的修改,导致T2读取到的数据变为无效。...具体而言,脏是指一个事务正在访问数据并对其进行修改,但这些修改尚未提交到数据库中。此时,另一个事务也访问该数据,并使用了它。...什么是幻是指在事务非独立执行时出现的现象,举例来说,第一个事务对表中的数据进行了修改,涉及到表中的“全部数据行”。与此同时,第二个事务也修改了该表的数据,插入了“一行新数据”。...什么是不可重复读不可重复读是指在数据库访问中,一个事务内进行两次相同的查询却返回了不同的数据。这种现象是由于系统中其他事务的提交修改所引起的。...扩展知识之事务隔离级别脏、不可重复读和幻这三种异常现象是在SQL-92标准中定义的,同时,SQL-92标准还确定了4种隔离级别来处理这些异常情况,按照严格程度从高到低排列分别为:顺序执行(Serializable

14710

MySQL的脏、幻、不可重复度是什么

什么是脏又称为无效数据读取,指在数据库访问中,事务T1修改了某个数值,随后事务T2读取了该数值,而后因某种原因,T1撤销了对该数值的修改,导致T2读取到的数据变为无效。...具体而言,脏是指一个事务正在访问数据并对其进行修改,但这些修改尚未提交到数据库中。此时,另一个事务也访问该数据,并使用了它。...什么是幻是指在事务非独立执行时出现的现象,举例来说,第一个事务对表中的数据进行了修改,涉及到表中的“全部数据行”。与此同时,第二个事务也修改了该表的数据,插入了“一行新数据”。...什么是不可重复读不可重复读是指在数据库访问中,一个事务内进行两次相同的查询却返回了不同的数据。这种现象是由于系统中其他事务的提交修改所引起的。...扩展知识之事务隔离级别脏、不可重复读和幻这三种异常现象是在SQL-92标准中定义的,同时,SQL-92标准还确定了4种隔离级别来处理这些异常情况,按照严格程度从高到低排列分别为:顺序执行(Serializable

9610

MySQL如何解决幻

关于当前可以见MySQL MVCC(多版本控制)这篇文章。...在可重复隔离级别下,普通的查询是快照读,是无法看到别的事务插入的数据的,只有当前才会出现幻。 幻有什么问题? 语义上带来了破坏。...where id=1; /*(1,5,5)*/ update t set d=100 where d=5;/*所有d=5的行,d改成100*/ 这个binlog如果被拿到备库执行或者用来克隆一个数据库...(0, 5) (5, 10) (10, 15) (15, 20) (20, 25) (25, +∞) 当我们在执行select * from t where d=5 for update的时候,除了给数据库已有的行加行锁以外...间隙锁是在可重复读隔离级别下才会生效,如果将隔离级别设置为提交,就不会有间隙锁了,但是同时需要解决数据和日志不一致的问题(需要把binlog格式设置为ROW)。

45330

Mysql如何解决

也是在面试中经常被问到的,今天我们按照下面几个方面讲解 幻是什么 幻有什么问题 如何解决幻 首先我们建立我们的表,且插入6条数据,如下图 CREATE TABLE `t` ( `id` int...sessionC插入id=1这行数据,Q3返回id=0,1,5 这里Q3读到id=1这行数据就是幻,幻是指在一次事务中,前后两次相同的范围查询,看到了不一样的数据。...在可重复读级别下,普通查询是读取快照读,不可以看到其他事物中的插入的数据,只有当前,才会有幻 上面的Q2不是幻,他是当前,幻是针对新插入行 幻有什么问题 破坏语义 sessionA中T1select...next-lock key 的引入虽然解决了幻的问题,但是也引来了一些问题 如下图执行结果,就可能引起死锁 ?...,答案是有的,Mysql默认的事物隔离级别是可重复读,但是如何我们把事物设置成已提交和binlog_format=row,也是可以解决幻的问题,当然要这样配置是否合理要看你们的业务场景.

97620

带你 MySQL 源码:limit, offset

我一直想写 MySQL 源码分析文章,希望能够达成 2 个目标: 不想研究源码的朋友,可以通过文章了解 MySQL 常用功能的实现逻辑,做到知其然,也知其所以然。...想研究源码的朋友,能够以文章为切入点,迈进 MySQL 源码研究之门。 目标是明确的,任务是艰巨的。 MySQL 源码数量庞大,各种功能的代码盘根错节,相互交织在一起,形成一张复杂的网。...对 MySQL 源码感兴趣的朋友们,如果想看到源码分析系列的更多文章,请帮忙把文章传播出去,分享给更多人。...本文内容基于 MySQL 8.0.32 源码。 正文 1....sql_parse.cc:2036 | + - x > dispatch_sql_command(THD*, Parser_state*) sql/sql_parse.cc:5322 | + - x = > mysql_execute_command

87930

MYSQL事件隔离级别以及复读,幻,脏的理解

一.mysql事件隔离级别 1未提交(READUNCOMMITTED) 另一个事务修改了数据,但尚未提交,而本事务中的SELECT会读到这些未被提交的数据(脏)( 隔离级别最低,并发性能高 ) 2.....提交(READCOMMITTED) 本事务读取到的是最新的数据(其他事务提交后的)。...但是,会有幻现象(稍后解释)。...会出幻(锁定所读取的所有行) 4.串行化(SERIALIZABLE) 操作会隐式获取共享锁,可以保证不同事务间的互斥(锁表) 二.脏、不可重复读、幻、复读 1.脏 当前事务读到的数据是别的事务想要修改成为的但是没有修改成功的数据...2.不可重复读 当前事务先进行了一次数据读取,然后再次读取到的数据是别的事务修改成功的数据,导致两次读取到的数据不匹配,也就照应了不可重复读的语义 3.幻 当前事务第一次取到的数据比后来读取到数据条目少或者增加

70910

MySQL如何解决幻问题

//MySQL如何解决幻问题?...// 先来说说幻的概念吧,在MySQL中,如果一个事务A根据某种特定条件的SQL查询出来一些记录record_a,此时另外一个事务插入了一些符合这种特定条件的记录record_b,原先的事务再次根据同样的...幻强调的是一个事务按照相同的SQL查询了记录之后,后续的结果中出现了之前结果中不存在的值。 在默认RR隔离级别下,当发生了幻现象之后,MySQL解决这种情况会使用两种方案。...方案一:操作利用MVCC解决,写操作利用加锁解决 MVCC知识可以查看之前的文章: 《MySQL之MVCC初探(1)》 MVCC其实是借助于Readview(视图)的概念,对数据库生成Readview...为了解决这个问题,MySQL引入了间隙锁,间隙锁的引入,阻止了其他会话在指定的间隙插入相关记录,也就解决了幻的问题。

1.4K10

MySQL InnoDB如何解决幻

因此,幻读在“当前”才会出现。SB修改结果被SA之后的select语句用“当前”看到,不能称为幻。幻仅专指新插入的行而非更新。 这三查询都加for update,都是当前。...5 InnoDB解决幻 5.1 幻的原因 行锁只能锁行,但新插入记录这个动作,要更新的是已有记录之间的“间隙”。因此,为解决幻,InnoDB需引入间隙锁(Gap Lock),锁住两值之间的空隙。...间隙锁和next-key lock解决幻,但也带来“困扰”。...但同时,要解决可能出现的数据和日志不一致问题,要把binlog格式设为row。这也是互联网常用配置。...同时存在两种事务隔离级别,会有问题吗? 即使给所有行加上行锁,仍无法解决幻,因此引入间隙锁。 行锁确实比较直观,判断规则也相对简单,间隙锁的引入会影响系统的并发度,也增加锁分析的复杂度,但有章可循。

74820

MySQL Cases-MySQL找出谁持有全局

/developer/article/1869793 MySQL找出谁持有行锁(RC级别)https://cloud.tencent.com/developer/article/1869900 找出谁持有全局锁...另外还有一种情况,可是最难排查的一种情况,就是线上系统权限约束不规范,各种人员使用的数据库账号都有RELOAD权限,都可以对数据库加全局锁。     ...在MySQL5.7之前的版本中,要排查谁持有全局锁,通常在数据库层面是很难直接查询到有用数据的(innodb_locks表也只能记录InnoDB层面的锁信息,而全局锁是Server层面的锁,所以无法查询到...从MySQL5.7版本开始提供了performance_schema.metadata_locks表,用来记录一些Server层的锁信息(包含全局锁和MDL锁等)。...数据库

1.1K61

MySQL间隙锁(幻解决原理)

专栏持续更新中:MySQL详解 一、间隙锁概念 当我们用范围条件而不是相等条件检索数据, 并请求共享或排他锁时,InnoDB 会给符合条件的已有数据记录的索引项加锁;对于键值在条件范围内但并不存在的记录...以满足串行化隔离级别的要求 ,对于上面的例子,要是不使用间隙锁,如果其他事务插入了 userid 大于 100 的任何记录,那么本事务如果再次执行上述语句,就会发生幻 InnoDB串行化隔离级别使用间隙锁...(gap lock)解决幻(事务并发情况下两次查询的数据量不同)问题 间隙锁专用于串行化隔离级别,可解决幻问题,幻问题表现为:当前事务没做操作,前后两次相同的查询语句,显示的数据量不一致 我们把事务...回滚,重新开启事务 开始测试 我们发现事务1无论是插入age>18范围内的数据,还是范围外的数据,都无法成功 这时我们就要分析了,这应该没有用到索引,因为我们用索引,过滤出的数据占了整张表的一大半,MySQL...),通过间隙锁解决幻(两次查询的数据量不同)

74220

MySQL谬误集01:不加锁

我们常常听到一些关于MySQL的说法,比如“不加锁”,比如“单表数据要小于1000万”,比如“DDL会锁表”等,比如“单表的索引数量应该小于X个”,如果不加思考和测试就直接全盘接受,就可能犯错误,而DB...注:但表有查询的同时,可以插入新记录(CONCURRENT INSERT) 3.ANSI-92标准 在SQL ANSI-92标准中,这个说法是错误的 。...当前与快照读 使用MVCC,即在RC或RR隔离级别下,有个问题是,如果想看到记录的最新版本,或者想查到记录的同时不允许其它事务更改,怎么办?...总结 MySQL不加锁是有条件的: 所有读取都会加Metadata Lock MyISAM引擘会加表锁 INNODB引擘不加锁是利用MVCC实现的 Serializable隔离级别会对所有读取的行加锁...MVCC下,当前也会对读取的行加锁 ---- 公众号"数据库之巅"分享这十几年来我在数据库特别是互联网金融数据库运维走过的路和踩过的坑,欢迎大家关注。

34132
领券