Как добавить новый столбец в таблицу в качестве первичного ключа? - PullRequest
0 голосов
/ 22 мая 2019

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

ALTER TABLE table_name ADD ( column_name VARCHAR (10));
ALTER TABLE table_name  ALTER COLUMN column_name SET DEFAULT 'value1';
ALTER TABLE table_name ADD PRIMARY KEY(column_name);
>> ERROR 1138 (22004): Invalid use of NULL value

Я видел пару сообщений, но он требует удалить все существующие в таблице данные, которые я не хочу.Есть ли другой способ добавить новый столбец в качестве первичного ключа без удаления данных в таблице?

Моя текущая таблица:

Current table

Мой новыйтаблицу, которую я хочу создать:

new table

Спасибо

Ответы [ 3 ]

1 голос
/ 22 мая 2019

Это дает ОШИБКУ, поскольку всякий раз, когда вы добавляете новый столбец в таблицу, в которой уже есть 1 или более строк, новый столбец будет получать значения NULL во всех своих кортежах, что противоречит правилу, в котором говорится, что ПЕРВИЧНЫЙ КЛЮЧ НЕ МОЖЕТ СОДЕРЖАТЬ NULL.

Кроме того, если вы укажете значение DEFAULT, повторные записи в первичном ключе также не допускаются!

Так что, просто добавив новый столбец в непустую таблицу, указав значение по умолчанию и объявив его первичным ключом, не получится.

Теперь пришло AUTO_INCREMENT, чтобы спасти, добавить столбец, увеличив его и объявив его первичным ключом:

ALTER TABLE table_name ADD COLUMN new_column INT AUTO_INCREMENT PRIMARY КЛЮЧ;

Теперь все работает нормально ...

Спасибо, что спросили.

0 голосов
/ 22 мая 2019

Ваш столбец может иметь нулевые значения. Если ваша таблица не имеет первичного ключа и хотела бы добавить новый столбец и сделать его первичным ключом, используйте приведенный ниже запрос и используйте автоинкремент, чтобы он был уникальным

ALTER TABLE old_table ADD pk_column INT AUTO_INCREMENT PRIMARY KEY;

0 голосов
/ 22 мая 2019

Ваш столбец может содержать значения Null, а также попытаться сначала удалить ограничение первичного ключа, если оно есть.

Попробуйте этот DDL:

ALTER TABLE table_name ADD ( column_name VARCHAR (10) SET DEFAULT 'value1');
ALTER TABLE table_name ADD PRIMARY KEY(column_name);
...