| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- TTS
- RNN
- 자연어처리
- 소프트웨어 개발
- dementional reduction
- 알고리즘
- Transformer
- ASR
- CNN
- SQL
- 기초
- 딥러닝
- 캐글
- RDBMS
- LangGraph
- UMAP
- 랭그래프
- 데이터엔지니어
- 정보처리기사
- 생성형 인공지능
- 머신러닝
- python기초
- python 기초
- CLIP
- 에이전트
- 트랜스포머
- 힙정렬
- 데이터 시각화
- Python
- 객체지향
Archives
- Today
- Total
수달이네 기술 블로그
3. DDL, DML, DCL, TCL 본문
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로 변환
- ALTER TABLE 테이블명
- DROP : 테이블, 유저, 시퀀스 등을 삭제
- DROP TABLE 테이블명 [CASCADE CONSTRAINT];
- [CASCADE CONSTRAINT]: 제약조건까지 전부 삭제할때 사용
- 삭제 후 롤백 불가, 데이터와 구조 모두 영구적으로 삭제
- DROP TABLE 테이블명 [CASCADE CONSTRAINT];
- TRUNCATE : 테이블의 데이터 전부 삭제(구조 유지, 롤백 불가능, WHERE 절 사용 불가능)
- TRUNCATE TABLE 테이블명;
- 테이블의 모든 행이 삭제 대상
- 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 모드에서 사용 가능

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