这是我的问题。
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?我想用扳机但不知道怎么用。
发布于 2016-05-01 12:23:46
可以使用VIEW来代替表,以达到您当前的目的。你会这样做的:
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视图,则可能会出现减速。对表进行正确的索引实际上可以消除这些减速。我建议您让您的应用程序使用一个视图,然后找出您是否有性能问题。
您在问题中所要求的是一个所谓的http://www.fromdual.com/mysql-materialized-views --一个由实际表表示的视图。在一些数据库管理系统的创建和模型中,您可以给出类似于CREATE OR REPLACE MATERIALIZED VIEW ...这样的命令,而DBMS完成了所有的工作。但是,MySQL并没有提供这样的服务。
有各种管理物化视图的MySQLish方法。有关更多信息,请看这里。但是,与使用普通视图相比,这种方法是一个大麻烦,也是一个维护上的麻烦。
https://stackoverflow.com/questions/36966059
复制相似问题