大概 MYSQL 4 有 VIEW 以 TRANSACTION (好像是好久好久前的故事) ,
我就很開心立馬就來試~

然而, VIEW 的效能慢到不能慢, TRANSACTION 卻怎樣都試不出來....

過了好多年, 青春不再的最近...
因為太陽能監控系統, 案場超多, 報表超級多, 為了偷懶程式好寫~
所以用了大量的 VIEW, 效能是好多了, 沒有以前很慢的問題,
但是,卻偶爾資料會不見,就是在原始TABLE 中.是有資料的, 可是, VIEW 就會漏掉那一筆...
怎樣查也查不出...
我習慣用 MYISAM 的資料格式, 不知道是不是因為這個關係呢...
在像海一個多的發量資料中, 分析報表, 偶爾漏個一筆, 只要我沒說, 是沒有人發現的阿... 是還好,
但若是重要的資料, 其實 真的是問題很大,


OK, 進入正題,
前天同事告訴我, MYSQL 己經進化到可以使用 TRANSACTION 了.
我還不太相信, 他說. 只要將 資料格式修改成 InnoDB 就可以快樂的寫程式了
而且,效能非常穩定...

當然, 立馬來測試, 潔西卡是採用 ADODB 來的.


第一件事情,
$conn=ADONewConnection('mysql'); <--- 錯, 不能動.
去GOOGLE .
要改成 $conn=ADONewConnection('mysqli'); <---但我的環境, 也不能動 老實說.我不知道為何,

$conn=ADONewConnection('mysqlt'); <--- 可以跑了, 開心.


然後手冊文件上寫...

$conn->StartTrans();
$conn->Execute($sql);
$conn->StartTrans(); # ignored
if (!CheckRecords()) $conn->FailTrans();
$conn->CompleteTrans(); # ignored
$conn->Execute($Sql2);
$conn->CompleteTrans();


它媽的...程式不會跑~~~~

於是GOOGLE 好久.....
程式要改成.

18 $conn->StartTrans();
19 $conn->Execute("insert into SYSTEM (SYSTEM, TITLE) values('aa','cc')");
20 $conn->Execute("insert into SYSTEM (SYSTEM, TITLE) values('33','test222')");
21
22 if ($conn->HasFailedTrans()) {
23 $chckstop = 1 ;
24 }
27 $conn->CompleteTrans();
28
29 if ($chckstop == 1 ) {
30 print 'error';
31 $conn->close();
32 exit();.......
33 }

我寫成這樣, 因為, 我不知道... HasFailedTrans() 內就 EXIT 掉程式.
沒有做 COMPLETETRANS 會不會.對 DB 有一些LOADING 時間久了會爆炸....
很想測,卻也不知道如何下手,~~
真是不專業的測試 (攤手~~~ )


非常 COOL 的一件事.

他可以巢狀迴圈跑呢~
超級 COOL

也就是他可以變這樣.
$conn->StartTrans();
$conn->Execute("insert into SYSTEM (SYSTEM, TITLE) values('aa','cc')");
$conn->Execute("insert into SYSTEM (SYSTEM, TITLE) values('33','test222')");
$conn->StartTrans();
$conn->Execute("insert into SYSTEM (SYSTEM, TITLE) values('aa','cc')");
$conn->Execute("insert into SYSTEM (SYSTEM, TITLE) values('33','test222')");
$conn->CompleteTrans();
$conn->CompleteTrans();
這樣他只會跑最外面那層.
這樣.對設計物件時, 實在是太讚了阿~

下面是不小心看到資料庫資料格式的說明....
-----------------------------------------------------------------------
儲存引擎 說明
MyISAM Default engine as of MySQL 3.23 with great performance
MEMORY Hash based, stored in memory, useful for temporary tables
InnoDB Supports transactions, row-level locking, and foreign keys
BerkeleyDB Supports transactions and page-level locking
BLACKHOLE /dev/null storage engine (anything you write to it disappears)
EXAMPLE Example storage engine
ARCHIVE Archive storage engine
CSV CSV storage engine
ndbcluster Clustered, fault-tolerant, memory-based tables
FEDERATED Federated MySQL storage engine
MRG_MYISAM Collection of identical MyISAM tables
ISAM Obsolete storage engine

-------------------------------------------------------------------------------------
這樣有沒有覺得, 換個工作. 越來越專業... XD~~~ (自 height)

peeress 發表在 痞客邦 PIXNET 留言(0) 人氣()