Мартин Грубер - Понимание SQL (991940), страница 28
Текст из файла (страница 28)
Новыйстолбец станет последним по порядку столбцом таблицы. Вообще то, можно добавитьсразу несколько новых столбцов, отделив их запятыми, в однй команде. Имеется возможность удалять или изменять столбцы. Наиболее часто, изменением столбца может быть просто увеличение его размера, или добавление (удаление) ограничения.Ваша система должна убедиться, что любые изменения не противоречат существующим данным — например при попытке добавить ограничение к столбцу которыйуже имел значение при нарушении которого ограничение будет отклонено. Лучше всего дважды проверить это.По крайней мере, посмотрите документацию вашей системы чтобы убедиться,гарантирует ли она что именно это было причиной.
Из-за нестандартного характеракоманды ALTER TABLE, вам все равно необходимо посмотреть тот раздел вашей системной документации где говорится об особых случаях.ALTER TABLE — не действует, когда таблица должна быть переопределена, новы должны разрабатывать вашу базу данных по возможности так чтобы не слишкомей в этом передоверяться. Изменение структуры таблицы, когда она уже в использовании — опасно! Просмотрите внимательно таблицы, которые являясь вторичнымитаблицами с извлечеными данными из другой таблицы (смотри Главу 20), не долгоправильно работают, а программы использующие вложенный SQL (Глава 25) выполняются неправильно или не всегда правильно.
Кроме того, изменение может стеретьвсех пользователей, имеющих разрешение обращаться к таблице.По этим причинам, вы должны разрабатывать ваши таблицы так, чтобы использовать ALTER TABLE только в крайнем случае.Если ваша система не поддерживает ALTER TABLE, или если вы хотите избежать ее использования, вы можете просто создать новую таблицу, с необходимымиизменениями при создании, и использовать команду INSERT с SELECT * запросомчтобы переписать в нее данные из старой таблицы.Пользователям которым был предоставлен доступ к старой таблице (см.
Главу22) должен быть предоставлен доступ к новой таблице.УДАЛЕНИЕ ТАБЛИЦВы должны быть собственником (т.е. быть создателем) таблицы, чтобы иметьвозможность удалить ее. Поэтому не волнуйтесь о случайном разрушении ваших данных, SQL сначала потребует чтобы вы очистили таблицу прежде, чем удалит ее избазы данных. Таблица с находящимися в ней строками, не может быть удалена. Об-ратитесь к Главе 15 за подробностями относительно того, как удалять строки из таблицы.
Синтаксис для удаления вашей таблицы, если конечно она является пустой,следующая:DROP TABLE <table name>;При подаче этой команды, имя таблицы больше не распознается и нет такой команды, которая могла быть дана этому объекту. Вы должны убедиться, что эта таблица не ссылается внешним ключом к другой таблице (Внешние ключи обсуждаются вГлаве 19), и что она не используется в определении Представления (Глава 20).Эта команда фактически не является частью стандарта ANSI, но она обще поддерживаема и полезна. К счастью, она более проста, и следовательно более непротиворечива, чем ALTER TABLE.
ANSI просто не имеет способа для определенияразрушеных или неправильных таблиц.РЕЗЮМЕТеперь Вы уже бегло ориентируетесь в основах определений данных. Вы можете создавать, изменять, и удалять таблицы. В то время как только первая из этихфункций — часть официального стандарта SQL, другие будут время от времени меняться, особенно — ALTER TABLE. DROP TABLE позволяет вам избавиться от таблицкоторые бесполезны. Она уничтожает только пустые таблицы, и следовательно неразрушает данные.Вы теперь знаете об индексах а также, как их создавать и удалять.
SQL не даетвам большого управления над ими, так как реализация которую вы используете довольно удачно определяет, как быстро выполняются различные команды. Индексы —это один из инструментов дающий Вам возможность воздействовать непосредственнона эффективность ваших команд в SQL. Мы рассмотрели индексы здесь чтобы отличать их от ограничений, с которыми их нельзя путать. Ограничения — это тема Главы18 и Главы 19.РАБОТА С SQL1. Напишите предложение CREATE TABLE, которое бы вывело нашу таблицу Заказчиков.2.
Напишите команду, которая бы давала возможность пользователю быстро извлекать порядки сгруппированные по датам из таблицы Порядков.3. Если таблица Порядков уже создана, как Вы можете заставить поле onum бытьуникальным (если допустить что все текущие значения уникальны) ?4. Создайте индекс который бы разрешал каждому продавцу быстро отыскивать егопорядки сгруппированные по датам.5. Предположим, что каждый продавец имеет только одного заказчика с данной оценкой, введите команду которая его извлечет.(См. Приложение A для ответов.)18ОГРАНИЧЕНИЕЗНАЧЕНИЙ ВАШИХДАННЫХВ ГЛАВЕ 17, ВЫ УЗНАЛИ КАК СОЗДАЮТСЯ ТАБЛИЦЫ. Теперь более тщательно с этого места мы покажем вам, как вы можете устанавливать ограничения в таблицах.Ограничения — это часть определения таблицы, которое ограничивает значения, которые вы можете вводить в столбцы.До этого места в книге, единственым ограничением на значения, которые вымогли вводить, были тип данных и размер вводимых значений, которые должны бытьсовместимы с теми столбцами в которые эти значения помещаются (как и определенов команде CREATE TABLE или команде ALTER TABLE).
Ограничения дают вам значительно большие возможности и скоро вы это увидете. Вы также узнаете как определять значения по умолчанию в этой главе.По умолчанию — это значение которое вставляется автоматически в любойстолбец таблицы, когда значение для этого столбца отсутствует в команде INSERTдля этой таблицы. NULL — это наиболее широко используемое значение по умолчанию, но в этой главе будет показано как определять и другие значения по умолчанию.ОГРАНИЧЕНИЕ ТАБЛИЦКогда вы создаете таблицу (или, когда вы ее изменяете), вы можете помещатьограничение на значения, которые могут быть введены в поля. Если вы это сделали,SQL будет отклонять любые значения, которые нарушают критерии, которые вы определили.
Имеется два основных типа ограничений — ограничение столбца и ограничение таблицы. Различие между ними в том, что ограничение столбцаприменяется только к индивидуальным столбцам, в то время как ограничение таблицы применяется к группам из одного и более столбцов.ОБЪЯВЛЕНИЕ ОГРАНИЧЕНИЙВы вставляете ограничение столбца в конец имени столбца после типа данных иперед запятой. Ограничение таблицы помещаются в конец имени таблицы после последнего имени столбца, но перед заключительной круглой скобкой. Далее показансинтаксис для команды CREATE TABLE, расширенной для включения в нее ограничения:CREATE TABLE <table name>(<column name> <data type> <column constraint>,<column name> <data type> <column constraint> ...<table constraint> ( <column name> [, <column name> ])...
);(Для краткости, мы опустили аргумент размера, который иногда используется стипом данных.) Поля данные в круглых скобках после ограничения таблицы — это поля к которым применено это ограничение. Ограничение столбца, естественно, применяется к столбцам, после чьих имен оно следует. Остальная часть этой глава будетописывать различные типы ограничений и их использование.ИСПОЛЬЗОВАНИЕ ОГРАНИЧЕНИЙ ДЛЯ ИСКЛЮЧЕНИЯПУСТЫХ (NULL) УКАЗАТЕЛЕЙВы можете использовать команду CREATE TABLE чтобы предохранить поле отразрешения в нем пустых (NULL) указателей с помощью ограничения NOT NULL. Этоограничение накладывается только для разнообразных столбцов.Вы можете вспомнить что NULL — это специальное обозначение, которое отмечает поле как пустое. NULL может быть полезен, когда имеются случаи, когда вы хотите быть от них гарантированы.
Очевидно, что первичные ключи никогда не должныбыть пустыми, поскольку это будет подрывать их функциональные возможности.Кроме того, такие поля как имена, требуют в большинстве случаев, определенныхзначений. Например, вы вероятно захотите иметь имя для каждого заказчика в таблице Заказчиков. Если вы поместите ключевые слова NOT NULL сразу после типаданных (включая размер) столбца, любая попытка поместить значение NULL в это поле будет отклонена. В противном случае, SQL понимает, что NULL разрешен.Например, давайте улучшим наше определение таблицы Продавцов, не позволяя помещать NULL значения в столбцы snum или sname:CREATE TABLE Salespeople( Snum integer NOT NULL,Sname char (10) NOT NULL,city char (10),comm decimal);Важно помнить, что любому столбцу с ограничением NOT NULL должно быть установлено значение в каждом предложении INSERT, воздействующем на таблицу.При отсутствии NULL, SQL может не иметь значений для установки в эти столбцы, если конечно значение по умолчанию, описанное ранее в этой главе, уже не было назначено.Если ваша система поддерживает использование ALTER TABLE, чтобы добавлять новые столбцы к уже существующей таблице, вы можете вероятно помещать ограничение столбцов, типа NOT NULL, для этих новых столбцов.
Однако, если выпредписываете новому столбцу значение NOT NULL, текущая таблица должна бытьпустой.УБЕДИТЕСЬ, ЧТО ЗНАЧЕНИЯ УНИКАЛЬНЫВ Главе 17, мы обсудили использование уникальных индексов чтобы заставитьполя иметь различные значения для каждой строки. Эта практика — осталась с прежних времен, когда SQL поддерживал ограничение UNIQUE. Уникальность — этосвойство данных в таблице, и поэтому его более логично назвать как ограничениеэтих данных, а не просто как свойство логического отличия, связывающее объектданных (индекс).Несомненно, уникальные индексы — один из самых простых и наиболее эффективных методов предписания уникальности. По этой причине, некоторые реализацииограничения UNIQUE используют уникальные индексы; то-есть они создают индекс несообщая вам об этом.