본문 바로가기

코딩공부

[SQL] MYSQL 테이블 삭제, 수정 & 제약조건 추가, 삭제, 비활성화

✍️ Study Note

 

 

 


 

 

1. 테이블 삭제

  • DROP TABLE 테이블이름
  • FOREIGN KEY 제약조건의 기준테이블은 삭제 불가. (제약조건 or 외래키 테이블 선삭제 필요)

 

 

2. 테이블 수정

  • ALTER TABLE 테이블이름 '수정 조건'
  • '수정 조건' 종류 : ADD COLUMN, ADD CONSTRAINT, ADD INDEX, DROP CHECK, DROP PRIMARY KEY 등

 

 

(1) 열 추가

  • ALTER TABLE 테이블이름 ADD 열이름 
USE TABLEDB;
ALTER TABLE USERTBL
	ADD HOMEPAGE VARCHAR(30) -- 열 추가
		DEFAULT 'WWW.HANBIT.CO.KR' -- 디폴드값 추가
        NULL; -- NULL 허용

 

 

(2) 열 삭제

  • ALTER TABLE 테이블이름 DROP 열이름
  • 해당 열에 제약조건이 있을 경우, 제약조건 선삭제 필요
ALTER TABLE USERTBL
	DROP MOBILE1;

 

2-1. 행 삭제

  • DELETE FROM 테이블이름 WHERE 조건
DELETE FROM BUYTBL WHERE USERID = 'BBK';

 

 

(3) 열 수정 (열 이름 or 데이터형식 변경)

  • ALTER TABLE 테이블이름 CHAGE COLUMN 열이름
  • 해당 열에 제약조건이 있을 경우, 제약조건 선삭제 필요
ALTER TABLE USERTBL
	CHANGE COLUMN NAME UNAME VARCHAR(20) NULL;

 

3-1. 데이터 수정

  • UPDATE 테이블이름 SET 바꿀내용 WHERE 조건
UPDATE USERTBL SET BIRTHYEAR = 1971 WHERE USERID = 'JYP';

 

 

(4) 제약조건 추가, 삭제

  • ALTER TABLE 테이블이름 ADD CONSTRATIN 제약조건이름 [PRIMARY KEY, FOREIGN KEY, CHECK] 조건
  • ALTER TABLE 테이블이름 DROP [PRIMARY KEY, FOREIGN KEY, CHECK] 제약조건 이름
  • 제약조건 이름은 Navigator - Schemas 트리에서 확인할 수 있다.
-- 제약조건 추가
ALTER TABLE USERTBL
	ADD CONSTRAINT CK_BIRTHYEAR
    CHECK ((BIRTHYEAR >= 1900 AND BIRTHYEAR <=2023) AND (BIRTHYEAR IS NOT NULL));

-- 제약조건 삭제
ALTER TABLE USERTBL
		DROP CHECK CK_NAME;

 

 

4-1. 제약조건 활성화 / 비활성화

  • SET FOREIGN_KEY_CHECKS = 0 or 1
SET FOREIGN_KEY_CHECKS = 0; -- 제약조건 잠시 끄기
INSERT INTO BUYTBL VALUES (NULL, 'BBK', '모니터', '전자', 200, 5); -- 제약조건에 상관없이 데이터 입력
SET FOREIGN_KEY_CHECKS = 1; -- 제약조건 다시 시작

 

 

4-2. 제약조건 자동 업데이트 

  • ON UPDATE CASCADE : 기존테이블 데이터 변경 시, 제약조건 테이블 데이터도 자동 변경
  • ON DELETE CASCADE : 기존테이블 데이터 삭제 시, 제약조건 테이블 데이터도 자동 삭제
-- 제약조건 자동업데이트 설정
ALTER TABLE BUYTBL
ADD CONSTRAINT FK_USERTBL_BUYTBL
FOREIGN KEY (USERID) REFERENCES USERTBL(USERID)
ON UPDATE CASCADE
ON DELETE CASCADE;

-- USERTBL 수정 시, BUYTBL 자동 수정
UPDATE USERTBL SET USERID = 'VVK' WHERE USERID = 'BBK';
SELECT USERID FROM BUYTBL WHERE USERID = 'VVK';

-- USERTBL 삭제 시, BUYTBL 자동 삭제
DELETE FROM USERTBL WHERE USERID = 'VVK';
SELECT USERID FROM BUYTBL WHERE USERID = 'VVK';