如果不開啟事務,執行一條sql,馬上會持久化資料。可見:預設的mysql對sql語句的執行是自動提交的!
如果開啟了事務,就是關閉了自動提交的功能,改成了commit執行自動提交
自動提交的特徵是儲存在伺服器的乙個叫做autocommit的乙個變數內。使用set 變數名=變數值的形式就可以完成修改(set autocommit=0;),此時就關閉了自動提交功能,需要手動執行commit讓資料持久化
回滾(rollback)
提交(commit)
開始事務(begin、start transaction)
<?php//資料庫:create table account(id int primary key,balance float);
//銀行轉賬
$mysqli=new mysqli("localhost",'root','','test');
if ($mysqli->connect_error)
//將提交設為假
$mysqli->autocommit(false
);
$sql1="update account22 set balance=balance+2 where id='1';";
$sql2="update account1 set balance=balance-2 where id='2';";
$a=$mysqli->query($sql1
);
$b=$mysqli->query($sql2
);
//判斷語句是否為真
if (!$a || !$b
) else
$mysqli->close();
?>
在學習這個知識點所遇到的問題:**沒問題,在執行事務的時候,rollback不生效。
原因:我的資料庫及表不是innodb和bdb型別的(mysql中只有innodb和bdb型別的資料表才能支援事務處理!其它型別是不支援的!)
解決方法:將資料庫及表修改為innodb型別。修改方法參照:
示例:預處理dml語句
1<?php
2$mysqli=new mysqli("127.0.0.1","root","","test");
3if (!$mysqli->connect_error) 6//
預處理及繫結
7$sql="insert into user1 (name,password,email,age)values ( ?,?,?,?);";8//
prepare 準備執行的sql語句
9$sql_stmt=$mysqli->prepare($sql) or die($mysqli->error);
10//
引數繫結
11//bind_param:將變數作為引數繫結到預處理語句
12//這裡的型別和順序要對應
13$sql_stmt->bind_param('sssi',$name,$password,$email,$age
);14
//設定引數並執行
15$name='sunwukong';
16$password='123';
17$email='[email protected]';
18$age='200';
19//
執行準備好的sql
20$b=$sql_stmt->execute();
21//
新增第二個
22$name='zhubajie';
23$password='123';
24$email='[email protected]';
25$age='200';
26$b=$sql_stmt->execute();
27//
判斷是否插入成功
28if (!$b
) else
33//
釋放34
$mysqli->close();
35 ?>
預處理dql語句
1$stmt->free_result();<?php
2$mysqli=new mysqli("127.0.0.1","root","","test");
3if (!$mysqli->connect_error) 6//
1.預處理及繫結
7//2.引數設定
8//3.執行
9$sql="select name from user1 where id>?";
10$stmt=$mysqli->prepare($sql) or die($mysqli->error) ;
11$id=3;
12$stmt->bind_param("i",$id
);13
//bind_result:將變數繫結到預先準備好的語句以獲得結果儲存
14$stmt->bind_result($name
);15
$stmt->execute();
16while ($stmt->fetch())
$stmt->close();
19 ?>
在學習中遇到的問題
1.(預處理dql語句)執行語句的時候一直提示「fatal error: call to a member function bind_param() on boolean in d:\wamp64\www\shiwu2.php on line 12」,一直在繫結引數**找問題。
原因:sql語句寫錯了。解決方案:在執行sql的時候判斷語句是否執行錯誤並列印錯誤資訊
2.(預處理dql語句)第九行與第12行的引數要對應-name
PostgreSQL 十二 事務處理與併發控制
postgresql提供了多種資料完整性的保證機制,如約束 觸發器 約束和鎖管理等。12.1 事務管理簡介 事務是postgresql中的基本工作單元,是使用者定義的乙個資料庫操作序列,這些操作要麼全做要麼全不做,是乙個不可分割的工作單位。事務的屬性 原子性 atomic 事務必須是原子工作單元 對...
PHP與MYSQL事務處理
mysql的事務處理主要有兩種方法。1 用begin,rollback,commit來實現 begin 開始乙個事務 rollback 事務回滾 commit 事務確認 2 直接用set來改變mysql的自動提交模式 mysql預設是自動提交的,也就是你提交乙個query,它就直接執行!我們可以通過...
Oracle與SQL Server事務處理的比較
事務處理是所有大型資料庫產品的乙個關鍵疑問,各資料庫廠商都在這個方面花費了很大精力,不同的事務處理方式會導致資料庫效能和功能上的巨大差異。事務處理也是資料庫管理員與資料庫運用 程式開發人員必須深刻理解的乙個疑問,對這個疑問的疏忽可能會導致運用 程式邏輯不正確以及效率低下。下面我們針對oracle及s...