将非现有行从一个数据库表复制到另一个数据库表?

时间:2010-06-28 12:23:24

标签: php mysql

我在Database 1中有以下1 db表,在Database 2中有1db表,现在两个表的结构完全相同。现在发生的情况是表1(DB1)每天都会添加新行,我需要更新表1(DB 2)中的表1(DB 1)新行,以便这两个表保持不变。 cron将在午夜触发php脚本来执行此任务。这样做的最佳方法是什么以及如何使用PHP / mysql?

3 个答案:

答案 0 :(得分:1)

您可能需要关注复制(请参阅http://dev.mysql.com/doc/refman/5.4/en/replication-configuration.html)。这是“正确”的做法;但是,对于小型表格而言,上述解决方案可能更好(当然也更容易)。

答案 1 :(得分:0)

这可能会帮助你,这是我在数据库中为类似的事情做的事情

    $dropSQL = "DROP TABLE IF EXISTS `$targetTable`";
    $createSQL = "CREATE TABLE `$targetTable` SELECT * FROM `$activeTable`";
    $primaryKeySQL = "ALTER TABLE `$targetTable` ADD PRIMARY KEY(`id`)";
    $autoIncSQL = "ALTER TABLE `$targetTable` CHANGE `id` `id` INT( 60 ) NOT NULL  AUTO_INCREMENT";
    mysql_query($dropSQL);
    mysql_query($createSQL);
    mysql_query($primaryKeySQL);
    mysql_query($autoIncSQL);

显然你必须修改taget和活动表变量。当你这样做时,丢弃桌子会丢失主键,哦......很容易添加回来

答案 2 :(得分:0)

我建议按照已经建议进行复制。但是,另一个选择是使用mysqldump来获取所需的行并将它们发送到另一个表。

mysqldump -uUSER -pPASSWORD -hHOST --compact -t --where="date=\"CURRENT_DATE\"" DB1 TABLE | mysql -uUSER -pPASSWORD -hHOST -D DB2

USERHOSTPASSWORD替换为您的数据库的登录信息。如果DB1DB2具有不同的访问信息,则可以对命令的每个部分使用不同的信息。 DB1DB2是数据库的名称,TABLE是表的名称。

您还可以修改--where选项以仅获取需要更新的行。希望您有一些可以使用的查询。如前所述,如果表具有主键,则可以使用类似

的命令获取DB2所具有的最后一个键。
KEY=`echo "SELECT MAX(KEY_COLUMN) FROM TABLE;" mysql -uUSER -pPASSWORD -hHOST -D DB2`

用于bash shell脚本(然后在上面的WHERE子句中使用此值)。根据主键的生成方式,这可能是一个坏主意,因为如果存在行,则可以在键空间的孔中添加行。

只要您有一个可以选择这些行的查询,只要更改了行,此解决方案也会起作用。只需将--replace选项添加到mysqldump命令即可​​。在您的情况下,最好添加一些类型的值,例如更新日期,您可以通过它来比较。