주키 수정하는 건 안 된다...
기존에 있던 주키(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대신 변경하려는 컬럼으로 변경 후 사용) |
근데 난 이 id가 외래키로도 사용되었기 때문에 오류가 난다.
검색을 해보니, 외래키를 함부로 만지면 손상이 갈 수도 있다고 한다.
그래서 phpMyAdmin으로 들어가, 외래키 점검 사용을 잠시 체크하지 않고 원하는 명령어를 실행했다.
잘 삭제되었음을 확인할 수 있다.
▷ 주키 사이즈 변경하는 방법
여기서 잠깐. id type 이 100에서 11이 됐다. >alter table products drop primary key, change products_id int(111111111111111) not null; |
주키의 데이터타입을 바꾸는 건 drop하고 해야 한다...
▷ 주키 drop하기 |
에러가 나면 외래키 때문이니,
phpMyAdmin에서 위에 언급한 것처럼 외래키점검사용을 잠시 언체킹하고 하도록 한다.
▷ 주키 생성하기 |
근데 난 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. 그 다음 뒷처리를 멈춰야겠다!
'mySQL' 카테고리의 다른 글
ubuntu ec2 reboot... (0) | 2021.01.18 |
---|---|
[mySQL][42000][1055]에러 sql_mode=only_full_group_by (0) | 2021.01.17 |
[mySQL]Auto_increment 초기화 (0) | 2020.11.30 |
[mySQL]ERROR 1091 (42000): Can't DROP 'products_ibfk_1'; check that column/key exists (0) | 2020.11.27 |
[mySQL]컬럼 추가삭제, 외래키 지정/삭제, 제약조건확인 (0) | 2020.11.26 |