SQL 보기에서 데이터 정의 쿼리를 작성하여 Access에서 테이블, 제약 조건, 인덱스 및 관계를 만들고 수정할 수 있습니다. 이 문서에서는 데이터 정의 쿼리와 이를 사용하여 테이블, 제약 조건, 인덱스 및 관계를 만드는 방법을 설명합니다. 이 문서는 데이터 정의 쿼리를 사용할 시기를 결정하는 데도 도움이 될 수 있습니다.
이 문서의 내용
개요
다른 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(Name TEXT(30), Year TEXT(4), Price CURRENCY)
-
디자인 탭의 결과 그룹에서 실행을 클릭합니다.
표 수정
테이블을 수정하려면 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 값은 허용되지 않습니다.
구매를 고려 중인 중고차의 이름, 연도, 가격 및 조건을 저장하는 필드가 있는 Cars라는 테이블이 있다고 가정해 보겠습니다. 또한 테이블이 커지고 쿼리에 연도 필드를 자주 포함한다고 가정합니다. 다음 절차를 사용하여 쿼리가 결과를 더 빠르게 반환할 수 있도록 연도 필드에 인덱스를 만들 수 있습니다.
-
만들기 탭의 매크로 & 코드 그룹에서 쿼리 디자인을 클릭합니다.
-
디자인 탭의 쿼리 형식 그룹에서 데이터 정의를 클릭합니다.
디자인 그리드가 숨겨져 있고 SQL 보기 개체 탭이 표시됩니다.
-
다음 SQL 문을 입력합니다.
CREATE INDEX YearIndex ON Cars(Year)
-
디자인 탭의 결과 그룹에서 실행을 클릭합니다.
제약 조건 또는 관계 만들기
제약 조건은 값을 삽입할 때 필드 또는 필드 조합이 충족해야 하는 논리적 조건을 설정합니다. 예를 들어 UNIQUE 제약 조건은 제한된 필드가 필드에 대한 기존 값을 복제하는 값을 수락하지 못하도록 합니다.
관계는 필드의 값을 참조하거나 다른 테이블의 필드 조합을 참조하여 제한된 필드에 값을 삽입할 수 있는지 또는 필드의 조합에 삽입할 수 있는지를 결정하는 제약 조건 유형입니다. 제약 조건이 관계임을 나타내기 위해 특수 키워드를 사용하지 않습니다.
제약 조건을 만들려면 CREATE TABLE 또는 ALTER TABLE 명령에서 CONSTRAINT 절을 사용합니다. 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}]}
구매를 고려 중인 중고차의 이름, 연도, 가격 및 조건을 저장하는 필드가 있는 Cars라는 테이블이 있다고 가정해 보겠습니다. 또한 자동차 상태에 대한 값을 입력하는 것을 자주 잊어버리고 항상 이 정보를 기록하려고 합니다. 다음 절차를 사용하여 조건 필드에 필드를 비워 두지 않도록 하는 제약 조건을 만들 수 있습니다.
-
만들기 탭의 매크로 & 코드 그룹에서 쿼리 디자인을 클릭합니다.
-
디자인 탭의 쿼리 형식 그룹에서 데이터 정의를 클릭합니다.
디자인 그리드가 숨겨져 있고 SQL 보기 개체 탭이 표시됩니다.
-
다음 SQL 문을 입력합니다.
ALTER TABLE Cars ALTER COLUMN Condition TEXT CONSTRAINT ConditionRequired NOT NULL
-
디자인 탭의 결과 그룹에서 실행을 클릭합니다.
잠시 후 조건 필드에 동일한 값이 많이 있음을 알 수 있다고 가정합니다. 예를 들어 일부 자동차는 조건 값이 불량 하고 다른 차량의 값은 불량입니다.
참고: 나머지 절차를 수행하려면 이전 단계에서 만든 Cars 테이블에 가짜 데이터를 추가합니다.
값이 더 일관되도록 정리한 후 CarCondition이라는 테이블을 만들 수 있습니다. 하나의 필드(조건)에는 자동차 조건에 사용할 모든 값이 들어 있습니다.
-
만들기 탭의 매크로 & 코드 그룹에서 쿼리 디자인을 클릭합니다.
-
디자인 탭의 쿼리 형식 그룹에서 데이터 정의를 클릭합니다.
디자인 그리드가 숨겨져 있고 SQL 보기 개체 탭이 표시됩니다.
-
다음 SQL 문을 입력합니다.
CREATE TABLE CarCondition(Condition TEXT(10))
-
디자인 탭의 결과 그룹에서 실행을 클릭합니다.
-
ALTER TABLE 문을 사용하여 테이블에 대한 기본 키를 만듭니다.
ALTER TABLE CarCondition ALTER COLUMN Condition TEXT CONSTRAINT CarConditionPK PRIMARY KEY
-
Cars 테이블의 조건 필드에서 새 CarCondition 테이블에 값을 삽입하려면 SQL 보기 개체 탭에 다음 SQL을 입력합니다.
INSERT INTO CarCondition SELECT DISTINCT Condition FROM Cars;
참고: 이 단계의 SQL 문은 쿼리 추가 입니다. 데이터 정의 쿼리와 달리 추가 쿼리는 세미콜론으로 끝납니다.
-
디자인 탭의 결과 그룹에서 실행을 클릭합니다.
제약 조건을 사용하여 관계 만들기
Cars 테이블의 조건 필드에 삽입된 새 값이 CarCondition 테이블의 조건 필드 값과 일치하도록 하려면 다음 절차를 사용하여 Condition 필드의 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}]}
Cars 테이블을 사용하는 또 다른 예제를 생각해 보세요. Cars 테이블의 두 레코드가 Name, Year, Condition 및 Price와 동일한 값 집합을 갖지 않도록 하려는 경우를 가정해 보겠습니다. 다음 절차를 사용하여 이러한 필드에 적용되는 UNIQUE 제약 조건을 만들 수 있습니다.
-
만들기 탭의 매크로 & 코드 그룹에서 쿼리 디자인을 클릭합니다.
-
디자인 탭의 쿼리 형식 그룹에서 데이터 정의를 클릭합니다.
디자인 그리드가 숨겨져 있고 SQL 보기 개체 탭이 표시됩니다.
-
다음 SQL 문을 입력합니다.
ALTER TABLE Cars ADD CONSTRAINT NoDupes UNIQUE(name, year, condition, price)
-
디자인 탭의 결과 그룹에서 실행을 클릭합니다.