Kontext:MySQL: Игнорировать ошибку (# 1054) и только SET существующих столбцов
У меня есть программка, которая расщепляет таблицу базы данных источника по вертикали на два раздела:
Источник:
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)
Клиент посылает параметры сервера. Сервер создает и выполняет запрос MySQL в СУБД и возвращает результат (в зависимости от операции/запроса).
Проблема на операции обновления:
Клиент отправляет запрос на сервер HTTP с обновленным данным:
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»)
Я не хочу добавлять параметры в запрос. Есть ли способ игнорировать ошибку и просто установить существующие столбцы?
(-> Это должно обновить первый раздел Аналогичный запрос будет отправлен на второй раздел.).
Если клиент знает, какой раздел необходимо обновить, почему он не знает, какие столбцы находятся в этом разделе? – Barmar
AFAIK нет способа заставить его игнорировать столбцы, которые не существуют. Вы можете использовать 'INFORMATION_SCHEMA.COLUMNS', чтобы узнать столбцы в таблице на определенном сервере и отфильтровать неизвестные столбцы таким образом. – Barmar
@Barmar Да, клиент знает столбцы каждого раздела, но затем мне нужно добавить логику раздела к клиенту, и я хотел, чтобы сервер сделал это. Вариант на стороне сервера с 'INFORMATION_SCHEMA.COLUMNS' тоже будет работать, но я не знаю, сколько еще кода он будет. Можете ли вы указать свой второй комментарий? Может быть, с некоторым псевдокодом, поэтому я могу увидеть дополнительный код и выбрать один вариант (на стороне клиента или на стороне сервера) ?! BTW: Я использую JavaScript/NodeJS и Express для сервера. – marcel