Программирование баз данных MS SQL Server (1084479), страница 28
Текст из файла (страница 28)
Но на этом его возможности далеко не исчерпываются. Более сложные варианты обновления рассматриваются в последующих главах. , Безуцюано, Субд 86(;:Зеп((ег,'предоставляет пельзсвателю настолько большие удобстве',,: чтс Возможно даже.'обновление, значенйй практически.любого столбце:(числрсиекзЛЮЧЕ; . ::ний 'из 'этого'лрзеила мейелгико, йапример,' нельзя обновлять столбцы с временйыми:от'-', ';.МзтхаМИ); Нддрв'СБНОаЛЕ<Н(ИИ ПвйрайЧНЫХ' КяЮЧВа НЕО6ХОдИМО' СПБЛЮдатэ ИСКПЮЧИтЕЛЬйу<Ю. ' . =ссторож<ность2 (убновлеййе) кпючей связайо с 'очень, высоким риском зависания,',т;е.:лотери, ' ' еалзис:исходными'денными других дённых (ббьщающихсй нате данные,)кс(тррыеподвер(, гаются.изменениям), ,НялрИМЕр,':Стсябвц "ЭСОГя Гоу В,табпнцв а(аэхвя,баЗЫ'дВННЫХ РВЪЭ, йредо>тВВЛЛЕтлсбой, стдлбец первичнвгс ключа Если.бы.было, принятоРец)ение изменить значение; 10 .в:столб- ;-це эгог 1<1)таблицы> ясогвё на 35,,то 'асе дан(нь(е'в таблице яа1еа,"которые,относятся.' .
' К.'СКЛЗДУ С ИДЕНтИФИКДТВРОМ 10,: МОГУГ'СтатЬ ЗаЕИСШИЫИ И"НЕДОСтУПНЬ(МИ;, В<ЛИ ЗиаЧЕНИЕ: .'яБОГ<1угВОВСЕХСтрОКак,',ССЫЛ<аТЮщИХбя.иа ЗНВЧЕйИЕ'..10ПОЛя яСОГ,'а<(;,НЕ Стаивт таКжЕ:: равным 35 а'результате:зтвго обновления, Теы не мелев''в Базе данных рпъй 'предусмотре- ' , но ограничейие целостности,' касающееся,йримейения ссьцюк на таблицу яеогеэ; поэтому,:. а даиибы СЛуЧаЕ С1убд ВФ, Бявяв)ЕГ':Саы<а) СЛЕдИт За тв(а,',ЧтОбм НЕ'ВСЗНИКЗЛИ Снтуацнн,,'СВВ- 'Заиимв С ЗВВИСаНИЕМ:(д<ППОЛНИГЕЛЬН(Ы(Е Севдвияя Об, СГраНИЧЕНйяк: цвпоптНОСТИ,:ПрнзвдЕНЫ..
',.в главе< 7); но еще раз 'отметим'; что могу(:быть' случаи; когда ззщита первичных'ключей.от'. абновлвния:не-предусмотрена; а зто очень'опасно. Оператор ожытж По-видимому, самым простым из всех операторов, рассматриваемых в данной главе, является описанная в этом разделе версия оператора РЕДЕЕТЕ. В этой версии не предусмотрено использование списка столбцов, а задается только имя таблицы н, как правило, конструкция ХНЕПЕ. Поэтому трудно представить себе более простой синтаксис ВЕЬЕТЕ <ГаЪ1е паве> (ХНЕНЕ <яеагсь ооопьгзоо>) же операция, как и в первом запросе (цена увеличивается на 10%). Затем эта промежуточная цена округляется в соответствии с указанным бизнес-правилом (согласно которому цена должна определяться с точностью до цента).
Для этого используется функция НОВИЭ (), параметр которой указывает, что данные должны округляться до двух десятичных позиций (на это указывает цифра 2, стоящая после коэффициента 1. 1, обеспечивающего увеличение на 10%). Замечательной особенностью этого оператора является то, что он позволяет выполнить все необходимые действия с помощью одной операции, а не двух. Проверим полученный результат: Основные операторы языка Т-ВЯЕ 119 Конструкция ИНЕВЕ действует точно так же, как и все конструкции ИНЕВЕ, рассматривавшиеся до сих пор. Список столбцов задавать не требуется, поскольку удаляется целая строка (например, невозможно удалить половину строки).
Поскольку изучение оператора ЕЕЬЕТЕ не должно быть сопряжено с какими-либо сложностями, в настоящем разделе будет приведен только ряд небольших примеров операторов удаления, предназначенных для уничтожения следов тех операций вставки, которые были выполнены ранее в данной главе. Вначале вызовем на выполнение оператор ЯЕ1,ЕСТ, чтобы убедиться, что первая из указанных строк все еще находится в таблице: Бкькст * ГНОМ згогез ИНЕВЕ згог 1П = 'ТЕЯТ' Если эта строка еще не удалена, то результаты выполнения предыдущего оператора должны показать наличие одной строки, совпадающей с той, которая была первоначально добавлена к таблице с помощью оператора 1ИБЕВТ.
Теперь избавимся от этой строки: НКЬКТК згогез ИНЕВК згог Тп = 'ТЕНТ' Обратите внимание на то, что в данном случае мы столкнемся с ситуацией, в которой СУБД ЯОЕ Яеггег откажется удалить строку в связи с нарушениями ссылочной целостности: МЯЧ 547, Ьече1 15, Бгабе 1, 51пе 1 0Е1ЕТЕ згапевепб соп111сгео и1СЬ СОЬНИ1 ВКККВКИСЕ сопзггакпг 'ГК за1ез зпог 16 1ВГР2007'.
ТЬе соп111сг осспггеп* Тп ПагаЬазе 'рппз', саЬ1е 'за1ез', со1пвп 'зсог 1п'. тье зсасевепс ьаз ьееп сегвГпасеп. СУБД ЯОЕ Яеггег не позволяет удалять строку, если на нее имеется ссылка, на которую распространяется ограничение внешнего ключа. Дополнительные сведения о внешних ключах будут приведены в главе 7, но на данный момент достаточно указать, что если одна строка ссылается на другую строку (либо в той же, либо в другой таблице; это не имеет значения) с использованием внешнего ключа, то необходимо вначале удалить ссылающуюся строку и только затем удалить строку, на которую была сделана ссылка.
В последнем операторе 1НЯЕВТ в таблицу за1ез была вставлена строка со значением Ягог 1о, равным ТЕЯТ, а именно эта строка ссылается на строку, которую мы только что пытались удалить. Поэтому, прежде чем удалить указанную строку из таблицы зсогез, необходимо удалить строку таблицы за1ез, которая на нее ссылается: СКЬЕТК за1ез ИНЕВК због ТП = 'ТЕЯТ' Теперь можно повторно вызвать на выполнение первый оператор РЕЕЕТЕ, который на сей раз будет выполнен успешно: СКЬКТК ззогез ИНЕВЕ згог ТП = 'ТЕНТ' Чтобы убедиться в том, что данные действительно удалены, можно провести две простые проверки. Первая из них происходит автоматически при выполнении опера- 120 Глава 3 тора РЕ1,ЕТЕ.
Ее успешное проведение подтверждает сообщение о том, что воздействию оператора подверглась одна строка. Вторая несложная проверка состоит в повторном вызове на выполнение оператора ЕЕЬЕСТ. При этом должно быть получено нуль строк. Для проведения еще одного простого практического занятия по использованию оператора РЕЬЕТЕ уничтожим также вторую из вставленных ранее строк, внеся в текст оператора лишь небольшое изменение: РЕЬЕТЕ згогез КНЕЕЕ згог ТО = 'ТЗТ2' На этом тема, связанная с выполнением простых операторов удаления, заканчивается.
Оператор РЕЬЕТЕ, как и другие операторы, которые рассматривались в настоящей главе, станет темой дальнейшего изложения после того, как мы будем готовы приступить к использованию более сложных условий поиска. Резюме Язык Т-3О1. — это разновидность языка ЕО1. (3ггпсгпгег( Овесу 1.ап3пайе — язык структурированных запросов), определяемого стандартом АХЯ, которая применяется исключительно в СУБД Еегтег БОБ. Язык Т-ЕЯ(. совместим со стандартом АХ31 92 в минимальной конфигурации, а также включает целый ряд собственных расширений, о чем более подробно сказано в последующих главах.
В СУБД БО(. Еегтег в целях обеспечения обратной совместимости допускается использование множества различных вариантов синтаксиса, которые фактически не отличаются по своим возможностям от синтаксиса, соответствующего стандарту АХИ, но везде, где это возможно, следует использовать форму АХ31. Как правило, в данной книге при наличии нескольких вариантов синтаксического оформления операторов демонстрируются все варианты, но опять-таки по возможности применяется вариант АХ31. Это особенно важно, если в дальнейшем в какой-то момент может возникнуть необходимость поменять серверную часть приложения (иными словами, перейти к использованию другого сервера базы данных). Вероятность того, что код АХ31 будет успешно функционировать на новом сервере базы данньгх, весьма велика, тогда как код, характеризующийся использованием только средств Т-3(11., потребует существенной переработки.
В настоящей главе подробно описаны операторы Т-ЕО(., предназначенные для обработки отдельных таблиц, но реальность такова, что чаще всего требуется информация больше чем из одной таблицы. В следующей главе будет показано, как использовать операции т011ч для выборки данных из нескольких таблиц. Упражнения 3.1. Напишите запрос, который выводит все столбцы и все строки из таблицы аисйогз базы даннгях рпЬз.
3.2. Измените запрос, рассматриваемый в упражнении 1, таким образом, чтобы в полученных результатах остались сведения только об авторах из штата Юта (Ргап). (Подсказка: их должно быть 2.) 3.3. Добавьте новую строку в таблицу апгЬогз базы данных рпЬз. 3.4. Удалите только что добавленную строку Соединения С этой главы начинается настоящая профессиональная подготовка по языку ЯО1..
Операторы, которые рассматривались в предыдущих главах, составляют лишь небольшую часть инструментария разработчика, поскольку они в основном предназначены для работы с отдельными таблицами, что не позволяет выполнить достаточно большой объем работы, особенно если база данных в значительной степени нормализована. Нормализованная база данных характеризуется тем, что в ней данные не концентрируются в больших, всеобъемлющих таблицах, а распределяются по многочисленным таблицам с меныпим количеством столбцов в целях устранения повторяющихся данных, экономии пространства, повышения производительности и обеспечения целостности данных. Задача нормализации является очень важной и крайне необходимой для обеспечения нормального функционирования реляционных баз данных; тем не менее, из того, что данные нормализованы, т.е. распределены по многочисленным таблицам, следует также, что для выборки данных приходится использовать несколько таблиц.
Конуепуии ноРмаяизауии РассматРиваются боже подробно в агаве б. А на данный момент достаточно помнить, что по мере увеличения степени нормаяизауии базы данных возрастает вероятность того, что для получения всех требуемьсх данных придется прибегазпь к соединению нмнозьких табзиу. В настоящей главе приведено вводное описание процесса комбинирования данных из нескольких таблиц в один результирующий набор с использованием различных форм конструкции б01Н. В число этих конструкций входят следующие: ~3 1ИИЕН 001И вЂ” внутреннее соединение.
П ООТЕН 101М вЂ” внешнее соединение, как левое (ьЕГТ), так и правое (Н16НТ). Е) ГОЕВ 001И вЂ” полное соединение. Ы ОНОЯЯ 001И вЂ” перекрестное соединение. 122 Глава 4 В этой главе будет также показано, что существует несколько вариантов синтаксиса операторов соединения и наиболее подходящим является один конкретный вариант синтаксиса. Кроме того, будет кратко представлена операция 0М10М, позволяющая объединять результаты двух запросов в один результирующий набор. Конструкции ~0~~ Таблица 4.1. Одна строка с данными из таблицы ма1вв я з1вхо 241вМаве Ну тазг Ьазу теагиаде 19бл Теперь перейдем к рассмотрению строки из таблицы с данными об актерах, называемой Ассогз (табл.