수달이네 기술 블로그

3. DDL, DML, DCL, TCL 본문

RDBMS

3. DDL, DML, DCL, TCL

슬픈 수달이 2025. 10. 28. 23:54

1. DDL(Data Definition Language)

데이터 정의어 : 데이터베이스의 구조를 정의하거나 변경하는 명령어

  • CREATE : 테이블, 유저, 시퀀스 등을 생성
    • CREATE [TABLE/USER/SEQUENCE/VIEW] 이름()
    • CREATE TABLE 테이블명(컬럼명 자료형(용량)[제약조건,…);
  • ALTER : 테이블 구조 변경(컬럼추가, 테이블이름 변경, 컬럼 제약조건/자료형 변경/추가/삭제)
    • ALTER TABLE 테이블명
      • 컬럼추가: ADD(컬럼명 자료형(용량)[제약조건]);
      ALTER TABLE TBL_STU ADD (STU_EMAIL VARCHAR(50));
      --TBL_STU 테이블에 STU_EMAIL 컬럼 추가
      • 컬럼삭제: DROP COLUMN 컬럼명;
      ALTER TABLE TBL_STU DROP COLUMN STU_AGE;
      --TBL_STU 테이블에 STU_AGE컬럼을 삭제
      
      • 컬럼명변경: RENAME COLUMN 컬럼명 TO 새로운 컬럼명;
      ALTER TABLE TBL_STU RENAME COLUMN STU_MAJOR TO STU_GRADE;
      --TBL_STU 테이블의 STU_MAJOR 컬럼을 STU_GRADE컬럼으로 변환
      
      • 컬럼 자료형 변경: MODIFY (기존컬럼명 새로운자료형);
      ALTER TABLE TBL_STU MODIFY(STU_NAME VARCHAR2(100));
      --TBL_STU 테이블의 STU_NAME 자료형을 VARCHAR2(100)으로 변환
      
      • 컬럼제약조건추가: ADD CONSTRAINT 제약조건이름 제약조건명(컬럼명);
      ALTER TABLE TBL_STU ADD CONSTRAINT CHK_STU_GRADE CHECK (STU_GRADE IN (1,2,3));
      --TBL_STU테이블에 CHK_STU_GRADE(STU_GRADE에는 1,2,3만 들어감)라는 제약조건 생성
      ALTER TABLE TBL_STU ADD CONSTRAINT UK_STU_EMAIL UNIQUE (STU_EMAIL);
      --TBL_STU테이블에 UK_STU_EMAIL(UNIQUE KEY로 설정)라는 제약조건 생성
      
      • 제약조건삭제: DROP CONSTRAINT 제약조건이름;
      ALTER TABLE TBL_STU DROP CONSTRAINT UK_STU_EMAIL;
      --TBL_STU테이블의 UK_STU_EMAIL제약조건을 삭제
      
      • 테이블명 변경: RENAME 기존테이블명 TO 새로운 테이블명;
      ALTER TABLE TBL_STU RENAME TO TBL_STU_INFO;
      --TBL_STU테이블의 이름을 TBL_STU_INFO로 변환
      
  • DROP : 테이블, 유저, 시퀀스 등을 삭제
    • DROP TABLE 테이블명 [CASCADE CONSTRAINT];
      • [CASCADE CONSTRAINT]: 제약조건까지 전부 삭제할때 사용
      • 삭제 후 롤백 불가, 데이터와 구조 모두 영구적으로 삭제
  • TRUNCATE : 테이블의 데이터 전부 삭제(구조 유지, 롤백 불가능, WHERE 절 사용 불가능)
    • TRUNCATE TABLE 테이블명;
      • 테이블의 모든 행이 삭제 대상

2. DML(Data Manipulation Language)

데이터 조작어 : 데이터의 값을 조작할 때 사용하는 명령어

  • 테이블의 구조는 바꾸지 않고 그 안의 데이터를 다룰 때 사용한다
  • SELECT : 데이터 조회
    • SELECT [DISTINCT] 컬럼명 [AS “별칭] FROM 테이블명 [WHERE 조건] [ORDER BY 정렬기준 컬럼명 [ASC/DESC]];
  • INSERT : 데이터 삽입
    • INSERT INTO 테이블명 [(컬럼명1, 컬럼명2,….)] VALUES(값1, 값2,….);
  • UPDATE : 데이터 수정
    • UPDATE 테이블명 SET 기존 컬럼명 = 새로운 값 WHERE 조건; *WHERE절 생략시 지정한 컬럼의 모든 값이 변경
  • DELETE : 데이터 삭제
    • DELETE FROM 테이블명 WHERE 조건;
    • WHERE에 있는 데이터가 삭제
  DELETE TRUNCATE
명령어 종류 DML DDL
삭제 범위 WHERE 조건 사용가능
→일부 행만 삭제 가능
전체 행 삭제만 가능(WHERE불가)
ROLLBACK 가능여부 COMMIT이전까지는 ROLLBACK가능 ROLLBACK불가능(바로 반영)
속도 느림(행단위로 하나씩 처리) 빠름(테이블 전체 초기화)
구조영향 테이블구조,제약조건,시퀀스 등 유지 구조를 유지하나 시퀀스 값은 초기화 되지 않음(DBMS마다 다름)
저장공간 반환여부 행 삭제 후에도 사용하던 공간은 그대로 유지 테이블이 차지하던 공간 대부분 반환
  • 따라서 데이터를 삭제할때 대부분 DELECT를 사용 TRUNCATE는 롤백이 불가해서 속도가 중요하지 않으면 거의 사용하지 않음.

3. DCL(Data Control Language)

권한 제어어 : 사용자에게 권한을 부여하거나 회수할 때 사용

  • GRANT : 권한 부여
    • GRANT SELECT[,DELETE,INSERT] ON 사용자.테이블 TO 사용자;
    • 해당 테이블 SELECT 권한 부여 가능
USER is "SYS"
SQL> GRANT select ON hr.employess to web2;
--employees테이블에 접근 가능
SELECT * FROM HR.employees;

DELECT, INSERT권한을 주지 않았기에 사용 불가능, 주면 사용 가능

  • REVOKE : 권한 회수
    • REVOKE SELECT[,DELETE,INSERT] ON 사용자.테이블 FROM 사용자;
    • 해당 테이블 SELECT 권한 제거
SQL> REVOKE select ON hr.employees FROM web2;

Revoke succeeded.

4. TCL(Transaction Control Language)

트랜잭션 제어어 : DML 작업을 확정하거나 취소할 때 사용

  • Manual Commit 모드에서 사용 가능

디비버 상의 Manual Commit

COMMIT : 변경사항 확정

  • COMMIT;

ROLLBACK : 변경사항 취소

  • ROLLBACK;
  • ROLLBACK TO 저장시점명;

SAVEPOINT : 롤백지점 설정

  • SAVEPOINT 저장시점명;
  • ROLLBACK과 함께 사용 가능

+) CRUD

