Я рассматриваю возможность создания базы данных MySQL для некритического критического проекта. Я думал о сценарии, когда, если мне пришлось вставить еще один столбец в таблицу, как я могу достичь этого, не ставя под угрозу целостность данных уже существующих столбцов, а также указать значения по умолчанию для этих дополнительных столбцов? Я бы хотел ответить как на SQL, так и на Java Persistence API (JPA).
Кроме того, я также хотел бы знать, как добавить таблицу в ячейку родительской таблицы.
Добавление столбца не должно влиять на ранее существовавшие данные, если только вы не делаете то, что связывает столбцы, такие как создание индекса с несколькими столбцами, уникальный ключ или что-то подобное. Но если между новым и старым столбцами нет таких связей, добавьте столько столбцов, сколько захотите. Сходите с ума!
Это легко:
ALTER TABLE mytable
ADD COLUMN newcolumn VARCHAR(20)
Вы можете присвоить ему значение по умолчанию, вы можете использовать предложение AFTER xyz
, чтобы добавить его после столбца "xyz" (или оставить его, чтобы просто добавить столбец в конец).
В этом нет ничего особенного, любая СУБД позволит вам добавлять (и удалять) столбцы в базу данных "на лету".
Одна вещь, которая может повлиять на ваш код, - это код, который ссылается на столбец позиции вместо столбца ключевого слова. Если вы ожидаете, что данный firstname
находится в позиции 5, вместо того, чтобы ссылаться на него с ключевым словом firstname
, вы можете добавить новый столбец в конце своей таблицы.
Как указано, вы можете просто добавить столбец в таблицу, используя синтаксис вашей РСУБД по выбору.
Если вы не хотите изменять свой код в этот момент, все, что вы можете сделать, это обеспечить разумное значение по умолчанию (значение null также может быть разумным по умолчанию). Таким образом, ваше приложение может вставлять строки без каких-либо проблем. Позднее вы можете сопоставить свой столбец и начать использовать его в своем приложении.
Справедливости ради, довольно часто выпускать обновление dbschema вместе с новой версией приложения.