我有两个称为客户端的表,它们完全相同但在两个不同的数据库中。现在,主服务器总是需要使用辅助服务器进行更新。并且所有数据应始终相同,脚本每天运行一次。什么是最好的成就。
我有以下解决方案,但我想也许有更好的方法来做到这一点
$sql = "SELECT * FROM client";
$res = mysql_query($conn,$sql);
while($row = mysql_fetch_object($res)){
$sql = "SELECT count(*) FROM clients WHERE id={$row->id}";
$res1 = mysql_query($connSecond,$sql);
if(mysql_num_rows($res1) > 0){
//Update second table
}else{
//Insert into second table
}
}
然后我需要一个解决方案来删除第二个表中不在master中的所有旧数据。
任何建议帮助都会被证实
答案 0 :(得分:2)
这绝不是你的PHP代码的答案,但你应该看看@ Mysql Triggers,你应该能够创建触发器(在更新/插入/删除)并有一个触发器(如存储过程)更新你的表。
关闭你给出的描述,我会创建一个触发器来检查第二个表的更改,然后将该更改写入主表,并从第二个表中删除该初始条目(如果需要)。 / p>
根据您定义的条件运行触发器。
希望这能让您深入了解执行此任务的“另一种”方式。
有关mysql触发器的更多参考:
答案 1 :(得分:1)
您可以像这样使用mysql INSERT ... SELECT
(但首先是truncate
目标表):
TRUNCATE TABLE database2.client;
INSERT INTO database2.client SELECT * FROM database1.client;
它比PHP更快。
并注意到:
只要mysql用户被赋予了从中拉出或推送数据的所有数据库和表的权限,这将是有效的。虽然
,则mysql语句可能引用另一个数据库mysql_select_db
函数选择了一个数据库,但如果使用完整引用,如databasename.tablename
答案 2 :(得分:0)
不完全回答你的问题,但是如何使用1个表而不是2个?您可以使用fedarated表来访问另一个(如果它位于不同的mysql实例上)或直接引用该表(如shamittomar的建议)
答案 3 :(得分:0)
如果两者都在同一个MySQL实例上,您可以轻松使用view:
CREATE VIEW database2.client SELECT * FROM database1.client;
就是这样!没有同步,没有cron工作,没有伏都教:)