MySQL和INSERT IGNORE

时间:2013-07-19 10:21:26

标签: php mysql insert mysqli sql-insert

我正在尝试从MySQL中的数据库中读取并将我的数据插入到MySQL中的另一个数据库中。

我的第一张桌子是这样的

CREATE TABLE IF NOT EXISTS `link` (
  `_id` bigint(20) NOT NULL AUTO_INCREMENT,
  `country` varchar(30) COLLATE utf8 DEFAULT NULL,
  `time` varchar(20) COLLATE utf8 DEFAULT NULL,
  `link` varchar(100) COLLATE utf8 DEFAULT NULL,
  PRIMARY KEY (`_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=6149 ;

,第二个表是

CREATE TABLE IF NOT EXISTS `country` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `Name` varchar(15) CHARACTER SET utf8 NOT NULL,
  `Logo` varchar(50) CHARACTER SET utf8 DEFAULT NULL,
  PRIMARY KEY (`ID`),
  UNIQUE KEY `Name_3` (`Name`),
  UNIQUE KEY `ID` (`ID`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=8457 ;

第一个表中有大约6114行,我试图使用此代码插入第二个

<?php

$tmp = mysqli_connect(******, *****, ****, *****); // First table in here

if (mysqli_connect_errno()) {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$main = mysqli_connect(*****, *****, ****, ******); //Second table in here

if (mysqli_connect_errno()) {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$req = "SELECT country  FROM link";
$result = mysqli_query($tmp, $req) or die( mysqli_error($tmp) );

echo "-> ".mysqli_num_rows($result)."<br>";

while ($row = mysqli_fetch_array($result)) {
    $con = $row["country"];

    $req = "INSERT IGNORE INTO country (Name) VALUES ('$con')";
    mysqli_query($main, $req) or die( mysqli_error($main) ) ;

}
?>

问题是PHP代码有效,但对于6114需要很长时间,我买不起。 是什么导致代码需要这么长时间才能工作?它是“INSERT IGNORE”吗? 有什么方法可以让我更快地做到这一点吗?

2 个答案:

答案 0 :(得分:4)

由于数据库位于同一台服务器上,您可以简单地使用INSERT ... SELECT(这样可以避免将数据带入PHP并循环遍历结果,为每个数据库执行单独的数据库命令,因此将是相当更快):

INSERT INTO db2.country (Name) SELECT country FROM db1.link

答案 1 :(得分:1)

您可以尝试在表格链的“国家/地区”列上创建索引。