Есть ли способ однозначно идентифицировать столбец через jdbc? Я не имею в виду через столбец таблицы схемы

#java #mysql #database #jdbc #internals

#java #mysql #База данных #jdbc #внутренности

Вопрос:

Я пытаюсь отслеживать изменения, внесенные в базу данных (схему), с помощью приложения Java. Мы пытаемся отслеживать изменения для каждого столбца / уникального ограничения / индекса и таблицы.

Функционально я знаю, что table.column уникален. Итак, если изменяется тип данных столбца, мы знаем, какой столбец найти и записать изменение. Но что, если имя изменится? Если результирующий набор JDBC упорядочен (он запрашивает индекс), тогда я могу полагаться на порядок, чтобы каждый раз давать мне один и тот же столбец, даже если имя меняется. Будут ли здесь какие-либо сюрпризы, поскольку это результат «set»?

Однако я узнал, что мы также можем изменить порядок столбцов. Нет ли какого-либо уникального идентификатора, связанного со столбцами, чтобы их можно было подобрать на этой основе? В основном я бы не хотел использовать маршрут information_schema, но, хотя я проверил там mysql, ничего полезного не нашел.

Комментарии:

1. В JDBC такого нет. Если такая вещь существует (в чем я сомневаюсь), вам нужно будет погрузиться в метаданные, специфичные для системы базы данных.

2. Можно утверждать, что простое изменение порядка столбцов не является значимым изменением схемы, если код, который взаимодействует с базой данных, неявно полагается на ORDINAL_POSITION столбцов, делая что-то глупое, например INSERT INTO table_name VALUES ( ... ) .

3. @GordThompson, вот почему упоминается намерение зафиксировать изменения. Если допустим, столбцы a, b, c, d меняются на w, x, c, d, а затем на x, w, c, d.. Я сравню a, b, c, d с x, w, c, d и, возможно, в конечном итоге изменю a на x. Я полагаю, что нет никакого способа обойти это, кроме как каким-то образом захватить каждый DDL.

4. @ChinmayJoshi — Я думаю, вы можете быть правы, по крайней мере, для MySQL. Microsoft SQL Server поддерживает триггеры DDL, которые могут отслеживать изменения столбцов по мере их возникновения, но MySQL, по-видимому, не поддерживает триггеры DDL.

5. Пока мы будем игнорировать изменения порядка. Спасибо.