본문 바로가기

mySQL

[Database, mySQL]주키수정/주키변경

반응형

주키 수정하는 건 안 된다...

기존에 있던 주키(Primary Key, PK)를 변경하려면 drop하고 add하거나,

주키와 auto_increment 속성을 삭제하고 변경해야 한다.

난 product_id를 수정하려고 한다.

drop, add하기 앞서 auto_increment를 삭제해야 drop할 수 있다.

ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key

이렇게 auto_increment 속성을 삭제하지 않고 주키를 삭제하면 오류가 나타난다.

auto_increment 속성 삭제(products 대신 사용 테이블, product_id대신 변경하려는 컬럼으로 변경 후 사용)
alter table products modify product_id int not null;

근데 난 이 id가 외래키로도 사용되었기 때문에 오류가 난다.

 

검색을 해보니, 외래키를 함부로 만지면 손상이 갈 수도 있다고 한다.

그래서 phpMyAdmin으로 들어가, 외래키 점검 사용을 잠시 체크하지 않고 원하는 명령어를 실행했다.

잘 삭제되었음을 확인할 수 있다.

 

 주키 사이즈 변경하는 방법

여기서 잠깐.
id type 이 100에서 11이 됐다.

>alter table products drop primary key, change products_id int(111111111111111) not null;
이걸 실행해서인데, 111111111111111111~이 되긴 커녕 100을 넘으면 안 돼서 11로 변경된 것을 확인할 수 있다.
더 작은 범위로 수정할 땐 괜찮지만, 큰 범위로 수정할 땐 밑에 드롭하고 생성하는 방법밖에 없다.

주키의 데이터타입을 바꾸는 건 drop하고 해야 한다...

 

▷ 주키 drop하기
ALTER TABLE [테이블명] DROP PRIMARY KEY;

ERROR 1553 (HY000): Cannot drop index 'PRIMARY': needed in a foreign key constraint

에러가 나면 외래키 때문이니,

phpMyAdmin에서 위에 언급한 것처럼 외래키점검사용을 잠시 언체킹하고 하도록 한다.

 

▷ 주키 생성하기
ALTER TABLE [테이블명] ADD PRIMARY KEY (COL1, COL2, COL3 ...)

▷ 주키 삭제하기
alter table [테이블명] drop primary key;

 

근데 난 drop도 안 됐다.

이미 외래키로 사용되어서 주키도 삭제가 안 되는 것이다

 

외래키로 사용된 경우, 제약조건을 삭제해야 한다.

일단 제약 조건을 확인해야 한다.

제약조건 확인하는 명령어는 mySQL, SQL 등마다 다른 듯 하다.(내 경우는 mySQL)

 제약조건 확인하기

select * from information_schema.table_constraints;


제약조건 다 확인하면 너무 많으니까 where을 통해 원하는 테이블을 확인하자.

제약조건이 PRIMARY로 되어있다.

이제 제약조건을 삭제하자.

 제약조건 삭제하기

ALTER TABLE [테이블명] DROP CONSTRAINT [제약조건이름] [대상 컬럼];

ERROR 1064 (42000): You have an error in your SQL syntax; : 에러가 나온다면 외래키 제약조건...

ALTER TABLE [테이블명] DROP FOREIGN KEY [제약조건이름] [대상 컬럼];


당연히 error가 나온다...

위에 foreign key인 명령어를 사용한다.

이런식으로 다른 테이블에서 참조하는, 삭제하고자 하는 id를 계속 삭제해주었다...

 

드디어 주키가 drop되었다.....................

사이즈/데이터타입 변경하기

alter table [테이블명] modify [컬럼명] [원하는 사이즈/데이터 타입] (not null);


잘 변경된 것을 확인할 수 있다.

 

 컬럼명 바꾸기

alter table [테이블명] rename column [기존 컬럼 이름] to [바꾸려는 컬럼 이름];


나는 aaa로 바꿨는데 잘 바뀜을 확인할 수 있다.

 

 

이제 뒷수습을 하기 위해 다 수정해주어야 한다,,,,

 

1. 주키 설정을 다시 해준다...

alter table [테이블명] modify column [컬럼명] [컬럼 데이터타입] primary key;

2. 그 다음 뒷처리를 멈춰야겠다!

반응형