mysql事务回滚实例

本文介绍了一个关于工程数据管理系统的实现方法,重点在于如何通过预排序遍历树的方式进行数据插入,并确保数据一致性,当子节点插入失败时能够进行事务回滚。此外,还涉及了前后端交互流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

预排序遍历树,当子节点插入数据失败时,需要进行回滚。


M层:

//新加
		function add_projKind($gongchengjianming,$level,$qishijuli,$wdate,$beizhu){
				//$query = $this->db->query("select * from student");				
				//$return['boolean'] = FALSE;
				
				$this->db->query("set autocommit=0");
				$this->db->query("begin;");

				$query = $this->db->query("select * from constrproj");
				$result_count = count($query->result());
				$result_count2 = 0;

				if($result_count==0){
					//$return['boolean'] = TRUE;
					$this->db->query("insert constrproj (ConstrProjName,CPKind,Mileage,ProjStart,ProjNote,PLeft,PRight,KindLvl) values('$gongchengjianming','$level','$qishijuli','$wdate','$beizhu',1,2,0) " );
					$this->db->query("insert constrprojact (ConstrProjACTName,CPKind,Mileage,ProjStart,ProjNote,PLeft,PRight,KindLvl) values('$gongchengjianming','$level','$qishijuli','$wdate','$beizhu',1,2,0) " );
					
					
					$query2 = $this->db->query("select * from constrproj");
				    $result_count2 = count($query2->result());
					
				}else{

					$this->db->query("select @myLeft:=PLeft from constrproj where  ConstrProjID = (select max(ConstrProjID) from constrproj)");					
					$this->db->query("UPDATE constrproj SET PRight = PRight + 2 WHERE PRight > @myLeft");					
					$this->db->query("UPDATE constrproj SET PLeft = PLeft + 2 WHERE PLeft > @myLeft");					
					$this->db->query("INSERT INTO constrproj(ConstrProjName, PLeft, PRight) VALUES('$gongchengjianming', @myLeft + 1, @myLeft +2)" );
					
					$query2 = $this->db->query("select * from constrproj");
				    $result_count2 = count($query2->result());			
				   

				}

				if($result_count<>$result_count2){
					$message = "创建建名工程成功!";
					$this->db->query("set autocommit=1");
					$return['boolean'] = TRUE;
					$return['message'] = $message;
					return $return;
				}else{
					$message = "创建建名工程失败!";
					$this->db->query("rollback"); 
					$this->db->query("set autocommit=1");
					$return['boolean'] = FALSE;
					$return['message'] = $message;
					return $return;
				}

				
			}

C层及显示

前台显示

function add_jianming(){
			$gongchengjianming =trim($this->input->post('gongchengjianming'));	
			$level =trim($this->input->post('level'));
			$qishijuli =trim($this->input->post('qishijuli'));			
			$wdate =trim($this->input->post('wdate'));
			$beizhu =trim($this->input->post('beizhu'));
			

			//echo $beizhu;

			//die();


			$this->load->model('project_m');
			$return = $this->project_m->add_projKind($gongchengjianming,$level,$qishijuli,$wdate,$beizhu);
			
			<span style="background-color: rgb(255, 102, 102);">if($return['boolean']){
				echo '<script>alert("'.$return['message'].'");location.href="'.base_url().'project/projectName";</script>';
			}else{
				echo '<script>alert("'.$return['message'].'");location.href="'.base_url().'project/projectName";</script>';
			}</span>
		
		}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蜗牛慢慢向上爬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值