Можете да създавате и модифицирате таблици, ограничения, индекси и релации в 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 команда:
CREATE TABLE Cars (име 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 Cars ADD COLUMN Condition 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 кара индекса да изисква да се въведе стойност за индексираното поле – т.е. не са позволени стойности Null.
Да предположим, че имате таблица с име "Коли" с полета, които съхраняват името, годината, цената и състоянието на употребяваните автомобили, които обмисляте за покупка. Да предположим също, че таблицата е станала голяма и че често включвате полето за година в заявките. Можете да създадете индекс в полето Година, за да помогнете на заявките си да връщат резултатите по-бързо, като използвате следната процедура:
-
В раздела Създаване , в групата Макроси & код щракнете върху Проектиране на заявка.
-
В раздела Проектиране , в групата Тип на заявката щракнете върху Дефиниция на данни.
Мрежата за проектиране е скрита и се показва разделът за обекти в SQL изглед.
-
Въведете следната SQL команда:
CREATE INDEX YearIndex ON Cars (Година)
-
В раздела Проектиране, в групата Резултати щракнете върху Изпълни.
Създаване на ограничение или релация
Ограничението установява логическо условие, на което трябва да отговаря поле или комбинация от полета, когато се вмъкват стойности. Например ограничението 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 Cars ALTER COLUMN Условие TEXT CONSTRAINT УсловиеНе е задължително NOT NULL
-
В раздела Проектиране, в групата Резултати щракнете върху Изпълни.
Да предположим, че след известно време забелязвате, че има много подобни стойности в полето Условие, които трябва да са еднакви. Например някои от колите имат стойност "Условие" за лоши, а други имат стойност "лошо".
Забележка: Ако искате да следвате останалите процедури, добавете фалшиви данни към таблицата "Коли", която създадохте в предишните стъпки.
След като изчистите стойностите, така че да са по-съгласувани, можете да създадете таблица с име CarCondition с едно поле, наречено "Условие", която съдържа всички стойности, които искате да използвате за състоянието на автомобилите:
-
В раздела Създаване , в групата Макроси & код щракнете върху Проектиране на заявка.
-
В раздела Проектиране , в групата Тип на заявката щракнете върху Дефиниция на данни.
Мрежата за проектиране е скрита и се показва разделът за обекти в SQL изглед.
-
Въведете следната SQL команда:
CARCondition CREATE TABLE (Условие TEXT(10))
-
В раздела Проектиране, в групата Резултати щракнете върху Изпълни.
-
Създайте първичен ключ за таблицата, като използвате командата ALTER TABLE:
ALTER TABLE CarCondition ALTER COLUMN Condition TEXT CONSTRAINT CarConditionPK ПЪРВИЧЕН КЛЮЧ
-
За да вмъкнете стойностите от полето Условие на таблицата Cars в новата таблица CarCondition, въведете следната SQL команда в раздела за обекти в SQL изглед:
INSERT INTO CarCondition SELECT DISTINCT Condition FROM Cars;
Забележка: SQL командата в тази стъпка е заявка за добавяне. За разлика от заявката за дефиниране на данни, заявката за добавяне завършва с точка и запетая.
-
В раздела Проектиране, в групата Резултати щракнете върху Изпълни.
Създаване на релация с помощта на ограничение
За да изискате всяка нова стойност, вмъкната в полето Условие на таблицата "Коли", да съответства на стойност от полето Условие в таблицата CarCondition, можете след това да създадете релация между CarCondition и Cars в полето с име "Условие", като използвате следната процедура:
-
В раздела Създаване , в групата Макроси & код щракнете върху Проектиране на заявка.
-
В раздела Проектиране , в групата Тип на заявката щракнете върху Дефиниция на данни.
Мрежата за проектиране е скрита и се показва разделът за обекти в SQL изглед.
-
Въведете следната SQL команда:
ALTER TABLE Cars ALTER COLUMN Condition TEXT CONSTRAINT FKeyCondition REFERENCES CarCondition (условие)
-
В раздела Проектиране, в групата Резултати щракнете върху Изпълни.
Ограничения на няколко полета
Клауза 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, което се отнася за тези полета, с помощта на следната процедура:
-
В раздела Създаване , в групата Макроси & код щракнете върху Проектиране на заявка.
-
В раздела Проектиране , в групата Тип на заявката щракнете върху Дефиниция на данни.
Мрежата за проектиране е скрита и се показва разделът за обекти в SQL изглед.
-
Въведете следната SQL команда:
ALTER TABLE Cars ADD CONSTRAINT NoDupes UNIQUE (име, година, условие, цена)
-
В раздела Проектиране, в групата Резултати щракнете върху Изпълни.