根据我的托管计划,我对数据库有大小限制,但我没有数据库限制。 为了解决这个问题,我想到了按国家划分我的数据库,每个数据库都有相同的结构。 问题是如何在所有这些数据库中查找数据。 例如,每个数据库都可以有一个users表。 问题是如何在所有这些数据库中查找用户(例如)。 (可以是250个数据库)
/*This would be for one database*/
SELECT user_name FROM DB1.users WHERE user_name = 'my_user_name' LIMIT 1;
有没有办法搜索“my_user_name'来自所有数据库? (用户只是一个例子......搜索的价值可以是产品,城市,坐标等)
答案 0 :(得分:1)
您需要打开与每个数据库的单独连接并重新执行每个数据库的查询,然后在您自己的代码中将数据组合在一起 - 这将是混乱的,您将遇到与主键冲突的问题,除非您使用数据库名称限定符为它们添加前缀。
您还没有说过您正在使用的语言,但在伪代码中它会是这样的:
let connectionStrings: String[] {
"server=dbServer,database=asia",
"server=dbServer,database=europe",
"server=dbServer,database=northAmerica"
}
let users = new List<User>()
foreach(connectionString in connectionStrings) {
let connection = new DBConnection( connectionString )
let reader = connection.executeQuery( "SELECT * FROM Users" )
while( reader.read() ) {
let user = new User() {
userId = connection.databaseName + reader.get("userId"),
userName = reader.get("userName"),
// etc
}
users.add( user );
}
}
return users;
对您要执行的所有查询重复此操作。
这是一个坏主意 - 数据库很便宜,大多数共享主机提供商甚至在5美元/月的计划中也提供千兆字节大小的数据库。
答案 1 :(得分:1)
只要它们位于同一服务器上,您就可以使用内部联接命令:
SELECT a.userID, b.usersFirstName, b.usersLastName FROM databaseA.dbo.TableA a inner join database B.dbo.TableB b ON a.userID=b.userID