Как внести изменения в «живую базу данных»?

Я уже создал таблицу Vehicle_Unit

 CREATE TABLE vehicle_unit (
 garage_code NUMERIC(2) NOT NULL,
 vunit_id  NUMERIC(6) NOT NULL,
 vunit_purchase_price NUMERIC(7,2),
 vunit_exhibition_flag CHAR(1) NOT NULL,
 vehicle_insurance_id VARCHAR(20) NOT NULL,
 vunit_rego VARCHAR(8) NOT NULL
);

И вставил в них некоторые значения:

INSERT INTO vehicle_unit(vunit_purchase_price,vunit_exhibition_flag,vehicle_insurance_id,vunit_rego,vunit_id, garage_code)
SELECT 50000.00, 'R', 'sports-ute-449-12b', 'RD3161',garage_count_vehicles, garage_code
FROM garage
WHERE garage_email='[email protected]';

Если я хочу добавить столбец NON NULL с именем condition_flag, как мне изменить эту действующую базу данных? Могу ли я использовать таблицу изменений? Но как мне вставить это новое значение?

Обновлено: я попробовал «Изменить таблицу», но получил сообщение об ошибке, в котором говорится, что таблица должна быть пустой, чтобы добавить обязательный (НЕ NULL) столбец.

Вы просто используете оператор ALTERтак. Затем вы можете использовать оператор UPDATE, чтобы обновить существующие записи значениями для этого нового столбца, а также изменить существующий оператор INSERT для новых строк, чтобы они имели значения с этим новым столбцом.

JNevill 30.05.2019 16:03

Я пробовал изменить таблицу, но у меня есть таблица, которая должна быть пустой, чтобы добавить обязательный (НЕ NULL) столбец. И я действительно не думаю, что мне следует отбросить всю таблицу и воссоздать ее?

Sook Lim 30.05.2019 16:13

Хороший способ обойти это, чтобы дать столбцу значение по умолчанию, чтобы он не был пустым при изменении. Нравится alter table yourtable add yournewcol int default 1 not null; Затем на своем UPDATE вы можете установить это значение на все, что вам нравится в ваших существующих записях. В качестве альтернативы вы можете добавить без ограничения NOT NULL, запустить UPDATE, чтобы установить значение, а затем еще раз ALTER, чтобы добавить ограничение.

JNevill 30.05.2019 16:16

Кстати, вы не должны использовать CHAR. Используйте стандартный тип строки, то есть VARCHAR2.

William Robertson 31.05.2019 00:03
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Перед оператором ALTER ... NOT NULL обновите все существующие записи, чтобы они имели значение (если они уже не имеют значения). Затем введите свой ALTER ... NOT NULL или, как уже рекомендовал JNevil, также добавьте предложение DEFAULT (это избавит вас от изменения кода, который может не предоставлять значения во время INSERTs).

Другие вопросы по теме