mysql事務和配置
阿新 • • 發佈:2019-02-02
一:程式碼寫法:
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了。
三:另一種程式碼寫法:
插入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 );
這種方法的缺點是如果有一個失敗,則整個都會失敗,優點是效率高!!
|