Database

[DB] 제약조건 수정 ( primary key 추가/삭제/수정, foriegn key 추가/삭제/수정)

grove1212 2025. 2. 4. 15:02

foreign key를 수정/삭제하기 위해선 이름을 알아야 한다. 이름을 알아내는 sql 문은 다음과 같다.

1. 외래키

 

외래키 이름 검색

select*from information_schema.table_constraints where table_name='테이블명';

 

foreign key 삭제

ALTER TABLE '테이블명' DROP FOREIGN KEY '제약조건명';

 

foreign key 추가

ALTER TABLE '테이블명' ADD CONSTRAINT '제약조건명'
FOREIGN KEY ('컬럼명') REFERENCES '참조할 테이블명'('참조할 컬럼명')
[ON DELETE SET NULL ON UPDATE CASCADE];

 

 

2. 기본키

primary key 삭제

ALTER TABLE '테이블명' DROP PRIMARY KEY;

 

primary key 재설정

ALTER TABLE '테이블명' MODIFY '기본키로 삼을 컬럼명' INT [AUTO_INCREMENT] PRIMARY KEY;

3. 예제

-- 1단계 : create table
-- (1) students table 생성
CREATE TABLE students(
	student_id INT PRIMARY KEY,
	NAME VARCHAR(30),
	class VARCHAR(30)
);

-- (2) grades table 생성
CREATE or replace TABLE grades(
	grade_id INT auto_increment PRIMARY KEY,
	student_id INT,
	SUBJECT VARCHAR(30),
	grade CHAR(10),
	FOREIGN KEY(student_id) REFERENCES students(student_id)
	ON DELETE SET NULL ON UPDATE CASCADE
);

-- 추가 : 스키마 수정
-- (1) 참조되고 있는 부분의 foreign key 삭제
-- 외래키 이름 확인
SELECT * FROM information_schema.TABLE_CONSTRAINTS WHERE TABLE_NAME = 'grades';

ALTER TABLE grades DROP FOREIGN KEY grades_ibfk_1; 

-- (2) 참조하는 부분의 primary key 삭제
ALTER TABLE students DROP PRIMARY KEY;

-- (3) primary key 재설정
ALTER TABLE students MODIFY student_id INT AUTO_INCREMENT PRIMARY KEY;

-- (4) foreign key 다시 추가
ALTER TABLE grades ADD CONSTRAINT grades_fk_student
FOREIGN KEY (student_id) REFERENCES students(student_id)
ON DELETE SET NULL ON UPDATE CASCADE;

'Database' 카테고리의 다른 글

[DB] SET OPERATORS (MariaDB)  (0) 2025.02.06
[Mariadb] FULL OUTER JOIN  (0) 2025.02.06
[DB] ORDER BY 구문 활용  (0) 2025.02.04
[DB] SELECT 구문 활용  (0) 2025.02.04
[DB] MaridDB 문법 - 간략하게  (0) 2025.01.24