ALTER TABLE - SQL 명령

프로그래밍 방식으로 테이블의 구조를 수정합니다.

문법

  
ALTER TABLE TableName1  
   ADD | ALTER [COLUMN] FieldName1  
      FieldType [(nFieldWidth [, nPrecision])]  
      [NULL | NOT NULL]  
      [CHECK lExpression1 [ERROR cMessageText1]]  
      [DEFAULT eExpression1]  
      [PRIMARY KEY | UNIQUE]  
      [REFERENCES TableName2 [TAG TagName1]]  
      [NOCPTRANS]  
 - Or -  
ALTER TABLE TableName1  
   ALTER [COLUMN] FieldName2  
      [NULL | NOT NULL]  
      [SET DEFAULT eExpression2]  
      [SET CHECK lExpression2 [ERROR cMessageText2]]  
      [DROP DEFAULT]  
      [DROP CHECK]  
 - Or -  
ALTER TABLE TableName1  
   [DROP [COLUMN] FieldName3]  
   [SET CHECK lExpression3 [ERROR cMessageText3]]  
   [DROP CHECK]  
   [ADD PRIMARY KEY eExpression3 TAG TagName2]  
   [DROP PRIMARY KEY]  
   [ADD UNIQUE eExpression4 [TAG TagName3]]  
   [DROP UNIQUE TAG TagName4]  
   [ADD FOREIGN KEY [eExpression5] TAG TagName4  
      REFERENCES TableName2 [TAG TagName5]]  
   [DROP FOREIGN KEY TAG TagName6 [SAVE]]  
   [RENAME COLUMN FieldName4 TO FieldName5]  
   [NOVALIDATE]  

주장들

TableName1
구조가 수정된 테이블의 이름을 지정합니다.

ADD [COLUMN] FieldName1
추가할 필드의 이름을 지정합니다.

ALTER [COLUMN] FieldName1
수정할 기존 필드의 이름을 지정합니다.

FieldType [( nFieldWidth [, nPrecision]])
새 필드나 수정된 필드의 필드 형식, 필드 너비 및 필드 전체 자릿수(소수 자릿수)를 지정합니다.

FieldType 은 필드의 데이터 형식을 나타내는 단일 문자입니다. 일부 필드 데이터 형식에서는 nFieldWidth 또는 nPrecision 또는 둘 다를 지정해야 합니다.

nFieldWidthnPrecision 은 D, G, I, L, M, P, T 및 Y 형식에 대해 무시됩니다. 기본적으로 nPrecision 이 B, F 또는 N 형식에 포함되지 않은 경우 nPrecision 은 0(소수 자릿수 없음)입니다.

NULL | NOT NULL
필드에서 null 값을 허용하거나 차단합니다.

NULL 및 NOT NULL을 생략하면 SET NULL의 현재 설정에 따라 필드에 null 값이 허용되는지 여부가 결정됩니다. 그러나 NULL 및 NOT NULL을 생략하고 PRIMARY KEY 또는 UNIQUE 절을 포함하는 경우 SET NULL의 현재 설정이 무시되고 필드는 기본적으로 NULL이 아닙니다.

CHECK lExpression1
필드에 대한 유효성 검사 규칙을 지정합니다. lExpression1 은 논리 식으로 평가되어야 하며 사용자 정의 함수 또는 저장 프로시저일 수 있습니다. 빈 레코드가 추가될 때마다 유효성 검사 규칙이 선택됩니다. 유효성 검사 규칙이 추가된 레코드의 빈 필드 값을 허용하지 않는 경우 오류가 생성됩니다.

ERROR cMessageText1
필드 유효성 검사 규칙에서 오류를 생성할 때 표시되는 오류 메시지를 지정합니다.

DEFAULT eExpression1
필드의 기본값을 지정합니다. eExpression1의 데이터 형식은 필드의 데이터 형식과 동일해야 합니다.

기본 키
기본 인덱스 태그를 만듭니다. 인덱스 태그의 이름은 필드와 같습니다.

독특한
필드와 이름이 같은 후보 인덱스 태그를 만듭니다.

비고

ALTER TABLE 또는 CREATE TABLE에서 ANSI 호환성을 위해 제공되는 UNIQUE 옵션을 포함하여 만든 후보 인덱스는 INDEX 명령의 UNIQUE 옵션을 사용하여 만든 인덱스와 다릅니다. INDEX 명령에서 UNIQUE를 사용하여 만든 인덱스는 중복 인덱스 키를 허용합니다. 후보 인덱스는 중복 인덱스 키를 허용하지 않습니다.

