2012-03-01 4 views
3

테이블 세트를 가진 mysql 데이터베이스가있다. 하나의 테이블은 기본 키와 단일 외래 키로 복합 키를 가지고있다. 다음은 테이블 정의입니다.mysql에서 외래 키 제약을 가진 테이블 기본 키 변경하기

CREATE TABLE IF NOT EXISTS `ohrm_emp_education` (
    `emp_number` int(11) NOT NULL, 
    `education_id` int(11) NOT NULL, 
    `institute` varchar(100) DEFAULT NULL, 
    `major` varchar(100) DEFAULT NULL, 
    `year` decimal(4,0) DEFAULT NULL, 
    `score` varchar(25) DEFAULT NULL, 
    `start_date` date DEFAULT NULL, 
    `end_date` date DEFAULT NULL, 
    PRIMARY KEY (`emp_number`,`education_id`), 
    KEY `education_id` (`education_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 



ALTER TABLE `ohrm_emp_education` 
ADD CONSTRAINT `ohrm_emp_education_ibfk_1` FOREIGN KEY (`emp_number`) REFERENCES `hs_hr_employee` (`emp_number`) ON DELETE CASCADE, 
ADD CONSTRAINT `ohrm_emp_education_ibfk_2` FOREIGN KEY (`education_id`) REFERENCES `ohrm_education` (`id`) ON DELETE CASCADE; 

하지만 이제 기존 테이블에 새 열을 추가하고이를 기본 키로 지정해야합니다. 나는 다음과 같은 쿼리를 시도했다.

ALTER TABLE ohrm_emp_education 
ADD column id int not null AUTO_INCREMENT, 
DROP PRIMARY KEY, 
ADD primary key (id) 

하지만 내가 인터넷에서 찾을 수 있지만, 제대로 해결되지 수있는 몇 가지 답변을 시도 오류

#1025 - Error on rename of './test/#sql-4f6_19b' to './test/ohrm_emp_education' (errno: 150) 

을 다음 보여줍니다. 누군가가 나를 도울 수 있습니까? 미리 감사드립니다.

ALTER TABLE `ohrm_emp_education` DROP FOREIGN KEY `emp_number`; 
ALTER TABLE `ohrm_emp_education` DROP FOREIGN KEY `education_id`; 

을 그리고 테이블을 변경 :

답변

3

은 다음과 같이 먼저 뭔가를 외래 키를 삭제하려고합니다.

+0

그것은 저와 함께했습니다. 도와 주셔서 감사합니다. – Thilanka

1

테이블이 InnoDB 엔진을 사용하는 경우 일반적으로이 오류가 발생합니다. 이 경우 외래 키를 삭제 한 다음 alter table을 수행하고 열을 삭제해야합니다.

+0

감사합니다. 그것은 나를 위해 작동합니다. – Thilanka

1

외래 키 제약 조건을 삭제/비활성화합니다. 기본 키 삭제, 새 PK 추가, fk 사용/추가.

3

SQL Server Management Studio를 사용하는 경우.
그런 다음 테이블을 마우스 오른쪽 단추로 클릭하고 디자인을 클릭하십시오. 그런 다음 복합 키 이 포함 된 행을 마우스 오른쪽 버튼으로 클릭하고 기본 키 제거 을 클릭 한 다음 새 열 을 추가하고 해당 열 에 데이터를 삽입하고 열에 빈 데이터가 없는지 확인하십시오.

그런 다음 다시 필요한 열을보기 오른쪽 클릭을 설계하고 작업이 완료

기본 키로 설정을 클릭로 이동합니다!

+0

빠른 답장을 보내 주셔서 감사합니다. 나는 우리가 순수한 SQL 명령을 사용하여 그것을 할 수있는 방법을 찾고있다. 외래 키를 먼저 놓아서 대답을 얻을 수있었습니다. – Thilanka