MySQL 和插入忽略

N3m*_*3mo 0 php mysql insert 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 ;
Run Code Online (Sandbox Code Playgroud)

第二张表是

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 ;
Run Code Online (Sandbox Code Playgroud)

第一个表中有大约 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) ) ;

}
?>
Run Code Online (Sandbox Code Playgroud)

问题是 php 代码有效,但 6114 需要很长时间,我负担不起。是什么导致代码需要这么长时间才能工作?是“插入忽略”吗?有什么办法可以更快地做到这一点吗?

egg*_*yal 5

由于数据库是在同一台服务器上,你可以简单地使用INSERT ... SELECT(这避免了必须把数据转换成PHP和遍历执行为每个单独的数据库命令的结果,所以会相当快):

INSERT INTO db2.country (Name) SELECT country FROM db1.link
Run Code Online (Sandbox Code Playgroud)