기본 또는 후보 인덱스로 사용되는 필드에는 Null 값과 중복 레코드가 허용되지 않습니다.

ADD COLUMN을 사용하여 새 필드를 만드는 경우 Null 값을 지원하는 필드에 대한 기본 또는 후보 인덱스를 만드는 경우 Visual FoxPro에서 오류를 생성하지 않습니다. 그러나 기본 또는 후보 인덱스로 사용되는 필드에 null 또는 중복 값을 입력하려고 하면 Visual FoxPro에서 오류가 발생합니다.

기존 필드를 수정하고 기본 또는 후보 인덱스 식이 테이블의 필드로 구성된 경우 Visual FoxPro는 필드가 null 값 또는 중복 레코드를 포함하는지 여부를 확인합니다. 이 경우 Visual FoxPro는 오류를 생성하고 테이블은 변경되지 않습니다.

REFERENCES TableName2 TAG TagName1
영구 관계가 설정된 부모 테이블을 지정합니다. TAG TagName1 은 관계의 기반이 되는 부모 테이블의 인덱스 태그를 지정합니다. 인덱스 태그 이름은 최대 10자를 포함할 수 있습니다.

NOCPTRANS
문자 및 메모 필드의 다른 코드 페이지로의 번역을 방지합니다. 테이블이 다른 코드 페이지로 변환되는 경우 NOCPTRANS가 지정된 필드는 변환되지 않습니다. NOCPTRANS는 문자 및 메모 필드에만 지정할 수 있습니다.

다음 예제에서는 두 개의 문자 필드와 두 개의 메모 필드를 포함하는 mytable이라는 테이블을 만듭니다. 두 번째 문자 필드인 char2와 두 번째 메모 필드인 memo2에는 번역을 방지하기 위한 NOCPTRANS가 포함됩니다.

CREATE TABLE mytable (char1 C(10), char2 C(10) NOCPTRANS,;  
   memo1 M, memo2 M NOCPTRANS)  

ALTER [COLUMN] FieldName2
수정할 기존 필드의 이름을 지정합니다.

SET DEFAULT eExpression2
기존 필드의 새 기본값을 지정합니다. eExpression2의 데이터 형식은 필드의 데이터 형식과 동일해야 합니다.

SET CHECK lExpression2
기존 필드에 대한 새 유효성 검사 규칙을 지정합니다. lExpression2 는 논리 식으로 평가되어야 하며 사용자 정의 함수 또는 저장 프로시저일 수 있습니다.

ERROR cMessageText2
필드 유효성 검사 규칙에서 오류를 생성할 때 표시되는 오류 메시지를 지정합니다. 찾아보기 또는 편집 창 내에서 데이터가 변경된 경우에만 메시지가 표시됩니다.

DROP DEFAULT
기존 필드의 기본값을 제거합니다.

DROP CHECK
기존 필드에 대한 유효성 검사 규칙을 제거합니다.

DROP [COLUMN] FieldName3
테이블에서 제거할 필드를 지정합니다. 테이블에서 필드를 제거하면 필드의 기본값 설정 및 필드 유효성 검사 규칙도 제거됩니다.

인덱스 키 또는 트리거 식이 필드를 참조하는 경우 필드가 제거되면 식이 유효하지 않습니다. 이 경우 필드를 제거할 때 오류가 생성되지 않지만 잘못된 인덱스 키 또는 트리거 식은 런타임에 오류를 생성합니다.

SET CHECK lExpression3
테이블 유효성 검사 규칙을 지정합니다. lExpression3 은 논리 식으로 평가되어야 하며 사용자 정의 함수 또는 저장 프로시저일 수 있습니다.

ERROR cMessageText3
테이블 유효성 검사 규칙에서 오류를 생성할 때 표시되는 오류 메시지를 지정합니다. 찾아보기 또는 편집 창 내에서 데이터가 변경된 경우에만 메시지가 표시됩니다.

DROP CHECK
테이블의 유효성 검사 규칙을 제거합니다.

ADD PRIMARY KEY eExpression3TAG TagName2
테이블에 기본 인덱스 추가 eExpression3 은 기본 인덱스 키 식을 지정하고 TagName2 는 기본 인덱스 태그의 이름을 지정합니다. 인덱스 태그 이름은 최대 10자를 포함할 수 있습니다. TAG TagName2 를 생략하고 eExpression3 이 단일 필드인 경우 기본 인덱스 태그는 eExpression3에 지정된 필드와 이름이 같습니다.

기본 키 삭제
기본 인덱스 및 해당 인덱스 태그를 제거합니다. 테이블에는 기본 키가 하나만 있을 수 있으므로 기본 키의 이름을 지정할 필요는 없습니다. 기본 인덱스를 제거하면 기본 키를 기반으로 하는 모든 영구 관계도 삭제됩니다.

