首頁 資料庫 mysql教程 Mysql事务处理_MySQL

Mysql事务处理_MySQL

Jun 01, 2016 pm 01:01 PM
事務

事务处理在各种管理系统中都有着广泛的应用,比如人员管理系统,很多同步数据库操作大都需要用到事务处理。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!
删除的SQL语句

deletefrom userinfo where ~~~
delete from mail where ~~
delete fromarticle where~~
~~
登入後複製


如果没有事务处理,在你删除的过程中,假设出错了,只执行了第一句,那么其后果是难以想象的!
但用事务处理。如果删除出错,你只要rollback就可以取消删除操作(其实是只要你没有commit你就没有确实的执行该删除操作)

一般来说,在商务级的应用中,都必须考虑事务处理的!

查看inodb信息
shell> /usr/local/mysql -u root -p
mysql> showvariables like "have_%"
系统会提示:

+------------------+-------+
|Variable_name | Value |
+------------------+-------+
|have_bdb | YES |
| have_crypt | YES |
|have_innodb | YES |
| have_isam | YES |
|have_raid | YES |
| have_symlink | YES |
|have_openssl | NO |
| have_query_cache | YES |
+------------------+-------+
8 rows in set (0.05sec)
登入後複製

如果是这样的,那么我们就可以创建一张支持事务处理的表来试试了。

MYSQL的事务处理功能!

作者:Feifengxlq Email:feifengxlq@sohu.com
一直以来我都以为MYSQL不支持事务处理,所以在处理多个数据表的数据时,一直都很麻烦(我是不得不将其写入文本文件,在系统重新加载得时候才写入数据库以防出错)~今天发现MYSQL数据库从4.1就开始支持事务功能,据说5.0将引入存储过程^_^
先简单介绍一下事务吧!事务是DBMS得执行单位。它由有限得数据库操作序列组成得。但不是任意得数据库操作序列都能成为事务。一般来说,事务是必须满足4个条件(ACID)
原子性(Autmic):事务在执行性,要做到“要么不做,要么全做!”,就是说不允许事务部分得执行。即使因为故障而使事务不能完成,在rollback时也要消除对数据库得影响!
一致性(Consistency):事务得操作应该使使数据库从一个一致状态转变倒另一个一致得状态!就拿网上购物来说吧,你只有即让商品出库,又让商品进入顾客得购物篮才能构成事务!
隔离性(Isolation):如果多个事务并发执行,应象各个事务独立执行一样!
持久性(Durability):一个成功执行得事务对数据库得作用是持久得,即使数据库应故障出错,也应该能够恢复!

MYSQL的事务处理主要有两种方法。
1、用begin,rollback,commit来实现
begin 开始一个事务
rollback 事务回滚
commit 事务确认
2、直接用set来改变mysql的自动提交模式
MYSQL默认是自动提交的,也就是你提交一个QUERY,它就直接执行!我们可以通过
set autocommit=0 禁止自动提交
set autocommit=1 开启自动提交
来实现事务的处理。
但注意当你用setautocommit=0的时候,你以后所有的SQL都将做为事务处理,直到你用commit确认或rollback结束,注意当你结束这个事务的同时也开启了个新的事务!按第一种方法只将当前的作为一个事务!
个人推荐使用第一种方法!
MYSQL中只有INNODB和BDB类型的数据表才能支持事务处理!其他的类型是不支持的!(切记!)

下次有空说下MYSQL的数据表的锁定和解锁!

MYSQL5.0 WINXP下测试通过~ ^_^

mysql>use test;
Database changed
mysql> CREATE TABLE `dbtest`(
-> id int(4)
-> ) TYPE=INNODB;
Query OK, 0 rowsaffected, 1 warning (0.05 sec)

mysql> select * from dbtest
-> ;
Empty set (0.01 sec)

mysql> begin;
QueryOK, 0 rows affected (0.00 sec)

mysql> insert into dbtestvalue(5);
Query OK, 1 row affected (0.00 sec)

mysql>insert into dbtest value(6);
Query OK, 1 row affected (0.00sec)

mysql> commit;
Query OK, 0 rows affected (0.00sec)

mysql> select * from dbtest;
+------+
| id |
+------+
| 5 |
| 6 |
+------+
2 rows in set(0.00 sec)

mysql> begin;
Query OK, 0 rows affected (0.00sec)

mysql> insert into dbtest values(7);
Query OK, 1row affected (0.00 sec)

mysql> rollback;
Query OK, 0rows affected (0.00 sec)

mysql> select * fromdbtest;
+------+
| id |
+------+
| 5 |
| 6|
+------+
2 rows in set (0.00sec)

mysql>

*******************************************************************************************************************

[PHP]
functionTran( $sql ) {
$judge = 1;
mysql_query('begin');
foreach ($sql as $v) {
if ( !mysql_query($v) ) {
$judge =0;
}
}
if ($judge == 0){
mysql_query('rollback');
return false;
}
elseif ($judge == 1) {
mysql_query('commit');
return true;
}
}
[/PHP]

************************************************

<?php
$handler=mysql_connect("localhost","root","");
mysql_select_db("task");
mysql_query("SETAUTOCOMMIT=0");//设置为不自动提交,因为MYSQL默认立即执行
mysql_query("BEGIN");//开始事务定义
if(!mysql_query("insertinto trans (id)values(&#39;2&#39;)"))
{
mysql_query("ROOLBACK");//判断当执行失败时回滚
}
if(!mysql_query("insertinto trans (id)values(&#39;4&#39;)"))
{
mysql_query("ROOLBACK");//判断执行失败回滚
}
mysql_query("COMMIT");//执行事务
mysql_close($handler);
?>
登入後複製
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Lock wait timeout exceeded; try restarting transaction - 如何解決MySQL報錯:事務等待逾時 Lock wait timeout exceeded; try restarting transaction - 如何解決MySQL報錯:事務等待逾時 Oct 05, 2023 am 08:46 AM

