我正在爲使用PHP的mysql數據庫編寫升級程序。升級程序的行爲應該如下。使用MySql事務CREATE TABLE事務
- 如果所有查詢都成功執行,則應該提交更改。
- 如果一個sinngle查詢得到faild eveything應該回到previouse狀態。
我的部分程序如下。
$host = 'localhost';
$user = 'root';
$password = 'root';
$db = 'transaction';
$con = mysqli_connect($host, $user, $password);
mysqli_select_db($con, $db);
mysqli_autocommit($con, FALSE);
$query1 = "create table `status` (
`id` int not null auto_increment,
`name` varchar(60) not null,
primary key (`id`)
) engine=innodb default charset=utf8;";
$result1 = mysqli_query($con, $query1);
$query2 = "ALTER TABLE status
CHANGE name value varchar(512);";
$result2 = mysqli_query($con, $query2);
if(!($result1 && $result2)) {
mysqli_rollback($con);
} else {
mysqli_commit($con);
}
mysqli_close($con);
但是,如果「狀態」表已經存在的第一次創建表查詢失敗。所以這兩個查詢應該回滾。但是alter query已經執行並且沒有回滾。
我看到一篇文章列出了所有不能在mysql中回滾的查詢。 http://www.sitepoint.com/mysql-transaction-gotchas-good-parts/
是否有任何可能的方式在mysql中執行此角色。
我會做的第一件事是做一個數據庫的備份,如果你打算開始改變它的結構。 – 2012-03-15 08:42:25
是的@EdHeal。我在原始數據庫的副本上運行這些命令。所以如果事情失敗了,我可以用手動轉儲代替副本。但問題是我需要自動執行。 – Thilanka 2012-03-16 09:47:43
只要確保。這是容易忘記的事情。 – 2012-03-16 17:24:24