ADD UNIQUE eExpression4[TAG TagName3]
테이블에 후보 인덱스 추가 eExpression4 는 후보 인덱스 키 식을 지정하고 TagName3 은 후보 인덱스 태그의 이름을 지정합니다. 인덱스 태그 이름은 최대 10자를 포함할 수 있습니다. TAG TagName3 을 생략하고 eExpression4 가 단일 필드인 경우 후보 인덱스 태그의 이름은 eExpression4에 지정된 필드와 같습니다.

DROP UNIQUE TAG TagName4
후보 인덱스 및 해당 인덱스 태그를 제거합니다. 테이블에 여러 후보 키가 있을 수 있으므로 후보 인덱스 태그의 이름을 지정해야 합니다.

ADD FOREIGN KEY [ eExpression5]TAG TagName4
테이블에 외형(비정상) 인덱스가 추가됩니다. eExpression5 는 외래 인덱스 키 식을 지정하고 TagName4 는 외래 인덱스 태그의 이름을 지정합니다. 인덱스 태그 이름은 최대 10자를 포함할 수 있습니다.

REFERENCES TableName2[TAG TagName5]
영구 관계가 설정된 부모 테이블을 지정합니다. 부모 테이블에 대한 기존 인덱스 태그를 기반으로 관계를 설정하려면 TAG TagName5 를 포함합니다. 인덱스 태그 이름은 최대 10자를 포함할 수 있습니다. TAG TagName5를 생략하면 부모 테이블의 기본 인덱스 태그를 사용하여 관계가 설정됩니다.

DROP FOREIGN KEY TAG TagName6[SAVE]
인덱스 태그가 TagName6인 외래 키를 삭제합니다. SAVE를 생략하면 구조 인덱스에서 인덱스 태그가 삭제됩니다. 구조적 인덱스에서 인덱스 태그가 삭제되지 않도록 SAVE를 포함합니다.

RENAME COLUMN FieldName4TO FieldName5
테이블의 필드 이름을 변경할 수 있습니다. FieldName4 는 이름이 바뀐 필드의 이름을 지정합니다. FieldName5 는 필드의 새 이름을 지정합니다.

주의

인덱스 식, 필드 및 테이블 유효성 검사 규칙, 명령 및 함수가 원래 필드 이름을 참조할 수 있으므로 테이블 필드 이름을 바꾸는 경우 주의해야 합니다.

NOVALIDATE
Visual FoxPro에서 테이블 구조에 대한 변경을 허용하도록 지정합니다. 이러한 변경 내용이 테이블의 데이터 무결성을 위반할 수 있습니다. 기본적으로 Visual FoxPro는 ALTER TABLE이 테이블의 데이터 무결성을 위반하는 변경을 수행하지 못하도록 합니다. 이 기본 동작을 재정의하려면 NOVALIDATE를 포함합니다.

비고

ALTER TABLE을 사용하여 데이터베이스에 추가되지 않은 테이블의 구조를 수정할 수 있습니다. 그러나 Free 테이블을 수정할 때 DEFAULT, FOREIGN KEY, PRIMARY KEY, REFERENCES 또는 SET 절을 포함하면 Visual FoxPro에서 오류가 발생합니다.

ALTER TABLE은 새 테이블 헤더를 만들고 테이블 헤더에 레코드를 추가하여 테이블을 다시 작성할 수 있습니다. 예를 들어 필드의 형식이나 너비를 변경하면 테이블을 다시 작성할 수 있습니다.

테이블을 다시 작성하면 형식 또는 너비가 변경된 모든 필드에 대해 필드 유효성 검사 규칙이 실행됩니다. 표에 있는 필드의 형식이나 너비를 변경하면 테이블 규칙이 실행됩니다.

레코드가 있는 테이블에 대한 필드 또는 테이블 유효성 검사 규칙을 수정하는 경우 Visual FoxPro는 기존 데이터에 대해 새 필드 또는 테이블 유효성 검사 규칙을 테스트하고 필드 또는 테이블 유효성 검사 규칙의 첫 번째 발생 또는 트리거 위반에 대한 경고를 실행합니다.

수정하는 테이블이 데이터베이스에 있는 경우 ALTER TABLE - SQL은 데이터베이스를 단독으로 사용해야 합니다. 단독 용도로 데이터베이스를 열려면 OPEN DATABASE에 EXCLUSIVE를 포함합니다.

또한 참조하십시오

CREATE TABLE - SQL 명령
INDEX 명령