Lockwaittimeoutexceeded;tryrestartingtransaction-如何解決MySQL報錯:事務等待逾時在使用MySQL資料庫時,有時可能會遇到一個常見的錯誤:Lockwaittimeoutexceeded;tryrestartingtransaction,該錯誤表示事務等待逾時。這個錯誤通常發生在並且

MySQL事務處理:自動提交與手動提交的區別 MySQL事務處理:自動提交與手動提交的區別 Mar 16, 2024 am 11:33 AM

MySQL事務處理:自動提交與手動提交的差異在MySQL資料庫中,事務是一組SQL語句的集合,要麼全部執行成功,要麼全部執行失敗,保證了資料的一致性和完整性。在MySQL中,事務可以分為自動提交和手動提交,其區別在於事務提交的時機以及對事務的控制範圍。以下將詳細介紹自動提交和手動提交的區別,並給出具體的程式碼範例來說明。一、自動提交在MySQL中,如果沒有顯示

MySQL事務的原理及應用場景 MySQL事務的原理及應用場景 Mar 02, 2024 am 09:51 AM

MySQL事務的原理及應用場景在資料庫系統中,事務是一組SQL操作的集合,這些操作要麼全部成功執行,要麼全部失敗回滾。 MySQL作為一種常用的關聯式資料庫管理系統,支援事務的特性,能夠確保資料庫中的資料在一致性、隔離性、持久性和原子性方面得到保證。本文將從MySQL事務的基本原理入手,介紹其應用場景,並提供具體的程式碼範例供讀者參考。 MySQL事務的原理:My

PHP PDO教學:從基礎到精通的進階指南 PHP PDO教學:從基礎到精通的進階指南 Feb 19, 2024 pm 06:30 PM

1.PDO簡介PDO是PHP的擴充庫,它提供了一個物件導向的方式來操作資料庫。 PDO支援多種資料庫,包括Mysql、postgresql、oracle、SQLServer等。 PDO使開發人員能夠使用統一的api來操作不同的資料庫,這使得開發人員可以在不同的資料庫之間輕鬆切換。 2.PDO連接資料庫要使用PDO連接資料庫,首先需要建立一個PDO物件。 PDO物件的建構函式接收三個參數:資料庫類型、主機名稱、資料庫使用者名稱和密碼。例如,以下程式碼建立了一個連接到mysql資料庫的物件:$dsn="mysq

Java資料庫連線如何處理事務和並發? Java資料庫連線如何處理事務和並發? Apr 16, 2024 am 11:42 AM

事務確保資料庫資料完整性,包括原子性、一致性、隔離性和持久性。 JDBC使用Connection介面提供交易控制(setAutoCommit、commit、rollback)。並發控制機制協調並發操作,使用鎖或樂觀/悲觀並發控制來實現事務隔離性,以防止資料不一致。

MongoDB技術開發中遇到的事務管理問題解決方案分析 MongoDB技術開發中遇到的事務管理問題解決方案分析 Oct 08, 2023 am 08:15 AM

MongoDB技術開發中遇到的事務管理問題解決方案分析隨著現代應用程式變得越來越複雜和龐大,對資料的事務處理需求也越來越高。作為一種流行的NoSQL資料庫,MongoDB在資料管理方面有著出色的效能和擴展性。然而,MongoDB在資料一致性和事務管理方面相對較弱,為開發人員帶來了挑戰。在本文中,我們將探討在MongoDB開發中遇到的事務管理問題,並提出一些解

掌握 PHP PDO 的力量:進階查詢與更新 掌握 PHP PDO 的力量:進階查詢與更新 Feb 20, 2024 am 08:24 AM

PHP資料物件(PDO)擴充功能提供了與資料庫伺服器高效且物件導向的互動。其高級查詢和更新功能使開發人員能夠執行複雜的資料庫操作,從而提高效能和程式碼可維護性。本文將深入探討PDO的高階查詢與更新功能,引導您掌握其強大功能。進階查詢:使用佔位符和綁定參數佔位符和綁定參數是提高查詢效能和安全性的重要工具。佔位符使用問號(?)表示查詢中可替換的參數,而綁定參數則允許指定每個參數的資料類型和值。透過使用這些方法,您可以避免sql注入攻擊並提高效能,因為資料庫引擎可以提前最佳化查詢。 //使用佔位符$stmt=$

Java EJB架構詳解,建構穩定可擴展的系統 Java EJB架構詳解,建構穩定可擴展的系統 Feb 21, 2024 pm 01:13 PM

什麼是EJB? EJB是一種Java平台企業版(JavaEE)規範,定義了一組用於建構伺服器端企業級Java應用程式的元件。 EJB元件封裝了業務邏輯,並提供了一組用於處理事務、並發、安全性和其他企業級關注點的服務。 EJB體系結構EJB體系結構包括以下主要元件:企業Bean:這是EJB元件的基本建構塊,它封裝了業務邏輯和相關的資料。 EnterpriseBean可以是無狀態的(也稱為會話bean)或有狀態的(也稱為實體bean)。會話上下文:會話上下文提供有關當前客戶端互動的信息,例如會話ID和客戶端

See all articles