Создание и изменение таблиц или индексов с помощью запроса определения данных

Вы можете создавать и изменять таблицы, ограничения, индексы и связи в Access, написав запросы определения данных SQL представлении. В этой статье объясняется, как использовать запросы определения данных для создания таблиц, ограничений, индексов и связей. Эта статья также поможет вам решить, когда использовать запрос на определение данных.

В этой статье

Обзор

В отличие от других запросов Access, запрос определения данных не извлекает данные. Вместо этого запрос определения данных использует язык определения данных для создания, изменения или удаления объектов базы данных.

Примечание: Язык определения данных (DDL) является частью язык SQL (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 знака для года. Чтобы создать таблицу с помощью запроса определения данных, сделайте следующее:

Примечание: Для выполнения запроса определения данных может потребоваться сначала включить содержимое базы данных:

  • Нажмите на панели сообщений кнопку Включить содержимое.

Создание таблицы

  1. На вкладке "Создание" в группе "Макрос &" нажмите кнопку "Конструктор запросов".

  2. На вкладке "Конструктор" в группе "Тип запроса" нажмите кнопку "Определение данных".

    Сетка конструктора скрыта, SQL в представлении отображается вкладка объекта.

  3. Введите следующую SQL:

    CREATE TABLE Cars (Name TEXT(30), Year TEXT(4), Price CURRENCY)

  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-знаковое текстовое поле для хранения сведений о состоянии каждого автомобиля. Здесь доступны перечисленные ниже возможности

  1. На вкладке "Создание" в группе "Макрос &" нажмите кнопку "Конструктор запросов".

  2. На вкладке "Конструктор" в группе "Тип запроса" нажмите кнопку "Определение данных".

    Сетка конструктора скрыта, SQL в представлении отображается вкладка объекта.

  3. Введите следующую SQL:

    ALTER TABLE Cars ADD COLUMN Condition TEXT(10)

  4. На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить.

К началу страницы

Создание индекса

Чтобы создать индекс в существующей таблице, используйте команду 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.

Предположим, что у вас есть таблица "Автомобили" с полями, в которым хранятся имя, год, цена и условия использования автомобилей, которые вы хотите приобрести. Предположим также, что таблица стала большой и вы часто включаете в запросы поле "Год". Чтобы запросы быстро возвращали результаты, можно создать индекс для поля Year, вы используя следующую процедуру:

  1. На вкладке "Создание" в группе "Макрос &" нажмите кнопку "Конструктор запросов".

  2. На вкладке "Конструктор" в группе "Тип запроса" нажмите кнопку "Определение данных".

    Сетка конструктора скрыта, SQL в представлении отображается вкладка объекта.

  3. Введите следующую SQL:

    CREATE INDEX YearIndex ON Cars (Year)

  4. На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить.

К началу страницы

Создание ограничения или связи

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

Связь — это тип ограничения, которое ссылается на значения поля или сочетания полей в другой таблице, чтобы определить, можно ли вставить значение в поле с ограничениями или сочетание полей. Специальное ключевое слово не указывает на то, что ограничение является связью.

Чтобы создать ограничение, используйте предложение 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}]}

Предположим, что у вас есть таблица "Автомобили" с полями, в которым хранятся имя, год, цена и условия использования автомобилей, которые вы хотите приобрести. Кроме того, предположим, что вы часто забудете ввести значение для условия автомобиля и всегда хотите записать эти сведения. Вы можете создать ограничение для поля "Условие", чтобы не оставить его пустым, вы можете сделать следующее:

  1. На вкладке "Создание" в группе "Макрос &" нажмите кнопку "Конструктор запросов".

  2. На вкладке "Конструктор" в группе "Тип запроса" нажмите кнопку "Определение данных".

    Сетка конструктора скрыта, SQL в представлении отображается вкладка объекта.

  3. Введите следующую SQL:

    ALTER TABLE Cars ALTER COLUMN Condition TEXT CONSTRAINT ConditionRequired NOT NULL

  4. На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить.

Предположим, что через некоторое время в поле "Условие" есть много похожих значений, которые должны быть одинаковыми. Например, у одних автомобилей плохое значение, а у других — плохое.

Примечание: Если вы хотите следовать остальным процедурам, добавьте поддельные данные в таблицу "Автомобили", созданную на предыдущих шагах.

После очистки значений, чтобы они были согласованы, можно создать таблицу с именем CarCondition с одним полем с именем Condition, которое содержит все значения, которые вы хотите использовать для условия автомобиля:

  1. На вкладке "Создание" в группе "Макрос &" нажмите кнопку "Конструктор запросов".

  2. На вкладке "Конструктор" в группе "Тип запроса" нажмите кнопку "Определение данных".

    Сетка конструктора скрыта, SQL в представлении отображается вкладка объекта.

  3. Введите следующую SQL:

    CREATE TABLE CarCondition (Condition TEXT(10))

  4. На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить.

  5. Создайте первичный ключ для таблицы с помощью выписки ALTER TABLE:

    ALTER TABLE CarCondition ALTER COLUMN Condition TEXT CONSTRAINT CarConditionPK PRIMARY KEY

  6. Чтобы вставить значения из поля "Условие" таблицы "Автомобили" в новую таблицу CarCondition, введите следующую SQL на вкладке объекта SQL просмотра:

    INSERT INTO CarCondition SELECT DISTINCT Condition FROM Cars;

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

  7. На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить.

Создание связи с помощью ограничения

Чтобы требовать, чтобы любое новое значение, вставленное в поле "Условие" таблицы "Автомобили", совпадала со значением поля Condition в таблице CarCondition, вы можете создать связь между carCondition и Cars в поле "Условие", используя следующую процедуру:

  1. На вкладке "Создание" в группе "Макрос &" нажмите кнопку "Конструктор запросов".

  2. На вкладке "Конструктор" в группе "Тип запроса" нажмите кнопку "Определение данных".

    Сетка конструктора скрыта, SQL в представлении отображается вкладка объекта.

  3. Введите следующую SQL:

    ALTER TABLE Cars ALTER COLUMN Condition TEXT CONSTRAINT FKeyCondition REFERENCES CarCondition (Condition)

  4. На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить.

Ограничения на несколько полей

Предложение 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}]}

Рассмотрим еще один пример, в который используется таблица "Автомобили". Предположим, что две записи в таблице "Автомобили" не имеют одного и того же набора значений для значений "Имя", "Год", "Условие" и "Цена". Чтобы создать ограничение UNIQUE, применяемое к этим полям, с помощью следующей процедуры:

  1. На вкладке "Создание" в группе "Макрос &" нажмите кнопку "Конструктор запросов".

  2. На вкладке "Конструктор" в группе "Тип запроса" нажмите кнопку "Определение данных".

    Сетка конструктора скрыта, SQL в представлении отображается вкладка объекта.

  3. Введите следующую SQL:

    ALTER TABLE Cars ADD CONSTRAINT NoDupes UNIQUE (имя, год, условие, цена)

  4. На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить.

К началу страницы

Нужна дополнительная помощь?

Совершенствование навыков работы с Office
Перейти к обучению
Первоочередный доступ к новым возможностям
Присоединиться к программе предварительной оценки Office

Были ли сведения полезными?

Благодарим за отзыв! Возможно, будет полезно связать вас с одним из наших специалистов службы поддержки Office.

×