首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Codeigniter事务回滚多次访问回滚

SQL Codeigniter事务回滚多次访问回滚
EN

Stack Overflow用户
提问于 2014-02-13 05:33:44
回答 1查看 753关注 0票数 1

我有疑问。如果有两个用户目前正在使用由提供的事务,那么*代码会发生什么?

代码语言:javascript
复制
function upload_csv($filename,$type){
            $source = fopen(base_url().'uploads/'.$filename, 'r') or die("Problem open file");
             $data = fgetcsv($source,","); //1st Line /*DESCRIPTION PART*/
             $data = fgetcsv($source,","); //2nd Line /*DATA START*/
             $this->db->trans_begin();
             $loopflag = true;
             switch($type){     
                case 'receivable':
                                do{
                                    if($data[0]!=""){
                                        $loopflag = $this->csv_parser_receivable($data);
                                    }
                                    if($loopflag==false){break;}
                                }while($data = fgetcsv($source,1000,",")); 
                                break;
                case 'supplier':
                                do{
                                    if($data[0]!=""){
                                        $loopflag = $this->csv_parser_supplier($data);
                                    }
                                    if($loopflag==false){break;}
                                }while($data = fgetcsv($source,1000,",")); 
                                break;


                            }

        if (($this->db->trans_status() === FALSE)||($loopflag==false))
        {
            $this->chromephp->log('CANCELLED');
            // $this->chromephp->log("FAIL!! ROLLING BACK TO THE DEEP!");
            $this->db->trans_rollback();
        }
        else
        {
            $this->chromephp->log("FINISHED");
            // $this->chromephp->log("SUCCESS! COMMITTING....");
            $this->db->trans_commit();

            $this->consolidate_add($filename,$type);
        }
        $this->db->trans_end();

             fclose($source);
}

然后一个用户突然将*回滚*数据库,而 other仍然是E 216*批加载*他的查询?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-13 06:02:42

事务的一个重要属性是它们是孤立的。从技术上讲,这意味着事务的执行与依次依次在空中运行事务具有相同的效果,在执行任何两个事务时没有重叠。这种执行称为可序列化,意思是“具有与串行执行相同的效果”。

实现可串行化的最流行机制是locking.。这个概念很简单:

·每个事务保留对其使用的数据的访问权限。预订名为锁。

*有读锁和写锁

·在读取数据之前,事务设置读取锁。在写入数据之前,它设置一个写锁。

·读锁与写锁冲突,写锁与写锁冲突。

只有在同一数据项上没有其他事务具有冲突锁的情况下,事务才能获得锁。因此,只有在x上没有事务具有写锁的情况下,它才能获得x上的读锁。

只有当没有事务在x上有读锁或写锁时,它才能在x上获得写锁。虽然锁的概念很简单,但它对性能和正确性的影响可能是复杂的,违反直觉的,而且很难预测。构建健壮的TP应用程序需要对锁定有扎实的理解。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21746051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档