首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用PHP在不同的数据库中创建MySQL表结构

如何使用PHP在不同的数据库中创建MySQL表结构
EN

Stack Overflow用户
提问于 2017-01-03 22:01:56
回答 2查看 695关注 0票数 3

我有两个不同的数据库:

  • SOURCE_DATABASE
  • TARGET_DATABASE

我试图使用SOURCE_DATABASE而不是phpMyAdmin将表从TARGET_DATABASE复制到TARGET_DATABASE(因为它在phpMyAdmin中工作得很好)。

我有以下php:

代码语言:javascript
复制
$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() );

是否可以使用第一个数据库(源)中表的结构在第二个数据库(目标)中创建一个表?

EN

回答 2

Stack Overflow用户

发布于 2017-01-04 13:09:52

PhpMyAdmin和PHP在这方面是错误的工具。使用命令行shell。就像这样:

代码语言:javascript
复制
mysqldump -u root -p database1 > database1.sql

mysql -u root -p database < database1.sql

我敢保证,它的工作速度会快10倍。此外,数据库将关注数据的一致性,而不是您。

如果您真的想在PHP中这样做,请使用php命令行shell

如果您仍然希望在没有命令行shell的情况下在PHP中这样做,我可以建议您这样做:

代码语言:javascript
复制
$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
}

同时,当您将数据从一个表复制到另一个表时,您应该知道该语句。

代码语言:javascript
复制
insert into table () values (values1), (values2), (values3);

代码语言:javascript
复制
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)

票数 1
EN

Stack Overflow用户

发布于 2017-01-03 22:10:54

您可以使用MySQL的“显示创建表”函数来获取源表的结构,然后在目标连接中执行它提供的CREATE语句。

代码语言:javascript
复制
$result = mysql_query("SHOW CREATE TABLE sourceTable", $linkSource);
$create_table = mysql_result($result, 0, 1);
mysql_query($create_table, $linkTarget);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41453092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档