Изменить автоинкрементный столбец на глобальный автоинкрементный столбец - PullRequest
0 голосов
/ 08 декабря 2010

Наша компания использует Sybase, и мы планируем установить систему Mobilink (систему репликации данных). Поэтому нам нужно перейти от использования автоинкрементных столбцов к глобальным автоинкрементным столбцам.

Мой вопрос: какие шаги мне нужно предпринять, чтобы это работало правильно? Уже есть тысячи строк данных, которые используют стандартный автоинкремент по умолчанию.

Я думаю, мне нужно создать новый столбец с глобальным автоинкрементом по умолчанию, заполнить его данными (число (*)), переключить на него PK, удалить старый FK, удалить старый столбец, переименовать новый столбец к старому, затем повторно примените FK.

Есть ли более простой способ сделать то, что мне нужно здесь?

спасибо!

Ответы [ 2 ]

1 голос
/ 07 декабря 2011

вы просто меняете способ генерирования значений PK, поэтому достаточно:

ALTER TABLE <table>
  modify <column> default global autoincrement (1000000); 

для использования размера раздела 1000,0000

Также убедитесь, что вы установили глобальный идентификатор базы данных в каждой базе данных, например:

SET OPTION PUBLIC.global_database_id = 10;

Таким образом, следующий PK, который будет сгенерирован, это 10,000,001

1 голос
/ 13 декабря 2010

Обычно это так. Но есть некоторые конкретные заявления, которые вы делаете, которые вызывают у меня беспокойство. Также последовательность. Я не уверен в вашем уровне опыта, используемые вами термины могут быть точными или неточными.

Для каждой таблицы ...

... переключить ПК на него

А как насчет значений FK в дочерних таблицах? Или вы имеете в виду, что вы их тоже поменяете?

... бросить старые ФК

Хорошо, это ограничение.

... удалить старый столбец, переименовать новый столбец в старый, а затем повторно применить FK.

Что именно вы подразумеваете под этим? Добавить ограничение FK обратно в? Это не изменит существующих данных, оно будет применяться к любым новым добавленным строкам.

Надеюсь, вы понимаете, что я имею в виду под последовательность ваших задач подозрительна . Прежде чем вы уроните old_PK_column в родительский элемент, вам необходимо:

  1. Добавьте пропущенные ограничения FK в каждую дочернюю таблицу.

  2. Для каждой дочерней таблицы: ОБНОВИТЬ все значения FK до столбца new_PK_column.

  3. Затем отбросьте столбец old_PK_.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...