Chapter 10. DML (INSERT, UPDATE, DELETE)
14423 단어 국비수업오라클(Oracle)국비수업
DML(Data Manipulation Language)
- Data의 삽입, 수정, 삭제, 조회 등의 동작을 제어/조작하기 위해 사용하는 언어
- Data를 이용하려는 사용자와 시스템간의 인터페이스를 직접적으로 제공하는 언어
- INSERT(데이터 생성), UPDATE(데이터 수정), DELETE(데이터 삭제), SELECT(데이터 조회)
INSERT
-
새로운 행을 테이블에 추가하는 구문
-
사용 구문
-
INSERT INTO 테이블명 VALUES (입력데이터1, 입력데이터2, ... );
-
INSERT INTO 테이블명 (컬럼명1,컬럼명2,...) VALUES (입력데이터1, 입력데이터2, ... );
-
- EX)
INSERT INTO PRACTICE VALUES (1,'user11','1234','동대문','남');
INSERT INTO PRACTICE(USER_NO, USER_ID, USER_PW, USER_NICKNAME, USER_GENDER) VALUES (2,'user22','1234','남대문','여');
- INSERT 시에 VALUES 대신 서브쿼리를 이용하여 데이터를 넣을 수 있다.
INSERT INTO PRACTICE(
SELECT USER_NO, USER_ID, USER_PASSWORD, USER_NICKNAME, GENDER
FROM MEMBER
);
INSERT ALL
-
특정 대상이 되는 테이블의 데이터를 서브쿼리로 조회하여 두개 이상의 테이블에 데이터를 삽입할 수 있는 방식
-
EX)
-- 사번, 사원명, 매니저ID 저장하는 테이블
CREATE TABLE EMP_MANAGER AS
SELECT EMP_ID, EMP_NAME, MANAGER_ID
FROM EMPLOYEE
WHERE 1=0; -- 거짓으로 만들어서 테이블 구조만 가져오기
-- 사번, 이름, 부서코드, 부서명을 저장하는 테이블
CREATE TABLE EMP_DEPT_D2 AS
SELECT EMP_ID, EMP_NAME, DEPT_CODE, DEPT_TITLE
FROM EMPLOYEE
LEFT JOIN DEPARTMENT ON (DEPT_CODE=DEPT_ID)
WHERE 1=0; -- 거짓으로 만들어서 테이블 구조만 가져오기
-- 부서코드가 D2 사원의 정보 추출하여 각 테이블에 정보 삽입
INSERT ALL
INTO EMP_MANAGER VALUES(EMP_ID, EMP_NAME, MANAGER_ID)
INTO EMP__DEPT_D2 VALUES(EMP_ID, EMP_NAME, DEPT_CODE, DEPT_TITLE)
(SELECT EMP_ID, EMP_NAME, MANAGER_ID, DEPT_CODE, DEPT_TITLE
FROM EMPLOYEE
LEFT JOIN DEPARTMENT ON (DEPT_CODE=DEPT_ID)
WHERE DEPT_CODE='D2');
SELECT * FROM EMP_MANAGER;
SELECT *FROM EMP_DEPT_D2;
UPDATE
- 테이블에 기록된 컬럼의 값을 수정하는 구문(테이블의 전체 행 개수에는 변화 X)
- 사용 구문
- UPDATE 테이블명 SET 컬럼 = '데이터' , 컬럼 = '데이터', ....
[WHERE 조건]
- UPDATE 테이블명 SET 컬럼 = '데이터' , 컬럼 = '데이터', ....
- 조건문을 작성하지 않게 되면, 모든 데이터의 수정이 이루어지게 되므로 조심해야 한다.
- EX)
UPDATE PRACTICE SET USER_ID='user77' WHERE USER_NO =3;
-
UPDATE 시에도 서브쿼리를 사용할 수 있다.
-
EX)
UPDATE EMP_COPY SET
SALARY = (SELECT SALARY FROM EMPLOYEE WHERE EMP_ID=200),
BONUS = (SELECT BONUS FROM EMPLOYEE WHERE EMP_ID=200)
WHERE EMP_NAME ='유재식';
MERGE
-
구조가 같은 두 개의 테이블을 하나의 테이블로 합치는 기능
-
기준이될 테이블을 정하여 다른 테이블을 합치는 기능
-
두 테이블에서 지정하는 조건의 값이 존재하면 UPDATE가 되고, 조건의 값이 없으면 INSERT가 된다.
-
EX)
-- ID 와 NAME을 가지고 있는 TABLE_A, TABLE_A 병합
MERGE INTO TABLE_A USING TABLE_B ON(TABLE_A.ID=TABLE_B.ID)
WHEN MATCHED THEN -- ID가 같으면
UPDATE SET TABLE_A.NAME = TABLE_B.NAME -- NAME을 UPDATE(수정)
WHEN NOT MATCHED THEN -- 그렇지 않으면
INSERT VALUES(TABLE_B.ID, TABLE_B.NAME); -- TABLE_B의 ID, NAME을 INSERT(추가)
DELETE
-
테이블의 행을 삭제하는 구문(테이블의 행 개수 감소)
-
DELETE 시에 조건문을 사용하지 않게 되면 Table의 모든 데이터가 삭제된다.
-
외래키 제약 조건이 설정 되어 있는 경우 참조되고 있는 값은 삭제 할 수 없다.
-
사용 구문
- DELETE FROM 테이블명
[WHERE 조건]
- DELETE FROM 테이블명
-
EX)
DELETE FROM PRACTICE WHERE USER_NO=1;
- 외래키(FOREIGN KEY) 제약 조건으로 컬럼 삭제가 불가능한 경우에 제약조건을 비활성화한 후 삭제 가능
- CONSTRAINT_NAME 확인하기
SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE,STATUS FROM USER_CONSTRAINTS
WHERE TABLE_NAME='테이블명';
- CONSTRAINT_NAME을 찾아서 제약조건을 비활성화
ALTER TABLE 테이블명 DISABLE CONSTRAINT [CONSTRAINT_NAME];
- 행 삭제
- 활성화 된 제약조건을 다시 활성화
- 참조되는 테이블의 값과 참조하는 테이블의 값이 매칭되어 있어야한다.
ALTER TABLE 테이블명 ENABLE CONSTRAINT [CONSTRAINT_NAME];
TRUNCATE
- 테이블을 초기화 (전체 행을 삭제)
- DELETE 문보다 수행속도가 빠르지만, ROLLBACK을 통해 데이터 복구가 불가능
- DELETE와 마찬가지로 FOREIGN KEY 제약조건일때 적용이 불가능
- 사용 구문
- TRUNCATE TABLE 테이블명;
- 비교
구분 | 정리 |
---|---|
DELETE | Table의 데이터 삭제 Rollback을 통해서 Commit 전 시전까지 되돌릴 수 있다. |
TRUNCATE | Table의 데이터 삭제(데이터 자체를 초기화) Rollback을 하더라도 되돌릴 수 없다. |
DROP | Table 자체를 삭제 객체 삭제는 기본적으로 Rollback이 안된다. (Rollback은 데이터에 대한 복구만 가능) |
구분 | 적용 시점 |
---|---|
CREATE | 즉시 적용 |
DROP | 즉시 적용 |
INSERT | 즉시 적용 안됨 (COMMIT : 적용, ROLLBACK: 되돌리기) |
UPDATE | 즉시 적용 안됨 (COMMIT : 적용, ROLLBACK: 되돌리기) |
DELETE | 즉시 적용 안됨 (COMMIT : 적용, ROLLBACK: 되돌리기) |
Author And Source
이 문제에 관하여(Chapter 10. DML (INSERT, UPDATE, DELETE)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@woody_/Chapter-10.-DML-INSERT-UPDATE-DELETE저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)