В Access можно создавать и изменять таблицы, ограничения, индексы и отношения путем создания запросов на определение данных в режиме SQL. В этой статье описываются запросы определения данных и их использование для создания таблиц, ограничений, индексов и отношений. Эта статья также поможет вам определить, когда использовать запрос определения данных.
В этом разделе...
Обзор
В отличие от других запросов Access запрос определения данных не извлекает данные. Вместо этого в запросе определения данных для создания, изменения или удаления объектов базы данных используется язык определения данных.
Примечание
Язык описания данных (DDL) является частью язык SQL.
Запросы определения данных могут быть очень удобными. Вы можете регулярно удалять и повторно создавать части схемы базы данных, просто выполнив несколько запросов. Если вы знакомы с инструкциями SQL и планируете удалить и заново создать определенные таблицы, ограничения, индексы или отношения, рекомендуется использовать запрос определения данных.
Предупреждение
Использование запросов определения данных для изменения объектов базы данных может быть рискованным, так как эти действия не сопровождаются диалоговыми окнами подтверждения. Допущенная ошибка может привести к потере данных или непреднамеренному изменению структуры таблицы. Будьте осторожны при использовании запроса определения данных для изменения объектов в базе данных. Если вы не несете ответственности за обслуживание используемой базы данных, перед выполнением запроса на определение данных проконсультируйтесь с ее администратором.
Важно
Перед выполнением запроса на определение данных создайте резервные копии всех таблиц.
Ключевые слова DDL
| Ключевое слово | Использование |
|---|---|
| CREATE | Создайте индекс или таблицу, которые еще не существуют. |
| ALTER | Изменение существующей таблицы или столбца. |
| DROP | Удаление существующей таблицы, столбца или ограничения. |
| ADD | Добавьте столбец или ограничение в таблицу. |
| COLUMN | Использование с ADD, ALTER или DROP |
| CONSTRAINT | Использование с ADD, ALTER или DROP |
| INDEX | Использование с CREATE |
| TABLE | Использование с ALTER, CREATE или DROP |
Создание и изменение таблицы
Чтобы создать таблицу, воспользуйтесь командой CREATE TABLE. Команда CREATE TABLE имеет следующий синтаксис:
CREATE TABLE table_name
(field1 type [(size)] [NOT NULL] [index1]
[, field2 type [(size)] [NOT NULL] [index2]
[, ...][, CONSTRAINT constraint1 [, ...]])
Обязательными элементами команды CREATE TABLE являются сама команда CREATE TABLE и имя таблицы, но обычно требуется определить некоторые поля или другие аспекты таблицы. Рассмотрим этот простой пример.
Предположим, вы хотите создать таблицу для хранения названия, года выпуска и цены подержанных автомобилей, которые вы планируете приобрести. Вы хотите разрешить до 30 символов для имени и 4 символов для года. Чтобы использовать запрос определения данных для создания таблицы, выполните указанные ниже действия.
Примечание
Для выполнения запроса определения данных может потребоваться сначала включить содержимое базы данных.
- Нажмите на панели сообщений кнопку Включить содержимое.
Создание таблицы
- На вкладке " Создание " в группе "Макросы & код " щелкните "Конструктор запросов".
- На вкладке " Конструктор " в группе "Тип запроса " нажмите кнопку "Определение данных".
Бланк скрыт, и отображается вкладка объекта представления SQL. - Введите следующую инструкцию SQL:
СОЗДАТЬ ТАБЛИЦУ Автомобили (Название ТЕКСТ(30), Год ТЕКСТ(4), Цена ВАЛЮТА) - На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить.
Изменение таблицы
Изменить таблицу можно с помощью команды ALTER TABLE. С помощью команды ALTER TABLE можно добавлять, изменять и удалять столбцы или ограничения. Команда ALTER TABLE имеет следующий синтаксис:
ALTER TABLE table_name predicate
где предикат может быть одним из следующих:
ADD COLUMN field type[(size)] [NOT NULL] [CONSTRAINT constraint]
ADD CONSTRAINT multifield_constraint
ALTER COLUMN field type[(size)]
DROP COLUMN field
DROP CONSTRAINT constraint
Предположим, вы хотите добавить текстовое поле длиной 10 символов для хранения сведений о состоянии каждого автомобиля. Здесь доступны перечисленные ниже возможности
- На вкладке " Создание " в группе "Макросы & код " щелкните "Конструктор запросов".
- На вкладке " Конструктор " в группе "Тип запроса " нажмите кнопку "Определение данных".
Бланк скрыт, и отображается вкладка объекта представления SQL. - Введите следующую инструкцию SQL:
ALTER TABLE Автомобили ADD COLUMN Условие ТЕКСТ(10) - На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить.
Создание индекса
Чтобы создать индекс в существующей таблице, воспользуйтесь командой CREATE INDEX. Команда CREATE INDEX имеет следующий синтаксис:
CREATE [UNIQUE] INDEX index_name
ON table (field1 [DESC][, field2 [DESC], ...])
[WITH {PRIMARY | DISALLOW NULL | IGNORE NULL}]
Обязательными элементами являются только команда CREATE INDEX, имя индекса, аргумент ON, имя таблицы, содержащей поля, которые требуется проиндексировать, и список полей, которые нужно включить в индекс.
- Аргумент DESC приводит к созданию индекса в порядке убывания, что может быть полезно при частом выполнении запросов, которые ищут верхние значения для индексируемого поля или сортируют индексированное поле в порядке убывания. По умолчанию индекс создается в порядке возрастания.
- Аргумент WITH PRIMARY устанавливает индексированное поле или поля в качестве первичного ключа таблицы.
- Аргумент WITH DISALLOW NULL приводит к тому, что индекс требует ввода значения для индексируемого поля, то есть значения NULL не допускаются.
Предположим, что имеется таблица "Автомобили" с полями, в которых хранятся название, год выпуска, цена и состояние подержанных автомобилей, которые вы планируете приобрести. Предположим, что таблица стала большой и вы часто включаете в запросы поле года. Можно создать индекс по полю "Год", чтобы запросы быстрее возвращали результаты, выполнив следующие действия.
- На вкладке " Создание " в группе "Макросы & код " щелкните "Конструктор запросов".
- На вкладке " Конструктор " в группе "Тип запроса " нажмите кнопку "Определение данных".
Бланк скрыт, и отображается вкладка объекта представления SQL. - Введите следующую инструкцию SQL:
CREATE INDEX YearIndex ON Cars (Year) - На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить.
Создание ограничения или отношения
Ограничение задает логическое условие, которому должно удовлетворять поле или сочетание полей при вставке значений. Например, ограничение УНИК не позволяет ограниченному полю принять значение, которое дублирует существующее значение поля.
Связь — это тип ограничения, которое ссылается на значения поля или сочетания полей другой таблицы, чтобы определить, может ли значение быть вставлено в поле с ограничением или комбинацию полей. Не используйте специальные ключевые слова для обозначения того, что ограничение является отношением.
Чтобы создать ограничение, используйте предложение CONSTRAINT в командах CREATE TABLE или ALTER TABLE. Существует два вида предложений CONSTRAINT: одно для создания ограничения для одного поля, а другое для создания ограничения для нескольких полей.
Ограничения одного поля
Предложение CONSTRAINT с одним полем следует сразу за определением ограничиваемого поля и имеет следующий синтаксис:
CONSTRAINT constraint_name {PRIMARY KEY | UNIQUE | NOT NULL |
REFERENCES foreign_table [(foreign_field)]
[ON UPDATE {CASCADE | SET NULL}]
[ON DELETE {CASCADE | SET NULL}]}
Предположим, что имеется таблица "Автомобили" с полями, в которых хранятся название, год выпуска, цена и состояние подержанных автомобилей, которые вы планируете приобрести. Также предположим, что вы часто забываете ввести значение состояния автомобиля и всегда хотите записывать эту информацию. Можно создать ограничение для поля "Условие", чтобы не оставлять поле пустым, выполнив следующие действия.
- На вкладке " Создание " в группе "Макросы & код " щелкните "Конструктор запросов".
- На вкладке " Конструктор " в группе "Тип запроса " нажмите кнопку "Определение данных".
Бланк скрыт, и отображается вкладка объекта представления SQL. - Введите следующую инструкцию SQL:
ALTER TABLE Автомобили ALTER COLUMN Condition TEXT CONSTRAINT ConditionRequired NOT NULL - На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить.
Предположим, что через некоторое время вы заметите, что в поле "Условие" много похожих значений, которые должны совпадать. Например, некоторые автомобили имеют плохое состояние, а другие — плохое.
Примечание
Если вы хотите следовать остальным процедурам, добавьте некоторые поддельные данные в таблицу Cars, созданную на предыдущих шагах.
После очистки значений, чтобы сделать их более согласованными, можно создать таблицу CarCondition с одним полем Condition, содержащим все значения, которые требуется использовать для определения состояния автомобилей:
На вкладке " Создание " в группе "Макросы & код " щелкните "Конструктор запросов".
На вкладке " Конструктор " в группе "Тип запроса " нажмите кнопку "Определение данных".
Бланк скрыт, и отображается вкладка объекта представления SQL.Введите следующую инструкцию SQL:
CREATE TABLE CarCondition (Condition TEXT(10))На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить.
Создайте первичный ключ таблицы с помощью инструкции ALTER TABLE:
ALTER TABLE CarCondition ALTER COLUMN Condition TEXT CONSTRAINT CarConditionPK PRIMARY KEYЧтобы вставить значения из поля Condition таблицы Cars в новую таблицу CarCondition, введите следующий SQL-код на вкладке объекта представления SQL:
INSERT INTO CarCondition SELECT DISTINCT Condition FROM Cars;Примечание
Инструкция SQL на этом этапе является запросом на добавление. В отличие от запроса определения данных, запрос на добавление заканчивается точкой с запятой.
На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить.
Создание отношения с помощью ограничения
Чтобы все новое значение, вставленное в поле Condition таблицы Cars, соответствовало значению поля Condition в таблице CarCondition, можно создать связь между CarCondition и Cars в поле Condition, выполнив следующую процедуру:
- На вкладке " Создание " в группе "Макросы & код " щелкните "Конструктор запросов".
- На вкладке " Конструктор " в группе "Тип запроса " нажмите кнопку "Определение данных".
Бланк скрыт, и отображается вкладка объекта представления SQL. - Введите следующую инструкцию SQL:
ALTER TABLE Cars ALTER COLUMN Condition TEXT CONSTRAINT FKeyCondition REFERENCES CarCondition (Condition) - На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить.
Ограничения нескольких полей
Предложение CONSTRAINT из нескольких полей может использоваться только вне предложения определения поля и имеет следующий синтаксис:
CONSTRAINT constraint_name
{PRIMARY KEY (pk_field1[, pk_field2[, ...]]) |
UNIQUE (unique1[, unique2[, ...]]) |
NOT NULL (notnull1[, notnull2[, ...]]) |
FOREIGN KEY [NO INDEX] (ref_field1[, ref_field2[, ...]])
REFERENCES foreign_table
[(fk_field1[, fk_field2[, ...]])] |
[ON UPDATE {CASCADE | SET NULL}]
[ON DELETE {CASCADE | SET NULL}]}
Рассмотрим другой пример с таблицей "Автомобили". Предположим, что в таблице "Автомобили" нет двух одинаковых записей с одинаковым набором значений "Имя", "Год выпуска", "Состояние" и "Цена". Можно создать ограничение УНИК, применяемое к этим полям, с помощью следующей процедуры:
- На вкладке " Создание " в группе "Макросы & код " щелкните "Конструктор запросов".
- На вкладке " Конструктор " в группе "Тип запроса " нажмите кнопку "Определение данных".
Бланк скрыт, и отображается вкладка объекта представления SQL. - Введите следующую инструкцию SQL:
ALTER TABLE Автомобили ДОБАВИТЬ ОГРАНИЧЕНИЕ NoDupes UNIQUE (название, год, состояние, цена) - На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить.