【发布时间】:2016-11-21 20:44:34
【问题描述】:
上下文:
我有一个程序将源数据库表垂直分成两个分区:
来源:
id | col1 | col2
1 | v1_1 | v1_2
2 | v2_1 | v2_2
分区 #1:
id | col1
1 | v1_1
2 | v2_1
分区 #2:
id | col2
1 | v1_2
2 | v2_2
对于客户/用户来说,他应该总是看起来只有一张桌子。当他选择所有数据时,应用程序会将分区合并到一张表中。
架构:
Client <--> Server <--> Databases (MySQL)
客户端向服务器发送参数。服务器在 DBMS 上创建并执行 MySQL 查询并返回结果(取决于操作/查询)。
更新操作的问题:
客户端向 HTTP Server 发送更新数据的请求:
HTTP1.1 | PUT
body: {
db:'Partition_1',
table: 'test_table',
data: [
{id:1, col1:'w1_1', col2:'w1_2'}
]
}
服务器创建以下语句:
UPDATE 'Partition_1'.'test_table' SET col1='w1_1' AND col2='w1_2';
这将导致错误#1054,因为第一个分区不知道列 'col2'! (而第二个分区不知道'col1')
我不想在请求中添加参数。 有没有办法忽略错误并只设置现有列?
(-> 这应该会更新第一个分区。将为第二个分区发送类似的请求。)
【问题讨论】:
-
如果客户端知道要更新哪个分区,为什么不知道该分区中有哪些列?
-
AFAIK 无法让它忽略不存在的列。您可以使用
INFORMATION_SCHEMA.COLUMNS查找特定服务器上表中的列,并通过这种方式过滤掉未知列。 -
@Barmar 是的,客户端知道每个分区的列,但是我必须向客户端添加“分区逻辑”,我希望服务器能够做到这一点。带有
INFORMATION_SCHEMA.COLUMNS的服务器端选项也可以,但我不知道还有多少代码。你能具体说明你的第二条评论吗?也许有一些伪代码,所以我可以看到附加代码并选择一个选项(客户端或服务器端)?!顺便说一句:我在服务器上使用 JavaScript/NodeJS 和 Express。