У програмі 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:
СТВОРИТИ ТАБЛИЦЮ Автомобілі (Назва TEXT(30), Рік TEXT(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 Умова TEXT(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 в індексі вимагається введення значення для індексованого поля — тобто пусті значення заборонені.
Припустімо, що у вас є таблиця "Автомобілі" з полями, у яких зберігаються назва, рік, ціна та стан вживаних автомобілів, які ви плануєте придбати. Крім того, припустимо, що таблиця стала великою та ви часто включаєте поле "Рік" у запити. Можна створити індекс у полі "Рік", щоб прискорити отримання результатів у запитах, дотримуючись наведеної нижче процедури.
- На вкладці Створити в групі Макроси та код натисніть кнопку Конструктор запитів.
- На вкладці " Конструктор " у групі " Тип запиту " натисніть кнопку "Визначення даних".
Бланк приховано, і відображається вкладка об'єкта в режимі SQL. - Введіть таку інструкцію SQL:
CREATE INDEX YearIndex ON Cars (Year) - На вкладці Конструктор у групі Результати натисніть кнопку Запуск.
Створення обмеження або зв'язку
Обмеження задає логічну умову, якій має відповідати поле або комбінація полів під час вставлення значень. Наприклад, обмеження 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}]}
Припустімо, що у вас є таблиця "Автомобілі" з полями, у яких зберігаються назва, рік, ціна та стан вживаних автомобілів, які ви плануєте придбати. Також припустімо, що ви часто забуваєте ввести значення стану автомобіля та завжди хочете записувати цю інформацію. Можна створити обмеження для поля "Умова", щоб запобігти залишенню поля пустим, виконавши наведені нижче дії.
- На вкладці Створити в групі Макроси та код натисніть кнопку Конструктор запитів.
- На вкладці " Конструктор " у групі " Тип запиту " натисніть кнопку "Визначення даних".
Бланк приховано, і відображається вкладка об'єкта в режимі SQL. - Введіть таку інструкцію SQL:
ALTER TABLE Автомобілі ALTER COLUMN Умова ОБМЕЖЕННЯ ТЕКСТУ УмоваRequired, NOT NULL - На вкладці Конструктор у групі Результати натисніть кнопку Запуск.
А тепер припустимо, що через деякий час ви помітили, що в полі «Умова» багато схожих значень, які повинні бути однаковими. Наприклад, одні автомобілі мають значення стану погано , а інші – погано.
Примітка.
Щоб виконати решту процедур, додайте до таблиці "Автомобілі" фальшиві дані, створену на попередніх кроках.
Після очищення значень, щоб забезпечити їх узгодженість, можна створити таблицю під назвою CarCondition з одним полем під назвою Condition, що містить усі значення, які потрібно використовувати для опису стану автомобілів:
На вкладці Створити в групі Макроси та код натисніть кнопку Конструктор запитів.
На вкладці " Конструктор " у групі " Тип запиту " натисніть кнопку "Визначення даних".
Бланк приховано, і відображається вкладка об'єкта в режимі SQL.Введіть таку інструкцію SQL:
CREATE TABLE CarCondition (умова TEXT(10))На вкладці Конструктор у групі Результати натисніть кнопку Запуск.
Створіть первинний ключ для таблиці за допомогою інструкції ALTER TABLE:
ALTER TABLE CarCondition ALTER COLUMN Умова ОБМЕЖЕННЯ ТЕКСТУ CarConditionPK ПЕРВИННИЙ КЛЮЧЩоб вставити значення з поля "Умова" таблиці "Автомобілі" в нову таблицю CarCondition, введіть на вкладці об'єкта в режимі SQL такі запити SQL:
INSERT INTO CarCondition SELECT DISTINCT Condition FROM Cars;Примітка.
Інструкція SQL на цьому кроці – це запит на додавання. На відміну від запиту на визначення даних, запит на додавання закінчується крапкою з комою.
На вкладці Конструктор у групі Результати натисніть кнопку Запуск.
Створення зв'язку за допомогою обмеження
Щоб будь-яке нове значення, вставлене в поле «Умова» таблиці «Автомобілі», збігалося зі значенням поля «Умова» таблиці «Автомобіль», можна створити зв'язок між CarCondition і «Автомобілі» за допомогою наведеної нижче процедури.
- На вкладці Створити в групі Макроси та код натисніть кнопку Конструктор запитів.
- На вкладці " Конструктор " у групі " Тип запиту " натисніть кнопку "Визначення даних".
Бланк приховано, і відображається вкладка об'єкта в режимі SQL. - Введіть таку інструкцію SQL:
ALTER TABLE Автомобілі ALTER COLUMN Умова ОБМЕЖЕННЯ ТЕКСТУ FKeyCondition ПОСИЛАННЯ 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}]}
Розгляньмо ще один приклад, у якому використовується таблиця "Cars". Припустімо, вам потрібно переконатися, що жодні записи в таблиці "Автомобілі" не мають однакового набору значень "Назва", "Рік", "Умова" та "Ціна". Ви можете створити обмеження UNIQUE, яке застосовуватиметься до цих полів, виконавши наведену нижче процедуру.
- На вкладці Створити в групі Макроси та код натисніть кнопку Конструктор запитів.
- На вкладці " Конструктор " у групі " Тип запиту " натисніть кнопку "Визначення даних".
Бланк приховано, і відображається вкладка об'єкта в режимі SQL. - Введіть таку інструкцію SQL:
ALTER TABLE Автомобілі ADD CONSTRAINT NoDupes UNIQUE (назва, рік, стан, ціна) - На вкладці Конструктор у групі Результати натисніть кнопку Запуск.