Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > СУБД, общие вопросы > Модификация таблиц


Автор: Berliner 17.3.2006, 12:11
Здраствуйте ! Хочу модифицировать таблицу следующим образом

Код

alter table publishers 
modify
pub_name char(20) null  PRIMARY KEY (pub_name)

Я так понимаю - не может модифицировать таблицу так как pub_name
null и Primary Key несовместимы

А поставивив pub_name char(20) not null PRIMARY KEY (pub_name) несовместимы при модификации таблицы должно позвалять ставить null

Как модифицировать таблицу чтобы pub_name сделать как primary key, подскажите плиз

Автор: LSD 17.3.2006, 12:24
Первичный ключ это уникальный идентификатор записи в таблице, соответсвенно null он быть не может никак. Поэтому надо менять логику. Зачем тебе понадобилось делать первичный ключ null?

Скорее всего тебе надо вместо естественного первичного ключа, использовате синтетический.

Автор: Berliner 17.3.2006, 13:27
Цитата

Я так понимаю - не может модифицировать таблицу так как pub_name
null и Primary Key несовместимы

Да я знаю.
Код

alter table publishers 
modify
pub_name char(20)  not null  PRIMARY KEY (pub_name)

Дело в том что так тоже не работает
Можно разве что удалить столбец и заново создать столбец с правильной структурой. Так ведь нормально?

Код

alter table publishers
delete pub_name
GO
alter table publishers 
add
pub_name char(20)  not null  PRIMARY KEY (pub_name)

Автор: Darhazer 17.3.2006, 13:39
БД у тебя какая? В MySQL помойму надо так:
Код

alter table publishers
change `pub_name` `pub_name` char(20)  not null

А еще если добавляеш KEY:
Код

alter table publishers ADD PRIMARY KEY (pub_name)

alter table publishers
alter table pub_name ADD INDEX (pub_name)

Автор: chief39 17.3.2006, 15:02
Если надо модифицировать столбец(растянуть varchar, etc.), то следует:
- создать новый временный столбец(аналогичный имеющемуся)
- скопировать в него данные из нашего апдэйтом
- уничтожить наш
- создать наш с новыми характеристиками
- скопировать в него данные из временного апдэйтом
- дропнуть временный

Если на нём висит примари ки - в самом начале дропнуть примари ки
и в самом конце создать его заново
Но только без наллов smile

ЗЫ: Это стандарно. Может в некоторых СУБД можно изменять столбец не пересоздавая и не храня данные во временном

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)