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 |