1. 程式人生 > >mysql事務和配置

mysql事務和配置

一:程式碼寫法:
function out_data_to_mysql(&$result)
{
    global $config;
    global $ymd;
    $connect_mysql = new mysqli($config["ip_host"], $config["ip_user"], $config["ip_pwd"], "", $config["ip_port"]);
    if (false == $connect_mysql) {
        echo "連線資料庫失敗!\n";
        die("Connection failed: " 
. $connect_mysql->connect_error); } $connect_mysql->query("SET NAMES UTF8"); $connect_mysql->select_db($config["ip_database"]); $num = 0; $connect_mysql->query('start transaction'); // $connect_mysql->query('SET autocommit=1'); $connect_mysql->autocommit(false
); foreach ($result as $key => $value) { $mysqlKey = "\"".$key."\""; $mysqlTopic= "\"".$value[1]."\""; $mysqlVersion= "\"".$value[0]."\""; $sql = "replace into pushmsg.uuid_topic(uuid, topic, createtime, version, width, height) values($mysqlKey, $mysqlTopic, $ymd
, $mysqlVersion, $value[2], $value[3])"; echo $sql . "\n"; $sqlResult = $connect_mysql->query($sql); if (false == $sqlResult) { echo $sql . " :run sql fail!\n"; } $num += 1; //每一萬次提交一次! if ($num % 10000 == 0) { $connect_mysql->commit(); } } $connect_mysql->commit(); echo "匯入資料的數目:" . $num . "\n"; $connect_mysql->close(); }
二:配置:

MYSQL中只有INNODB和BDB型別的資料表才能支援事務處理!其他的型別是不支援的!

***:一般MYSQL資料庫預設的引擎是MyISAM,這種引擎不支援事務!如果要讓MYSQL支援事務,可以自己手動修改:

方法如下:1.修改c:/appserv/mysql/my.ini檔案,找到skip-InnoDB,在前面加上#,後儲存檔案。

2.在執行中輸入:services.msc,重啟mysql服務。

3.到phpmyadmin中,mysql->show engines;(或執行mysql->show variables like 'have_%'; ),檢視InnoDB為YES,即表示資料庫支援InnoDB了。

也就說明支援事務transaction了。 4.mySQL資料庫設定成InnoDB引擎
三:另一種程式碼寫法:
插入200W條測試資料僅僅用了1分鐘!程式碼如下:
$sql= “insert into twenty_million (value) values”; for($i=0;$i<2000000;$i++){ $sql.=”('50′),”; }; $sql substr($sql,0,strlen($sql)-1); $connect_mysql->query($sql); 這種方法的缺點是如果有一個失敗,則整個都會失敗,優點是效率高!!