0718 DML DCL DDL

onnbi·2022년 7월 27일
0

sql-tutorial

목록 보기
3/6
post-thumbnail

DML

데이터를 조작하는 언어
DQL(데이터 추출) SELECT 포함 INSERT, UPDATE, DELETE

CREATE TABLE MEMBER_TBL (
    MEMBER_ID VARCHAR2(20),     --아이디
    MEMBER_PW VARCHAR2(20),     --비밀번호
    MEMBER_NAME VARCHAR2(20),   --이름
    MEMBER_AGE NUMBER,          --나이
    ADDRESS VARCHAR2(500),      --주소
    GENDER CHAR(6),            --성별
    ENROLL_DATE DATE            --가입일
);
-- 회원 테이블 생성

INSERT

테이블에 데이터를 ROW단위로 삽입하는 구문
=> ROW 수가 증가한다

INSERT INTO 테이블명(컬럼1, 컬럼2..... ) VALUES(값1, 값2.... );

순서를 맞춰서 넣어주어야 한다

컬럼의 순서를 바꿔서 넣어줄 수 있다 (단, 컬럼- VALUE의 위치 동일)

INSERT INTO 테이블명 VALUES(값1, 값2, 값3. ... . 값7);

순서를 맞춰서 모든 컬럼에 대한 값을 넣어주어야 한다

UPDATE

테이블에 기록된 데이터를 수정하는 구문

조건문을 걸어 각 필드를 수정할 수 있다
조건문을 걸지 않으면 전체 컬럼이 바뀐다

UPDATE 테이블 SET 수정할 컬럼 = 수정값, 수정할 컬럼 = 수정값 ... WHERE 조건;

DELETE

테이블에서 데이터를 ROW 단위로 삭제하는 구문
=> ROW 수가 감소한다

DELETE FROM 테이블명 WHERE 조건;

FOREIGN KEY 제약조건이 설정되어 있고 ON DELETE RESTRICTED 인 경우 삭제 불가능 > 해결 방법

  1. 제약조건 비활성화
  2. 데이터 삭제
  3. 비활성화 된 제약 조건 활성화

DDL

데이터 정의어 : 객체를 만들고, 수정하고, 삭제하는 구문

테이블과 같은 데이터 구조를 정의할 때 사용한다

CREATE

테이블, 인덱스, 유저 등 다양한 데이터 베이스 객체 생성

관리자 계정 : 데이터 베이스의 생성과 관리 담당 (모든 권한과 책임을 가짐)
사용자 계정 : 데이터 베이스에 대한 질의, 갱신, 보고서 작성 등 수행
(업무에 필요한 최소한의 권한만 가짐)

계정 생성은 관리자 계정에서만 허용된다

CREATE USER 사용자이름 IDENTIFIED BY 비밀번호

사용자이름 - 대소문자 안 가림

비밀번호 -가림

GRANT (DCL)

관리자 계정에서 수행

GRANT 부여할ROLE TO 사용자이름;

  • CONNECT : 접속하는 권한이 있는 ROLE
  • RESOURCE : CREATE로 객체를 생성할 수 있는 권한과 삽입, 수정, 삭제 권한을 모아둔 ROLE

REVOKE (DCL)

관리자 계정에서 권한 회수

REVOKE 회수할ROLE FROM 사용자이름;

-- GRANT / REVOKE : 관리자 계정만 가능
CREATE USER TEST01 IDENTIFIED BY 1234;
-- GRANT : 계정에 접속(CONNECT), 자료관리(RESOURCE) 권한부여
GRANT CONNECT, RESOURCE TO TEST01;
-- REVOKE : 권한 뺏기
REVOKE CONNECT FROM TEST01;

사용자 계정에서 CREATE

CREATE TABLE MEMBER (
    MEMBER_ID    VARCHAR2(20), -- CHAR는 공백 포함
    MEMBER_PW    VARCHAR2(20),   
    MEMBER_NAME  VARCHAR2(21)
);
-- 컬럼3개짜리 테이블 생성 완료

COMMENT ON COLUMN MEMBER.MEMBER_ID IS '회원아이디';
COMMENT ON COLUMN MEMBER.MEMBER_PW IS '회원비밀번호';
-- 데이터베이스는 공유하기 때문에 COMMENT로 정보입력

※ constraint (제약조건)

  • NOT NULL : 해당 컬럼 값에 NULL을 넣을 수 없게 제한한다
  • UNIQUE : 해당 컬럼 값에 중복을 제한한다
CREATE TABLE USER_UNIQUE (
    USER_NO     NUMBER UNIQUE,  -- UNIQUE 컬럼레벨 설정
    USER_ID     VARCHAR2(20) NOT NULL,
    USER_PW     VARCHAR2(30) NOT NULL, -- 컬럼레벨만 가능
    USER_NAME   VARCHAR2(30),
    GENDER      CHAR(6),
    PHONE       CHAR(11),
    UNIQUE(USER_ID)             -- UNIQUE 테이블레벨 설정
  --UNIQUE(USER_NO, USER_ID)
  -- user_no와 user_id 둘이 동시에 중복일 때 유니크가 제약한다
  -- 따로 제약할 수 없다 (둘 중 하나만 겹칠 때는 값이 들어감)
);
  • PRIMARY KEY : 한 행의 정보를 구분하기 위한 고유식별 = (identifier) 역할

    • 한 테이블 당 한 개만 설정이 가능하다
    • 고유식별자이기 때문에 UNIQUE + NOT NULL 두 기능을 모두 수행한다
  • FOREIGN KEY : JOIN에서 다른 테이블과 참조된 컬럼을 통해 관계를 형성한다

    • 해당 컬럼은 참조되는 테이블의 컬럼 값 중 하나와 일치 , NULL

    최소 UNIQUE가 필요하다

