MyISAM不支援事務,但如果遇到資料庫錯誤,怎麼實現復原?例如:
一段程式要先插入a表,然後再插入b表。 邏輯如下行不行:
aResut=doInsertAif(aResut){ bResult=doInsertB if (!bResult){ delete aResult from a } }
回複內容:
MyISAM不支援事務,但如果遇到資料庫錯誤,怎麼實現復原?例如:
一段程式要先插入a表,然後再插入b表。 邏輯如下行不行:
aResut=doInsertAif(aResut){ bResult=doInsertB if (!bResult){ delete aResult from a } }
改成innodb
binlog
你好,你說的沒錯MyISAM
不支援復原。但是有幾種提前預防資料丟失的措施:如下
要麼儲存引擎改成InnoDB
;
要麼把每次執行的SQL
語句儲存起來;
要麼常備份
樓上說了binlog
我也很好奇是什麼鬼,我上面的回答狹隘了。於是找到了這個東西: mysqlbinlog+MyISAM實現mysql隨時隨地恢複的方法
myisam不支援事務,改為innodb吧
還有binlog是可以恢複資料的,但是不能即時恢複
表用innodb吧。
然後定義一個異常,如,表不存在
begin
declare flag varchar(32);
-- 定義異常
declare exit handler for 1146
begin
rollback ;...
end
set autocommit = 0 ; -- 開啟事務
aResut=doInsertA
if(aResut){
bResult=doInsertB
if (!bResult){ -- 觸發異常復原 insert into abcdefghijklmn(a)values('a');}
}
-- 提交
commit ;
沒有辦法,myisam是不支援事務的,換成innodb吧
如果非需要用myisam,可以這樣用 先插入暫存資料表中,如果執行成功用insert tableA from select id name from tableb
.這樣類比事物。可以封裝為預存程序