MySQL의 기존 열에 null이 아닌 제약 조건을 추가하는 방법


164

다음 열 이름을 가진 "Person"이라는 테이블 이름이 있습니다.

P_Id(int),
LastName(varchar),
FirstName (varchar).

NOT NULL제약 을주는 것을 잊었습니다 P_Id.

이제 다음 쿼리를 사용하여 NOT NULL이라는 기존 열에 제약 조건을 추가했습니다 P_Id.

1. ALTER TABLE  Person MODIFY  (P_Id NOT  NULL);
2. ALTER TABLE Person ADD CONSTRAINT NOT  NULL NOT NULL (P_Id);

구문 오류가 발생합니다 ....

답변:


261

ALTER TABLE... MODIFY...쿼리를 사용 NOT NULL하여 기존 열 정의에 추가 하십시오. 예를 들면 다음과 같습니다.

ALTER TABLE Person MODIFY P_Id INT(11) NOT NULL;

주의 사항 : 쿼리를 사용할 때 전체 열 정의를 다시 지정해야 MODIFY합니다. 열에 예를 들어 DEFAULT값 또는 열 주석이 MODIFY있는 경우 데이터 유형 및과 함께 명령문 에서이를 지정해야 합니다 NOT NULL. 그렇지 않으면 손실됩니다. 이러한 실수를 방지하는 가장 안전한 방법은 SHOW CREATE TABLE YourTable쿼리 출력에서 열 정의를 복사 하고 NOT NULL제약 조건 을 포함하도록 수정 한 다음 쿼리에 붙여 넣는 것 ALTER TABLE... MODIFY...입니다.


4
당신이 쓰는 않은 이유 @Positive INT(11)만하지 INT? 의 효과는 무엇입니까 11?
수잔 듀 페론

2
11은 단지 예일 뿐이며 P_Id의 길이를 설정합니다. 변경하고 싶지 않더라도 다시 추가 해야하는지 확실하지 않습니다.
제라드

2
@Pacerier와 함께 change열 이름 수정
Javier P

1
@Victor MODIFY는 Oracle에서도 지원됩니다. 그리고 PostgreSQL은 CHANGE대신 ALTER [COLUMN]문을 제공 하지 않습니다 .
Mr. Deathless

1
자체 참고 사항 : 구조적 쿼리 언어는 표준 쿼리 언어가 아닙니다 ...
Dmitry

20

이것을 시도하면 변경과 수정의 차이점을 알 수 있습니다.

ALTER TABLE table_name CHANGE curr_column_name new_column_name new_column_datatype [constraints]

ALTER TABLE table_name MODIFY column_name new_column_datatype [constraints]
  • 을 사용하여 특정 열의 이름과 데이터 유형을 변경할 수 있습니다 CHANGE.
  • 을 사용하여 특정 열 데이터 유형을 수정할 수 있습니다 MODIFY. 이 명령문을 사용하여 열 이름을 변경할 수 없습니다.

희망, 나는 자세히 설명했다.


5
MODIFY 작업을 수행하여 변경했지만 역전이 불가능합니까?
Navrattan Yadav

1
이상하게도 null_heart_rate_count라는 열을 변경 / 수정하는 동안 오류 (MySQL 5.6, Workbench 6.3)가 발생했습니다. 오류는 # 1138입니다. 잘못된 NULL 값 사용. 대신 열을 삭제하고 추가해야했습니다.
William T. Mallard 17 년

@NavrattanYadav 나는 그가하지 역 이름 바꾸기를, 말을 의미 생각
shaahiin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.