我有一个租赁网络应用程序(每个租户都有自己的数据库)。我试图将其转移到多租户架构,但在此之前,我正在尝试识别冲突。
目前,我正在尝试找出许多不同租户之间可能重复的用户名。
到目前为止,我的解决方案是编写一个类似这样的查询:
SELECT `user`, count(*) FROM (
(SELECT * FROM `100001`.`user`) UNION
(SELECT * FROM `100002`. `user`) UNION
(SELECT * FROM `100003`. `user`) UNION
(SELECT * FROM `100004`. `user`) UNION
(SELECT * FROM `100005`. `user`) UNION
...
) as `all_users`
GROUP BY `user`
这很好用,但是当你意识到已经有超过100个数据库时,它不能很好地扩展。
我开始考虑使用CONCAT来帮助我生成查询,但却陷入了困境:
SELECT CONCAT('(SELECT * FROM `', SCHEMA_NAME, '`.`user`)')
FROM `information_schema`.`SCHEMATA` WHERE `SCHEMA_NAME` REGEXP '[0-9]{6}';
有关从哪里开始的任何想法?