USER_ID VARCHAR2(20) REFERENCES SHOP_MEMBER(USER_ID),
	-- 컬럼 레벨 설정
FOREIGN KEY(USER_ID) REFERENCES SHOP_MEMBER(USER_ID),
    -- 테이블 레벨 설정
USER_NO NUMBER(20) REFERENCES SHOP_MEMBER,
	-- PRIMARY KEY만 컬럼 생략 가능

참조하고 있는 키는 삭제가 불가능하다

삭제하기 위해서는 ON DELETE를 사용해야 한다

-- ON DELETE SET NULL
USER_ID VARCHAR(20) REFERENCES SHOP_MEMBER2(USER_ID)
ON DELETE CASCADE
-- ON DELETE CASCADE
-- ON DELETE RISRTICTED

CASCADE : 부모 테이블 삭제 시 해당 로우를 모두 삭제한다

SET NULL : 부모 테이블에서 삭제 시 참조한 테이블의 값은 NULL

RESTRICTED : 부모 키가 살아 있으면 참조 테이블의 값은 삭제되지 않는다

  • CHECK : 해당 컬럼에 설정한 값만 넣을 수 있게 제약한다
    • 값은 비교연산자를 통해 설정
    • 비교값은 리터럴만 사용 가능
GENDER	CHAR(6)		CHECK(GENDER IN ('남자', '여자'))
-- 반드시 두 값 중 하나만 들어와야 한다

※ DEFAULT : INSERT 할 때 NULL 대신 기본 값이 들어가도록 한다

PHONE	CHAR(13)    DEFAULT '010-0000-0000'

SUBQUERY로 테이블 생성

  • 컬럼이름, 데이터 타입, 값 복사 가능
  • 제약조건은 NOT NULL만 복사 가능
CREATE TABLE DEPT_COPY
AS
SELECT * FROM DEPARTMENT;
-- CREATE AS SELECT문을 통한 테이블 복사

WHERE 1 = 0;
-- 성립하지 않는 WHERE절을 붙여주면 구조만 가져오고 데이터는 가져오지 않는다

create

as

select

ALTER

데이터베이스의 객체 정보 수정

create로 정의된 내용을 수정할 때 사용한다

  • 새로운 컬럼 삽입

ALTER TABLE 테이블명 ADD(컬럼명 자료형태);

  • 기존 컬럼 수정

ALTER TABLE 테이블명 MODIFY 컬럼명 자료형태

  • 컬럼 삭제

ALTER TABLE 테이블명 DROP COLUMN 컬럼명

  • 컬럼 이름 변경

ALTER TABLE 테이블명 RENAME COLUMN 컬럼명 TO 변경하고 싶은 컬럼명

  • 테이블 이름 변경

ALTER TABLE 테이블명 RENAME TO 변경할 이름

  • 컬럼 삭제

ALTER TABLE 테이블명 DROP COLUMN 컬럼명

외래키로 참조되고 있는 경우 삭제 불가 > CASCADE CONSTRAINT 붙이면 제약조건 삭제하고 컬럼삭제

※ constraint (제약조건)

  • 제약조건 확인
SELECT UC.CONSTRAINT_NAME, -- 제약조건 이름
UC.CONSTRAINT_TYPE, -- 제약조건 타입
UC.TABLE_NAME, -- 테이블명
UCC.COLUMN_NAME, -- 컬럼명
UC.SEARCH_CONDITION -- 제약조건 설명
FROM USER_CONSTRAINTS UC
JOIN USER_CONS_COLUMNS UCC
ON (UC.CONSTRAINT_NAME = UCC.CONSTRAINT_NAME)
WHERE UC.TABLE_NAME = 'TABLE NAME'; -- 테이블명 반드시 대문자

또는 테이블정보에서 제약조건의 정보를 확인할 수 있다

  • 제약조건 추가 (NOT NULL은 MODIFY)

ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 PRIMARY KEY(컬럼명)

ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 UNIQUE(컬럼명)

ALTER TABLE 테이블명 MODIFY 컬럼명 CONSTRAINT 제약조건명 NOT NULL

  • 제약조건 삭제 (NOT NULL은 MODIFY)

ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건명

ALTER TABLE 테이블명 MODIFY 컬럼명 NULL

DROP

CREATE로 정의된 객체를 삭제할 때 사용

  • 테이블 삭제

DROP TABLE 테이블명

다른 테이블에서 참조하고 있는 경우 삭제 불가 >

CASCADE CONSTRAINT 연결된 제약조건 삭제하고 컬럼삭제

  • 사용자 삭제

DROP USER 유저명

※ 유저 삭제 시 테이블을 포함한 내부 데이터 모두 삭제

profile
aelatte coding journal

0개의 댓글