📁 INSERT
테이블에 새로운 행을 추가하는 구문
1) INSERT INTO
컬럼명 생략
컬럼의 순서를 아는 경우
INSERT INTO 테이블명 VALUES(데이터, 데이터, 데이터...);
컬럼 명시
컬럼의 순서, 데이터를 넣을 컬럼을 임의로 지정
INSERT INTO 테이블명(컬럼명, 컬럼명, 컬럼명)
VALUES(컬럼명, 컬럼명, 컬럼명);
서브쿼리 사용
서브쿼리를 통해 조회한 열들을 테이블에 삽입할 수 있다.
VALUES를 사용하지 않는다.
INSERT INTO 테이블명(서브쿼리)
INSERT INTO EMPLOYEE
(SELECT * FROM EMPLOYEE
WHERE SALARY>6000000)
2) INSERT ALL
한번에 여러 테이블에 행을 추가하는 구문
반드시 서브쿼리와 함께 사용해야 한다.
INSERT ALL
INTO MEMBER VALUES('id', 'pass')
INTO VISIT VALUES('id', SYSDATE)
SELECT * FROM DUAL
INSERT ALL
INTO MEMBER_U VALUES(ID, PW)
INTO VISIT VALUES(ID, 'U')
SELECT * FROM MEMBER WHERE AUTHORITY='U';
WHEN THEN
서브쿼리 결과의 조건에 따라 서로 다른 테이블에 삽입하는 구문
-- 일반회원은 MEMBER_U 테이블에, 관리자는 MEMBER_A 테이블에 삽입
INSERT ALL
WHEN AUTHORITY = 'U' THEN
INTO MEMBER_U VALUES(ID, PW)
WHEN AUTHORITY = 'A' THEN
INTO MEMBER_A VALUES(ID, PW)
SELECT * FROM MEMBER;
3) INSERT FIRST
기본적으로 조건을 충족하는 테이블에 행이 삽입되지만, 선행조건에서 이미 삽입된 행은 다른 테이블에 삽입되지 않는다.
INSERT ALL의 WHEN THEN과 사용방법은 동일하다.
-- 중간고사 성적에 따라 GRADE_A 테이블과 GRADE_B 테이블에 삽입
INSERT FIRST
WHEN SCORE > 80 THEN
INTO GRADE_A VALUES(NAME, SCORE)
WHEN SCORE > 40 THEN
INTO GRADE_B VALUES(NAME, SCORE)
SELECT * FROM MID_EXAM;
📁 UPDATE
테이블에 기록된 컬럼 값을 수정하는 구문
UPDATE 테이블명
SET 컬럼명=수정할 값
WHERE 수정할 행의 조건;
한번에 여러 행을 수정할 수도 있다.
UPDATE EMP_SALARY
SET (SALARY, BONUS) =
(SELECT SALARY, BONUS FROM EMP_SALARY
WHERE EMP_NAME IN ('유재식'))
WHERE EMP_NAME IN ('노옹철', '전형돈', '정중하', '하동운');
📁 DELETE
테이블에서 행을 삭제하는 구문
DELETE FROM 테이블명
WHERE 삭제할 행의 조건;
제약조건 비활성화
제약조건은 데이터의 무결성을 보장해 데이터의 무단 삽입, 삭제를 막는다.
그러나 제약조건에도 불구하고 데이터를 삭제해야 하는 경우가 생기는데, 잠시 제약조건을 비활성화함으로써 이를 가능하게 할 수 있다.
DISABLE CONSTRAINT
제약조건을 비활성화하는 예약어
ALTER TABLE 테이블명
DISABLE CONSTRAINT 제약조건명;
ENABLE CONSTRAINT
제약조건을 활성화하는 예약어
ALTER TABLE 테이블명
ENABLE CONSTRAINT 제약조건명;
CASCADE
만약 부모 테이블의 PK가 자식 테이블의 FK로 사용되고 있을 경우 DISABLE이 불가능하다.
CASCADE는 부모 테이블의 제약조건을 삭제하면 자식 테이블의 제약조건도 삭제해준다.
ALTER TABLE 테이블명
DISABLE CONSTRAINT 제약조건명 CASCADE;
MEMBER 테이블에서 아이디가 'xx'인 행을 삭제하는 경우를 보자.
이 때 MEMBER의 ID 컬럼을 BOARD의 WRITER 컬럼이 참조하고 있다.
-- MEMBER 테이블에서 아이디가 'xx'인 행을 삭제하는 경우
-- 1. MEMBER의 PK 제약조건 비활성화, DEBATE의 FK도 자동 비활성화
ALTER TABLE MEMBER
DISABLE CONSTRAINT MEMBER_PK CASCADE;
-- 2. BOARD에서 부서코드가 D8인 행 삭제
DELETE FROM MEMBER
WHERE ID='XX';
-- 3. BOARD에서 아이디가 'xx'인 행 삭제
DELETE FROM BOARD
WHERE WRITER='xx';
-- 4. MEMBER의 PK 제약조건 활성화
ALTER TABLE MEMBER
ENABLE CONSTRAINT MEMBER_PK;
-- 4. BOARD의 FK 제약조건 활성화
ALTER TABLE BOARD
ENABLE CONSTRAINT BOARD_FK;