Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL-触发器还是复制更好?_Mysql_Triggers_Replication - Fatal编程技术网

MySQL-触发器还是复制更好?

MySQL-触发器还是复制更好?,mysql,triggers,replication,Mysql,Triggers,Replication,我想将某个表从一个数据库复制到同一服务器中的另一个数据库中。这些表包含完全相同的字段 我曾考虑使用MySQL复制来复制该表,但有人说这会增加IO,所以我找到了另一种方法来创建3个触发器Insert、update和Delete,它们的性能与我预期的完全相同 我的问题是,哪种方式更好?是使用MySQL复制更好,即使它在同一台服务器上,还是使用触发器复制数据更好 谢谢。当然,这是最好的选择。拥有另一个服务器从服务器需要为安装、日志、cpu和内存使用留出几MB空间 我会使用触发器使两个表保持相等。如果要

我想将某个表从一个数据库复制到同一服务器中的另一个数据库中。这些表包含完全相同的字段

我曾考虑使用MySQL复制来复制该表,但有人说这会增加IO,所以我找到了另一种方法来创建3个触发器Insert、update和Delete,它们的性能与我预期的完全相同

我的问题是,哪种方式更好?是使用MySQL复制更好,即使它在同一台服务器上,还是使用触发器复制数据更好


谢谢。

当然,这是最好的选择。拥有另一个服务器从服务器需要为安装、日志、cpu和内存使用留出几MB空间

我会使用触发器使两个表保持相等。如果要创建具有相同列定义和数据的表,请使用:

USE db2;
CREATE TABLE t1 AS SELECT * FROM db1.t1;
之后,继续创建Update、Insert和Delete statemetns的触发器


此外,您还可以将新表更改为不同的引擎(如内存)或添加索引,以查看是否可以改进某些功能。

假设在同一台服务器上有两个数据库,即DB1和DB2,并且该表名为tbl1,它位于DB1中,您可以按如下方式查询该表:

USE DB1;
SELECT * FROM tbl1;

USE DB2;
SELECT * FROM DB1.tbl1;

这样,您就不需要复制数据,也不用担心额外的空间和代码。您可以在同一服务器上的另一个数据库中查询表。复制和触发器不是您的答案。您还可以创建一个视图来封装SQL语句。

我不知道您的目标是什么,但我的目标是使用视图功能

SELECT * FROM DB2.app1_customers;
我有两个不同的应用程序,它们有不同的数据库,但在同一个Mysql服务器中。Application2需要从Application1获取一些数据。一般来说,这是一个可以使用DB1处理的简单情况;或者使用DB2;根据您的需要,但是我的编程框架不能很好地与多个DBs配合使用

所以,让我们看看我的解决方案

以下是检索此数据的select查询:

SELECT id, name FROM DB1.customers;
因此,使用DB2作为默认模式,我创建了一个视图:

USE DB2;
CREATE VIEW app1_customers AS SELECT id, name FROM DB1.customers;
现在,我可以在DB2中通过常规SELECT语句以常规表的形式检索这些数据

SELECT * FROM DB2.app1_customers;

希望它有用。BR

为什么需要两个数据完全相同的表?您可以从另一个视图创建一个虚拟表视图。很抱歉回复太长。。您的建议对解决我的问题非常有帮助,目前我在DB2中创建了一个视图,该视图将从DB1.table获取数据。我以前担心的是,如果将来客户端希望将数据库的一部分移动到另一台服务器上,那么它将无法工作。但是谢谢,我现在可以使用这个方法。@wm90如果在另一台服务器上使用复制,请不要使用触发器。