CREATE 생성( 추가) INSERT(데이터 삽입): 회원가입

READ 읽기(조회) SELECT(데이터 조회): 로그인

UPDATE 수정 UPDATE(데이터 수정):마이페이지 변경/비밀번호 변경

DELECT 삭제 DELECT(데이터 삭제):회원탈퇴

5. JDBC(다음 내용)

java database connectivity(자바 데이터베이스 연결)

  • DBMS와 JAVA를 연결시키는 중간다리 API
    • API: 어떤 어플리케이션이 다른 프로그램이나 서비스와 소통하기 위해 제공하는 규칙(인터페이스)

사용 순서

  1. JDBC Driver 로딩
    	Class.forName("oracle.jdbc.jdbc.driver.OracleDriver");//Oracle 드라이버 로딩
    	Class.forName("com.mysql.cj.jdbc.Driver");//mysql 드라이버 로딩
    
    DBMS 종류에 맞는 드라이버를 메모리에 로드해야한다,.
  2. ojdbc6.jar → java 프로젝트 내에 build path에 추가한다.
  3. DB에 맞는 드라이버 로딩
  4. Connection
    Connection connection = DriverManager.getConnection(DB_URL, 사용자명, 비밀번호)
    
    • 커넥션 객체를 정상적으로 얻어냈을 때 DBMS와 정상 연결이 가능하다.
  5. 드라이버 연결 후 커넥션 객체를 얻어낸다.
  6. PreparedStatement(이전에 사용하던 Statement 보다 sqlinjection등 공격에 강하며, 성능도 좋음)executeUpdate(), executeQuery() 메소드를 통해 DBMS로 쿼리를 보내준다.
    • executeUpdate(): DML(INSERT, UPDATE, DELECT)실행시 사용, 결과로는 영향받은 행 수 반환
    • executeQuery(): SELECT 실행 시 사용, 결과는 ResultSet으로 반환
  7. JDBC를 통해 DBMS에 보낼 쿼리를 관리해주는 인터페이스
  8. ResultSetDBMS에서 실행한 쿼리의 결과는 항상 테이블 형태라는 사실을 주의하자.
    • .next(): 커서를 다음행으로 이동
    • .getInt(), .getString(): 각 컬럼의 값 가져오기
  9. SELECT의 결과(테이블 형태)를 한 행씩 가져오는 인터페이스
  10. 쿼리의 결과를 받을 때 사용하는 인터페이스
  11. close()연결을 닫을 때는 연결의 반대 순서로 닫아준다.
    • resultSet.close() > preparedStatement.close() > connection.close()
  12. 항상 db와 연결해서 사용한 객체들은 close()를 통해 연결을 닫아줘야한다.

'RDBMS' 카테고리의 다른 글

MySQL 설치 및 기본 문법 등  (1) 2025.11.07
4. JDBC기능 구현 + SEQUENCE문  (0) 2025.10.30
2. 제약조건(오라클)  (0) 2025.10.25
1. SQL 문 (오라클)  (0) 2025.10.23
0. RDBMS 배우기  (0) 2025.10.22