gpt4 book ai didi

mysql - 如何在 INSERT INTO 查询中同步数据库

转载 作者:行者123 更新时间:2023-11-29 02:17:42 24 4
gpt4 key购买 nike

这是我的查询。

INSERT INTO compare_moodle 
(userid,
username,
firstname,
lastname,
courseid,
coursename)
SELECT mdl_user.id,
mdl_user.username,
mdl_user.firstname,
mdl_user.lastname,
mdl_course.id,
mdl_course.fullname
FROM mdl_user
JOIN mdl_role_assignments ra
ON mdl_user.id = ra.userid
JOIN mdl_role r
ON ra.roleid = r.id
AND r.id = 5
JOIN mdl_context c
ON ra.contextid = c.id
JOIN mdl_course
ON mdl_course.id = c.instanceid

mdl_user 或另一个数据库发生变化(删除/更新/插入)时,compare_moodle 如何同步?我想使用触发器,但不知道如何使用。

最佳答案

可以使用 VIEW代替您提出的目的的 table 。你会这样做:

CREATE OR REPLACE VIEW compare_moodle AS
SELECT mdl_user.id AS userid,
mdl_user.username,
mdl_user.firstname,
mdl_user.lastname,
mdl_course.id AS courseid,
mdl_course.fullname AS coursename
FROM mdl_user
JOIN mdl_role_assignments ra ON mdl_user.id = ra.userid
JOIN mdl_role r ON ra.roleid = r.id
AND r.id = 5
JOIN mdl_context c ON ra.contextid = c.id
JOIN mdl_course ON mdl_course.id = c.instanceid;

这为您提供了一个虚拟表,该表始终在事务上与您的源表保持同步。 SQL 最佳实践告诉我们,这种没有数据冗余的方法是做你想做的事情的最好方法。

当然,问题在于性能。如果您经常使用此 compare_moodle View ,您的速度可能会变慢。对表进行正确的索引实际上可以消除这些减速。我建议您让您的应用程序使用 View ,然后弄清楚您是否有性能问题。

您在问题中要求的是所谓的 materialized view -- 由实际表表示的 View 。在某些品牌和型号的 DBMS 中,您可以发出类似 CREATE OR REPLACE MATERIALIZED VIEW ... 的命令,DBMS 会完成所有工作。但是,MySQL 不提供。

有多种 MySQLish 方法来管理物化 View 。浏览此处获取更多信息。 https://dba.stackexchange.com/questions/86790/best-way-to-create-a-materialized-view-in-mysql但是这种方式相对于使用普通的 View 来说是一个很大的麻烦,维护起来也很头疼。

关于mysql - 如何在 INSERT INTO 查询中同步数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36966059/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com