我有两个不同的数据库:
我试图使用SOURCE_DATABASE而不是phpMyAdmin将表从TARGET_DATABASE复制到TARGET_DATABASE(因为它在phpMyAdmin中工作得很好)。
我有以下php:
$linkSource = mysql_connect( SERVER, SOURCE_USERNAME, SOURCE_PASSWORD );
mysql_select_db( SOURCE_DATABASE, $linkSource );
$linkTarget = mysql_connect( SERVER, TARGET_USERNAME, TARGET_PASSWORD );
mysql_select_db( TARGET_DATABASE, $linkTarget );
mysql_query( 'CREATE TABLE `targetDB.targetTable` LIKE `sourceDB.sourceTable` ) or die( mysql_error() );是否可以使用第一个数据库(源)中表的结构在第二个数据库(目标)中创建一个表?
发布于 2017-01-04 13:09:52
PhpMyAdmin和PHP在这方面是错误的工具。使用命令行shell。就像这样:
mysqldump -u root -p database1 > database1.sql
mysql -u root -p database < database1.sql我敢保证,它的工作速度会快10倍。此外,数据库将关注数据的一致性,而不是您。
如果您真的想在PHP中这样做,请使用php命令行shell。
如果您仍然希望在没有命令行shell的情况下在PHP中这样做,我可以建议您这样做:
$query = "show tables from source_database";
$tables = $dbSource->getColumn($query)//get one column from database
foreach($tables as $tableName) {
$query = "show create table ".$tableName;//← it will return query to clone table structure
$createTableSchema = $dbSource->getRow($query);//← get assoc array of one row
$dbTarget->query($createTableSchema['Create Table']);//← here is your silver bullet
}同时,当您将数据从一个表复制到另一个表时,您应该知道该语句。
insert into table () values (values1), (values2), (values3);比
insert into table () values (values1);
insert into table () values (values2);
insert into table () values (values3);但插入多行与max_allowed_packet属性字段有关。万一查询比这个字段更大(是的,查询字符串可以分配1GB内存),MySQL将抛出异常。因此,要构建Insert multy查询,您应该获得max_allowed_packet并根据这个大小生成这个查询。此外,为了提高性能,可以从目标表中提取disable keys。(别忘了enable keys,lol)
发布于 2017-01-03 22:10:54
您可以使用MySQL的“显示创建表”函数来获取源表的结构,然后在目标连接中执行它提供的CREATE语句。
$result = mysql_query("SHOW CREATE TABLE sourceTable", $linkSource);
$create_table = mysql_result($result, 0, 1);
mysql_query($create_table, $linkTarget);https://stackoverflow.com/questions/41453092
复制相似问题