Программирование баз данных MS SQL Server (1084479), страница 50
Текст из файла (страница 50)
А указанные новые функциональные возможности оператора модификации базы данных просто предо- 196 Глава 5 ставляют пользователю дополнительный способ корректировки значений параметров настройки, применяемых по умолчанию для любой конкретной базы данных. В СУБД БО[. Бегуег предусмотрена также возможность управлять реализацией некоторых изменений, которые пользователь пытается внести в свою базу данных. Для осуществления мноппс модификаций требуется, чтобы пользователь получил исключительный контроль над базой данных, а этого трудно добиться, если в системе уже зарегистрированы другие пользователи. Поэтому СУБД Быль. бегуег позволяет в корректной форме вынудить других пользователей завершить свои сеансы работы с базой данных, чтобы можно было провести намеченную модификацию базы данных.
Применяемая при этом степень принуждения может изменяться, начиная с предоставления пользователям определенного времени в секундах (значение которого устанавливает разработчик, наметивший внесение изменений в базу данных) с последующей отменой регистрации других пользователей и заканчивая немедленным завершением всех транзакций (с их автоматическим откатом). Последний вариант предусматривает довольно непредвиденное (с точки зрения пользователя) завершение транзакций, а это — весьма радикальная мера, к которой нельзя прибегать без оглядки.
Обычно на подобный шаг может пойти лишь администратор баз данных. Так или иначе, но дальнейшее обсуждение этой темы выходит за рамки настоящей книги. Оператор актив тлвьж Гораздо более часто по сравнению с базой данных возникает необходимость модифицировать компоновку таблиц. Выполняемые при этом действия могут быть очень простыми (например, добавление нового столбца) или очень сложными (например, изменение типа данных).
Вначале рассмотрим основную синтаксическую структуру оператора модификации таблицы: АЬтКН тАЕЬК Са)>ье пате ([АЬтКЕ СОЬОММ <со1 паве> ( [<запева от пех с(ата Суре>].<пех с(апа Туре> [(ргесьэ1оп [, аса1е])] вах <хв1 асьета со11есп1оп> [СОЬЬАТЕ <со11ап1оп паве>] [МОЬЬ(МОТ МОЬЬ] (((АОО(ОНОР) НОМОО1ОСОЬ] ( РЕНЯ1ЯТЕО)] (АОО <со1шпп папе> <с(апа суре> [[ОЕРАОЬТ <сопагапс ехргеээьоп>) ([10ЕМТ1Ту [(<эеес(>, <ьпагевепп>) [МОТ РОН НЕРЬ1САТ1ОМ)])] [ Р ОХ О О ЬОС О Ь ] [СОЬЬАТЕ <со11ап1оп пате>! [МОЬЬ(МОТ МОЬЬ] [<со1шпп сопаггаьпсп>] ([<со1пвп паве> АЯ <сотрипес( со1шпп ехргеааьап>] (АОО [сомятРА1мт <сопэсгатпс паве>) ([(РНХИАРУ КЕУ(ОМ1ЦОЕ] [СЬОЯТБКЕО(МОМСЬОЯТЕРБО] ((<со1шпп паве>[,...п ))] [Х1ТН Р1ЬЬРАСТОЕ = <1111таспог>] [ОМ (<111едгопр> ( ОЕРАОЬТ)] Создание и модификация таблиц 197 (РОВЕТСН КЕУ [(<со1пвп паве>[,...п))) ВЕРЕВЕНСЕБ <гегегепсео СаЬ1е> [(<геуегепсеп со1пвп>[,...п])) [Он ОЕЬЕТЕ (САЯСАРЕ)НО АСТ10Н)) [ОН ОРЬАТЕ (САЯСАОЕ(НО АСТ10Н)] [НОТ РОВ ВЕРЬ1САТ10Н) (ОЕРАОЬТ <сопзгапг ехргеззгоп> [РОВ <со1пвп пате>) )СНЕСК [НОТ РОВ ВЕРЬЬСйТ10Н] (<зеагсЬ попс(1г1опз>) [, ...и] [, ...и) ([И1ТН СНЕСК(И1ТН НОСНЕСК) ( ЕНАНЬЕ ( 015АВЬЕ ) ТВ1ССЕВ ( АЬЬ ( <Сг1ддег папе> [,...и ) ) )ОВОР ([сОН5тРА1нт) <сопзггагпг пате> (СОЬОММ <со1шпп паве>)[,...п) ((СНЕСК(НОСНЕСК) СОНЯТРА1НТ (йьь)<сопзсга1пг паве>[,...п]) )(ЕНАВЬЕ(015АВЬЕ) ТВ1ССЕВ (АЬЬ(<гг1ддег пате>[,...п)) Бигтсн [ РАВт1т10н <зопгсе рагс>с>оп пшчьег ехргеззгоп> ] ТО [ зсйева паве.
) Сагсес ГаЬ1е [ РАВТЬТ10Н <Сагчег рагг151оп ппвЬег ехргеззаоп> ] ) Очевидно, что оператор модификации таблицы не менее сложен, чем оператор создания таблицы. Поэтому начнем изучение оператора модификации таблицы с того, что снова рассмотрим характеристики таблицы Евр1оуеез базы данных йссоппс1пор ЕХЕС зр Ье1р Евр1оуеез Таблица 5Л.
Информация о структуре таблицы жвр1оуеев Со1пвп паве Туре Свзрпеео 1 епоЗЬ Ргес Ясаье Ип11аЬЬе 10 Евр1оуее10 Гггзскаве М1Е51е1п1сга1 Ьазгиаве Т>Г1е пг по по чагсьаг сьаг чагсьаг чагсьаг чагсьаг вопеу вопеу по по по уез 25 по по 25 по по по по 5а1агу Рггогза1агу Ьазска1зе Н1геэасе Тегв1пас1оппасе МапачегЕвр10 перагсвепс 19 по по 19 го по 19 вопеу зва115асеГ1ве уез по по зва110асеГ1те по уез 1пг 10 по по 25 чагсйаг по по В целях уменьшения объема представленной здесь информации полученные результаты отредактированы и показана лишь та часть, которая нас интересует, но фактически объем выводимой информации гораздо больше [табл.
5.7). 198 Глава б Предположим, что решено дополнительно предусмотреть хранение информации о предыдущем месте работы служащих (допустим, что это позволяет определить, какая компания может попытаться вернуть назад тех работников, которые проявили себя лучше всего). Для решения этой задачи достаточно ввести еще один столбец, а такая операция является довольно простой. Синтаксическая структура необходимого для этого оператора во многом напоминает структуру соответствующего оператора сведте тавье, не считая тех очевидных изменений, которые зависят от типа самого оператора: ЛЬтвк тдВЬЕ Евр1оуеея Л00 РхечьоаяЕвр1оуег чагс)1ах(30) Н0ЬЬ Очевидно, что рассматриваемое задание оказалось несложным. Безусловно, можно было бы также ввести сразу несколько новых столбцов, если бы в этом возникла необходимость. Соответствующий оператор может выглядеть примерно таким образом; ЛЬтвк тЛВЬЕ Евр1оуаея Лвв вагеОГВ1сх)з дасесьве ьаягва1яевасе с)асес1ве перлвьт '2005-01-01' МЦЬЬ, НОТ М0ЬЬ 09)шиите внимание на то, юяо в последнем случае предусмот))оно применение ключевого ело.
ва ВЕРУ)))ЬТ. Фактически испагьзование этого ключевого слова еще подРобно не )гассматйи- волось )'о нем речь пойдет в следующей главе), но авто)5 в этом приме))е хотел бы отметить особый случай. Если тфоисходит добавление спиибца с опцией нОТ 5)))ЬЬ в уже существующую таблиц)) то возникает пфоблема — что делать со оярохаии, кото)гые уже соде)зжат ЬЛЛ.Ь-значения. В данном случае покозанорегиение, состоящее в том, что предусиогпрено значение, заданное по умолчанию. Это заданное по умолчанию значение затем исполыуется для заполнения нового столбца в мес ах пе))есечения его со всеми страхами, которыеуже сущеопвуют в таблице.
Прежде чем завершить изучение данной темы, рассмотрим, к чему привело выполнение операции добавления столбца; ЕХЕС яр Ье1р Евр1оуеея Информация об окончательно полученной структуре таблицы Евр1оуеея приведена в табл. 5.8. Вполне очевидно, что добавлены все необходимые столбцы. Но следует отметить, что добавленные столбцы оказались в конце списка столбцов. В СУБД 8О). 8егчег не предусмотрена возможность добавлять столбцы в любом конкретном месте. А если требуется поместить какой-то столбец в середину, то следует создать полностью новую таблицу (с другим именем), скопировать данные в новую таблицу, уничтожить существующую таблицу с помощью оператора ВВОР, а затем переименовать новую таблицу, назвав ее так же, как старую.
Таблица 5.8. Информация о структуре таблицы жпр1о1тееп Со1ппп папе Туре Сопрпъей Ьепдъсг Рхес Зса1е Ип11азз1е гп Еерсоуее10 Гггягкапе Мсаа1е1п151а1 Ьаягнаг1е ТгС1е 10 по по 25 по по по уея 25 по оо по по оо по Ба1агу Рг1огБа1агу по по 19 оо по 19 попеу япа11ааСег1пе уея уев по оо ява11аагегсее по уея 10 гос оо по чагосаг чагосаг ааъегсее аасесгее 25 по по 30 оо уев по уея по по Указанная задача измекения пофядка Расположения сяиибцов может оказаться дп1ствительно очень сгожной. Нробламы могут часто возникать даже при использовании некоторых инструментальных федств, тфгдназначеннык для автоматизауии Решения указанной задачи.
Дело в том, что удаление текущей версии таблицы разрешается только после того, как будут уничтожены все ограничения внешнего юпоча, к отофые ссылаются на данную таб лицу. Это означает, что вначале необходимо уничтожить все внешние ключи, внеппи изменения, а затем снова ввести в действие внешние ключи. Тем ке менее автоматическое удаление всех индексов, копифък определены на старой табли уе, тфи уничтожении существующей табаицск не тфоисходитсзто означает, что пупс создании новой версии табгицъг необхогпсмо учитывать, что в сценарии создания должно быть тфедусмотрено восстановление индексов, а это влечет за собой въгполнекие значительного объема допазнителъной работаь Но на этом описание всего, что нужно сделать в связи с введением модификаций в таблицу не заканчивается. Хотя в настсящп1 книге тематика тфедставлений фактически еще не рассматфивалапь автоф считает себя обязанным указать пфедваРительно даже в этом разделе, что тфоисходит с пфедппавленикми после добавления столбца.