【问题标题】:PHPMYADMIN | How could we sync two tables in two different MySQL databases (Within same server)?PHPMYADMIN |我们如何在两个不同的 MySQL 数据库中同步两个表(在同一服务器内)?
【发布时间】:2020-09-07 07:45:43
【问题描述】:
  • 我有两个 MySQL 数据库 site1 & site2[两者都在同一个 服务器]。

  • 我在上述数据库both 中有一个名为users 的表(确切 site1site2 的结构相同)。结构如图 下面:

工作原理:

所以site1site2 将让用户通过移动应用程序将自己注册到数据库(对于某些用例)。因此,用户下载移动应用程序 -> 根据用户位置,他们将落入site1site2 -> 用户注册自己,这就是new row entriesusers 表中生成的方式.

我想达到什么目的?

由于同一用户可能偶尔会访问两个站点,site1site2 应该为所有列同步 users 表。因此基于唯一的电话号码(phone),users 表在site1site2 中的行应该始终保持同步。我们怎样才能做到这一点?我知道触发器是一种选择,但我会很感激要使用的格式的示例代码..或者任何提示都会非常感激。现在确定event 对这个用例有多大帮助。有人可以帮忙吗?

使用的 PHP 框架是 Laravel。

【问题讨论】:

  • 使用单一数据库不是一个适合您的解决方案吗?
  • 否 @ZoliSzabó:因为,这是一种销售应用程序,并且有一个表调用产品,不同位置会有所不同。你知道如何同步这些表吗?
  • 您可以使用 Phinx 迁移或 SQLyog Ultimate Schema Synchronization Tool。

标签: mysql laravel


【解决方案1】:

一种可能的解决方案是使用MySQL triggers

这里是关于如何使用触发器将新值插入第二个表的简短教程:https://www.tutorialspoint.com/mysql-trigger-to-insert-row-into-another-table

编辑:包含在上述链接的完整教程下方,以防它从原始来源中消失。

让我们首先创建一个表。 CREATE 命令用于创建表。

mysql> create table Table1
   -> (
   -> id int,
   -> name varchar(100)
   -> );
Query OK, 0 rows affected (0.62 sec)

现在让我们创建另一个表。

mysql> create table Table2
   -> (
   -> id int,
   -> name varchar(100)
   -> );
Query OK, 0 rows affected (0.49 sec)

现在,以下是创建触发器的方法。

mysql> delimiter #
mysql> create trigger Table1Trigger after insert on Table1
   -> for each row
   -> begin
   ->  insert into Table2(id, name) values (new.id, new.name);
   -> end#
Query OK, 0 rows affected (0.29 sec)

mysql> delimiter ;

要创建触发器,我们需要更改分隔符。

将行插入 Table1 会激活触发器并将记录插入 Table2。在Table1中插入记录。

mysql> insert into Table1 values(1,'John'),(2,'Smith'),(3,'Carol');
Query OK, 3 rows affected (0.28 sec)
Records: 3  Duplicates: 0  Warnings: 0

检查记录是否插入两个表中。

mysql> select *from Table1;

这是显示在 Table1 中成功插入记录的输出。

+------+-------+
| id   | name  |
+------+-------+
|    1 | John  |
|    2 | Smith |
|    3 | Carol |
+------+-------+
3 rows in set (0.00 sec)

检查第二张桌子。

mysql>  select *from Table2;

以下是表2中成功插入记录的输出。

+------+-------+
| id   | name  |
+------+-------+
|    1 | John  |
|    2 | Smith |
|    3 | Carol |
+------+-------+
3 rows in set (0.00 sec)

【讨论】:

  • 谢谢...但在我的情况下,触发器应该将 table1 的内容插入到同一服务器内另一个数据库中的表中。,.. 我们怎样才能做到这一点??
  • 在一台数据库服务器中,可以通过点引用不同的数据库:database1.table & database2.table
  • 你是个摇滚明星!可能这对你来说很容易......但这对我和我的团队有巨大的帮助。非常感谢楼主!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-27
相关资源
最近更新 更多