我有一个主 MySQL 数据库,其中一个 car 表中包含以下列:
+---------------+-----------------+------+
|carId |name |model |
+---------------+-----------------+------+
|1 |ford |focus |
|2 |Toyota |Yaris |
+---------------+-----------------+------+
以下是我想要实现的目标:
我想在其他 msql 服务器中创建新的数据库,并希望创建与上面相同的表,并希望在新的 car 表中添加以下列
+---------------+-----------------+------------+-----------+------------+
|carId |name |model |make |workHistory |
+---------------+-----------------+------------+-----------+------------+
|1 |ford |focus |2001 |yes |
|2 |Toyota |Yaris |2002 |no |
+---------------+-----------------+------------+-----------+------------+
- 我希望新数据库表从主 SQL 数据库 car 表中获取
carId
、name
和model
列的数据。并且只想自己在新数据库 car 表中插入列 (make
、workHistory
) 的数据。因此,这个新 car 表将结合主 MySQL 数据库和新数据库的数据。 - 如果主数据库汽车表有任何变化,我希望这些变化与新数据库中的汽车表同步。例如,如果我们删除了主数据库汽车表中的 ID,它也应该从新汽车表中删除。
答案1
这与复制无关 - 只需使用附加表:
CREATE TABLE car_more (
carId INT NOT NULL,
make INT,
workHistory
PRIMARY KEY (carId)
);
如果您引用的数据库(您指的是数据库还是表?)位于 mysql 的单独实例上,则使用联合引擎提供对现有表的远程访问。然后,您可以使用...访问数据。
SELECT a.carId, a.name, a.model, b.make, b.workHistory
FROM car a
LEFT JOIN car_more b
ON (a.carId=b.carId);
如果它们在同一个 mysq 实例上,那么只需在表名前加上数据库名称作为前缀:
SELECT a.carId, a.name, a.model, b.make, b.workHistory
FROM maindb.car a
LEFT JOIN alternatedb.car_more b
ON (a.carId=b.carId);
(您可以使用 mysql amster-master 复制来维护汽车表的本地副本 - 但这要复杂得多)
答案2
首先,数据库设计。 为什么您只想要从属数据库中的make
和workHistory
列吗?在我看来,它们是相关的,并且与其他列中的数据是一一对应的关系。从逻辑上讲,数据应该放在一起...为什么要分开呢?
在数据库管理方面,拥有所有被复制数据的一份规范副本会更容易。
第二,你打算写作到第二个数据库还是只从中读取?只读更易于管理。
假设您想要一个只读的从属服务器,请按正常方式设置复制并确保从属服务器上的权限仅允许SELECT
。
如果您不想在主表中添加额外的列,请使用 创建第二个表carId
,model
然后workHistory
创建一个看法让他们加入到carId
。
如果您想要写入从服务器,则需要多主复制或类似的东西。这更复杂。如果您想要的话,我会添加更多内容。