Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Первичный ключ - почему можно менять значения  [new]
staticc
Member

Откуда:
Сообщений: 1
Только начял изучать sql, во многих статях и в книге (sql за 10мин) про первичный ключ есть одно упоминание, которое я немогу понять: Значения в столбце первичного ключа не могут быть
изменены.

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

Так как понять это правило ? (Значения в столбце первичного ключа не могут быть
изменены.)
30 ноя 09, 10:55    [7995197]     Ответить | Цитировать Сообщить модератору
 Re: Первичный ключ - почему можно менять значения  [new]
Glory
Member

Откуда:
Сообщений: 104760
staticc
Только начял изучать sql, во многих статях и в книге (sql за 10мин) про первичный ключ есть одно упоминание, которое я немогу понять: Значения в столбце первичного ключа не могут быть
изменены.

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

Так как понять это правило ? (Значения в столбце первичного ключа не могут быть
изменены.)

Это надо читать как, первичный ключ НЕ ДОЛЖЕН изменяться после назначения.
А не как, что первичный ключ невозможно изменить
30 ноя 09, 10:58    [7995230]     Ответить | Цитировать Сообщить модератору
 Re: Первичный ключ - почему можно менять значения  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Если есть FOREIGN KEY, который ссылается на PRIMARY KEY,
и который объявлен как ON UPDATE NO ACTION (это действует по умолчанию),
то на самом деле изменить значение PK не получится.

Но об этом надо читать в книжке "SQL за 11 минут"
30 ноя 09, 11:08    [7995295]     Ответить | Цитировать Сообщить модератору
 Re: Первичный ключ - почему можно менять значения  [new]
Константин Цветков
Member

Откуда: Москва
Сообщений: 1735
Можно добавить: первичный ключ можно изменить, если настроено каскадное обновление и этот ключ не счётчик.
30 ноя 09, 11:09    [7995301]     Ответить | Цитировать Сообщить модератору
 Re: Первичный ключ - почему можно менять значения  [new]
DeColo®es
Member

Откуда: Москва
Сообщений: 5499
Блог
Я бы "уточнил" эту фразу так:
Первичный ключ должен выбираться таким образом, чтобы не возникало необходимости изменения значений ключа.
30 ноя 09, 13:11    [7996232]     Ответить | Цитировать Сообщить модератору
 Re: Первичный ключ - почему можно менять значения  [new]
h0kum
Member

Откуда:
Сообщений: 35
Подниму темку...
А как быть в такой ситуации? Есть таблица (образно):
CREATE TABLE HUMANS (
   ID        BIGINT NOT NULL,
   NAME      VARCHAR(50) NOT NULL,
   ADDRESS   VARCHAR(20),
);

ALTER TABLE HUMANS ADD CONSTRAINT PK_HUMANS PRIMARY KEY (ID);
ID есть некий каталожно-справочный номер, и по разным причинам (логика работы такая) этот номер может изменяться.
Как быть? Update or insert просто добавляет такую же запись с новым значением ID.
23 дек 09, 13:48    [8107201]     Ответить | Цитировать Сообщить модератору
 Re: Первичный ключ - почему можно менять значения  [new]
h0kum
Member

Откуда:
Сообщений: 35
UPD: забыл уточнить, сервер БД - Firebird 2.1
23 дек 09, 13:50    [8107217]     Ответить | Цитировать Сообщить модератору
 Re: Первичный ключ - почему можно менять значения  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
h0kum
UPD: забыл уточнить, сервер БД - Firebird 2.1
А причем тут Microsoft SQL Server ?
23 дек 09, 13:53    [8107230]     Ответить | Цитировать Сообщить модератору
 Re: Первичный ключ - почему можно менять значения  [new]
h0kum
Member

Откуда:
Сообщений: 35
Паганель,

Притом что это тоже СУБД :) шутка.
Перелопачивая инет на предмет вопроса, наткнулся на похожую тему, отписал, потом только увидел ветку.
23 дек 09, 13:58    [8107268]     Ответить | Цитировать Сообщить модератору
 Re: Первичный ключ - почему можно менять значения  [new]
залётный
Guest
h0kum
Подниму темку...
А как быть в такой ситуации? Есть таблица (образно):
CREATE TABLE HUMANS (
   ID        BIGINT NOT NULL,
   NAME      VARCHAR(50) NOT NULL,
   ADDRESS   VARCHAR(20),
);
ALTER TABLE HUMANS ADD CONSTRAINT PK_HUMANS PRIMARY KEY (ID);
ID есть некий каталожно-справочный номер, и по разным причинам (логика работы такая) этот номер может изменяться.
Как быть?


а быть тут очень просто:
CREATE TABLE HUMANS (
   ID        BIGINT identyty(1,1) NOT NULL,
   [КаталожноСправочныйНомерКоторыйМожетИзменяться] BIGINT NOT NULL,
   NAME      VARCHAR(50) NOT NULL,
   ADDRESS   VARCHAR(20),
);

ALTER TABLE HUMANS ADD CONSTRAINT PK_HUMANS PRIMARY KEY (ID);
и меняйте каталожный номер сколько угодно, при этом никакие ссылки на эту строку не похерятся.
23 дек 09, 14:12    [8107393]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить