草庐IT

TRANSACTIONS

全部标签

php - Mysql事务: commit and rollback

我将我的PhpMyAdmin数据库引擎从MyISAM更新为INNODB以允许回滚。这是我的SQL查询:STARTTRANSACTION;UPDATEjkm_contentSETstate=0WHEREtitleIN('title-1','title2');结果:starttransaction;#MySQLreturnedanemptyresultset(i.e.zerorows).UPDATEjkm_contentSETstate=1WHEREtitleIN('title-1','title2');#2rowsaffected.1)所以该声明告诉我有2行受到影响但更改没有出现在任何地

php - Web 应用程序中的 "Undoing deletes"?

我看到越来越多的网站在按下删除按钮后提供撤消选项。按钮背后的逻辑是如何完成的?项目是否被javascript删除并从用户屏幕上“消失”并添加了计划删除,让用户有时间撤消它,或者它是如何工作的?为用户提供撤消功能的其他选项是什么? 最佳答案 这实际上取决于应用程序的结构。一种常见的方法是不删除记录/项目,但在内部将其标记为已删除(使用bool列),将其从所有查询和列表中排除。如果您有节点结构,您可能希望将项目移动到“回收站”节点,从那里可以将项目恢复到其原始位置。在这两种变体中,已删除的项目会不时清除-基于时间(3周后删除)或数量(最

php - 事务回滚不起作用

我已经围绕PDO系统制作了一个具有额外功能的数据库包装器(是的,我知道一个包装器周围的包装器,但它只是具有一些额外功能的PDO)。但是我注意到一个问题。下面的内容并没有像它应该的那样工作:beginTransaction());$db->query('INSERTINTOtest(data)VALUES(?);',array('Foo'));print_r($db->query('SELECT*FROMtest;')->fetchAll());var_dump($db->rollBack());print_r($db->query('SELECT*FROMtest;')->fetchA

mysql - 什么是 Mysql 表元数据锁等待队列排序

我有一堆连接在一个事务中执行SELECT,一个执行DDL。mysql手册非常清楚如何在事务中获取元数据锁:Toensuretransactionserializability,theservermustnotpermitonesessiontoperformadatadefinitionlanguage(DDL)statementonatablethatisusedinanuncompletedexplicitlyorimplicitlystartedtransactioninanothersession.Theserverachievesthisbyacquiringmetadata

mysql - MySQL 保存点在 Web 服务中的实际应用?

有没有人可以分享使用MySQL的经验savepoints(直接或通过ORM),尤其是在重要的Web服务中?你在哪里实际使用过它们?它们是否足够可靠(假设您愿意运行相当新版本的MySQL)或是否过于前沿或过于昂贵?最后,有没有人有过类似以下用例的经验,您是否为此使用了保存点?假设某些特定工作单元的要点是向Orders表添加一行(当然,不必与订单相关)并更新OrdersAuditInfo表,在同一个事务中。如果可能的话,更新Orders是必不可少的,但是OrdersAuditInfo表并不是那么重要(例如,只将错误记录到文件中是可以的,但继续进行与整体交易)。在低级别上它可能看起来像这样(

mysql - Hibernate/MySQL 并发问题

我使用Hibernate(4.1.9.Final)和MySQL(14.14Distrib5.5.29,InnoDB表)得到了一个非常奇怪的结果:当我使用一个线程将某些内容保存到数据库并尝试使用另一个线程获取它时,Hibernate并不总能找到该实体。(尽管事实上我在打开加载session之前正确地提交了事务并关闭了持久session。)一些观察:我无法使用单线程程序重现这一点。我可以在数据库中看到“丢失”的实体,并且如果我重新启动应用程序,Hibernate可以成功加载实体。这是一个说明问题的SSCCE。(为简洁起见省略了导入):publicclassStressTest{static

php - Zend Framework 数据库事务 - 无法回滚

好吧,让我先解决这个问题。我的问题与此类似:CannotrollbacktransactioninZendFramework我的表一直都是innoDB,一直都是。我已经检查了有问题的表,它确实是innoDB。关于问题..我有一个数据库实例,通过这个事务运行的模型实例访问同一个数据库:$db->beginTransaction();try{//Runaninsert$model_record->insert(array('single_item'=>'itsvalue'));//Morelogic,andrunanupdate.$model_record->this_value='tha

mysql - 事务是否停止了 MySQL 中的所有竞争条件问题?

考虑这种情况:开始交易使用auto_increment键将20条记录插入到表中获取第一个插入ID(假设它是153)更新该表中id>=153的所有记录promise第4步安全吗?也就是说,如果另一个请求几乎同时进来,在上面的第2步之后又插入了20条记录,但是在第4步之前,会不会出现racecondition? 最佳答案 Thatis,ifanotherrequestcomesinalmostpreciselyatthesametime,andinsertsanother20recordsafterstep2above,butbefor

MySQL InnoDB 在 SELECT 上使用排他锁死锁(用于更新)

我这样做是为了确保这个进程的实例只运行一次(伪代码php/mysqlinnodb):STARTTRANSACTION$rpid=SELECT`value`FROMlocksWHEREname="lock_name"FORUPDATE$pid=posix_getpid();if($rpid>0){$isRunning=posix_kill($rpid,0);if(!$isRunning){//isRunningINSERTINTOlocksvalues('lock_name',$pid)ONDUPLICATEKEYUPDATE`value`=VALUES(`value`)}else{RO

MySQL 事务日志

我正在从事一个项目,我们需要在我们的DBMS(MySQL)中使用“事务日志”。我们已经切换到使用InnoDB以便将事务用于另一个需求。我想了解什么是交易日志。我已经搜索了一天多,包括阅读MySQL文档。也许我只是没有在寻找正确的关键字,我不确定。或者“交易日志”可能是不恰当的术语。据我了解,数据库事务日志记录类似于日志文件系统,因为在将日志更改提交到文件系统之前对日志进行了更改。从我读到的内容来看,InnoDB引擎听起来像是在将事务提交到磁盘之前将它们存储在某种日志中。这听起来准确吗?如果是这样,交易日志在哪里?是ib_logfile0和ib_logfile1吗?