테이블의 데이터를 제어하고 조작하는 데 쓰이는 DML(Data Manipulation Language)와 DDL(Data Definition Language), 제약조건, 트랜잭션에 대해 알아보자.
INSERT INTO 테이블 이름(열1, 열2, 열3)
VALUES (열1 데이터, 열2데이터, 열3 데이터)
참고
- 날짜 데이터 입력 방법
- 문자열: YYYY/MM/DD, YYYY-MM-DD
- TO_DATE 함수 : TO_DATE('05/06/2021', 'DD/MM/YYYY')
- SYSDATE : 데이터 입력 시점
- NULL입력방법 : '', NULL 입력
INSERT INTO (열1, 열2, 열 3)
SELECT 열, 열, 열
FROM 테이블
WHERE 조건 ;
*주의 : VALUES 쓰면 안 됨.
UPDATE 변경할 테이블
SET 변경할 열 = 데이터, 변경할 열2 = 데이터2
WHERE 데이터 변경 대상 행 조건
UPDATE 변경할 테이블
SET (변경할 열1, 변경할 열2) = (SELECT 문);
DELETE FROM 테이블이름
WHERE 삭제행 찾을 조건식;
전체 삭제:
DELETE FROM 테이블 이름;
참고
- DDL (CREATE, ALTER, DROP) : 자동완료(트랜잭션 시작, DDL구문 처리, 커밋)
- DML (INSERT, UPDATE, DELETE) : 자동완료X. (트랜잭션 시작, DML구문 처리, 커밋or롤백 명령어 필요) 만약 커밋과 롤백을 하지 않으면 임시 저장소에만 저장되고, 실제 DB에는 반영X
COMMIT : 수정사항을 영원히 반영하고 싶을 때 사용. 커밋은 한 트랜잭션이 끝날 때마다 해주는 게 좋다. 예컨대 계좌이체 트랜잭션이 전체 수행되면 커밋해주는 방식
ROLLBACK : 마지막 커밋 직후로 돌아감. 커밋 완료한 것을 되돌릴 수는 없음. UPDATE한 것은 DELETE 해주는 방식으로 수정할 수밖에.
의미 : DB접속-> DB 관련작업 수행 -> 접속 종료하기까지 전체 기간을 말함. 섹션별로 임시저장소가 있는데, 트랜잭션의 내용이 저장돼있음. SQLPLUS, 오라클 DEVELOPER를 열고 있으면 세션이 2개라는 식으로 표현.
읽기 일관성 : 어떤 DB가 변경 중일 때, 다른 세션에서는 변경 전 원래 데이터를 그대로 보여주는 것을 말함. 그들은 수정 중인 데이터를 볼 필요가 없기 때문. COMMIT을 해줘야 데이터가 반영됨.
테이블 이름 규칙 : 문자로 시작, 이름 30BYTE 이하, 같은 사용자의 테이블 이름은 중복 불가, 특수문자 $#_ 사용가능
CREATE TABLE 소유 계정. 테이블 이름(
열1이름 자료형,
열2이름 자료형,
);
CREATE TABLE 새 테이블명
AS SELECT * FROM 복사할 테이블;
CREATE TABLE 새 테이블명
AS SELECT * FROM 복사할 테이블
WHERE 조건;
ALTER TABLE 테이블명
ADD 열이름 자료형;
ALTER TABLE 테이블명
RENAME COLUMN 기존열이름 TO 새로운열이름;
ALTER TABLE 테이블명
MODIFY 열이름 새자료형;
ALTER TABLE 테이블명
DROP COLUMN 열명;
RENAME 테이블명 TO 새테이블명;
TRUNCATE TABLE 테이블명;
DROP TABLE 테이블명;
주의 : COMMIT 안 됨!!!
CREATE INDEX 인덱스 이름
ON 테이블이름 (열 이름 1, ASC or DESC,
열 이름 2, ASC or DESC);
인덱스 삭제
DROP INDEX 인덱스 이름;
생성
CREATE VIEW 뷰 이름 (열이름1, 열이름2)
AS SELECT문;
삭제
DROP VIEW 뷰 이름;
* WITH CHECK OPTION CONSTRAINT : 지정한 제약조건은 DML 가능
* WITH READ ONLY : 뷰의 열람만 가능하도록
CREATE TABLE 테이블명(열이름 자료형 NOT NULL);
(NOT NULL은 예시)
SELECT OWNER, CONSTRAINT_NAME, CONSTRAINT_TYPE, TABLE_NAME
FROM USER_CONSTRAINTS;
ALTER TABLE 테이블명MODIFY (열이름 NOT NULL);
단, 해당 열에 제약조건에 반하는 데이터가 있을 경우
변경이 안 되므로 데이터를 수정한 후 제약조건을 설정해야 한다.
ALTER TABLE 테이블명
RENAME CONSTRAINT 제약조건명 TO 새제약조건명;
ALTER TABLE 테이블명DROP CONSTRAINT 제약조건명;
테이블 A의 특정 열을 참조하는 테이블 B의 경우, 테이블A는 부모키를, 테이블 B는 자식키를 보유하고 있다고 보면 된다. 이 경우 테이블 B의 FOREIGN KEY 열은 테이블 A의 PRIMARY KEY 값과 NULL 외의 값을 저장할 수 없음. 예컨대 테이블 A의 C열에 (10, 20, 30)이 있고, 테이블 B의 D열이 이를 참조한다면 D에는 (10, 20, 30)과 NULL만 들어올 수 있음.
CREATE TABLE 테이블명
(열이름 열자료형 CONSTRAINT 제약조건이름
REFERENCES 참조테이블(참조할 열));
CREATE TABLE 테이블명 (
설정컬럼명 컬럼자료형 CONSTRAINT 제약조건이름
CHECK(제약조건(EX.LENGTH(LOGIN_PWD) >3));
CREATE TABLE 테이블명(
설정컬럼명 컬렴자료형 DEFAULT 제약조건(EX.'1234')
);
실무에서 사용하는 여러 종류의 서비스는 한 사용자가 관리하기에는 데이터 분량이 너무 방대하거나 복잡해서 업무에 따라 사용자(데이터관리자)를 나눔.
사용자 생성
CREATE USER 사용자이름
IDENTIFIED BY 패스워드 ;
GRANT 권한명 TO 사용자이름;
WITH ADMIN OPTION : 다른 사용자에게 권한을 부여할 수 있는 권한도 함께 지급
GRANT 객체 권한
ON 스키마, 객체 이름
TO 사용자 이름;
WITH GRANT OPTION : 부여받은 권한을 다른 사용자에게 부여할 수 있는 권한도 함께 지급
REVOKE 시스템 권한
FROM 사용자 이름
ALTER USER 사용자명
IDENFITIED BY 새 비번;
DROP USER 사용자명 ;