繁体   English   中英

同步来自不同结构的两个不同数据库的两个表 MySql

[英]Sync two tables from two different databases with different structure MySql

我有两个 php 应用程序处理相同的产品,一个是购物,另一个是销售点,但每个都使用自己的数据库。

由于它们都在处理相同的产品,我想通过在 2 个数据库中同步产品表来缩短输入产品数据的时间,因此当我在商店中添加新产品时,它会显示在 POS 中。

我搜索了很多,但所有结果都在谈论相同的表结构。

不幸的是,在我的情况下,结构不同。

店铺产品表是这样的:

id    name    current_stock  category_id   brand_id

POS产品表是这样的:

id   name    code    category_id   brand_id

另一个问题是 pos db 中的代码列应该包含一个唯一的数字,我使用这个命令来生成它:

`code` =  FLOOR(1000 + RAND() * 89999999)

我需要在同步过程中生成它。

我看到这篇文章和许多其他帖子如何在 Mysql 中仅将不同的值从一个表复制到另一个表? 这是关于相同的表

编辑:起初我会添加所有产品,但之后我只需要添加新产品。 这就是我所说的同步

我假设这两个表都在同一个 mysql 服务器内,并且您的 mysql 用户帐户具有访问两者的正确权限。

INSERT INTO database_pos.pos_product 
        SELECT id, name, 
               FLOOR(1000 + RAND() * 89999999) as code,
                 category_id, brand_id FROM database_shop.shop_product;

我不建议FLOOR(1000 + RAND() * 89999999)生成唯一密钥。

该语句将查询 shop 产品表中的所有数据,然后将其插入到 POS 产品表中。 根据您的架构更改表和数据库名称。

但正如@stickybit 所建议的那样。 如果可能的话,我还建议您将两个表移动到同一个数据库中。

此外,您可以实现一个触发器来自动执行此操作。

编辑:添加尚未在表中的记录。 您只需要 select 商店产品表中的那些记录。

使用子查询获取设置差异,

INSERT INTO database_pos.pos_product 
    SELECT id, name, 
           FLOOR(1000 + RAND() * 89999999) as code,
           category_id, brand_id FROM database_shop.shop_product sp
        WHERE sp.id NOT IN (SELECT id FROM database_pos.pos_product);

使用外连接来获得设置差异,

INSERT INTO database_pos.pos_product 
    SELECT sp.id, sp.name, 
           FLOOR(1000 + RAND() * 89999999) as code,
           sp.category_id, sp.brand_id FROM database_shop.shop_product sp
    LEFT JOIN database_pos.pos_product pp ON pp.id = sp.id
           WHERE pp.id IS NULL;

子查询与联接

Mysql 触发器教程

Mysql 触发器官方文档

谢谢 !

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM