데이터를 조작하는 언어
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 --가입일
);
-- 회원 테이블 생성
테이블에 데이터를 ROW단위로 삽입하는 구문
=> ROW 수가 증가한다
INSERT INTO 테이블명(컬럼1, 컬럼2..... ) VALUES(값1, 값2.... );
순서를 맞춰서 넣어주어야 한다
컬럼의 순서를 바꿔서 넣어줄 수 있다 (단, 컬럼- VALUE의 위치 동일)
INSERT INTO 테이블명 VALUES(값1, 값2, 값3. ... . 값7);
순서를 맞춰서 모든 컬럼에 대한 값을 넣어주어야 한다
테이블에 기록된 데이터를 수정하는 구문
조건문을 걸어 각 필드를 수정할 수 있다
조건문을 걸지 않으면 전체 컬럼이 바뀐다
UPDATE 테이블 SET 수정할 컬럼 = 수정값, 수정할 컬럼 = 수정값 ... WHERE 조건;
테이블에서 데이터를 ROW 단위로 삭제하는 구문
=> ROW 수가 감소한다
DELETE FROM 테이블명 WHERE 조건;
FOREIGN KEY 제약조건이 설정되어 있고 ON DELETE RESTRICTED 인 경우 삭제 불가능 > 해결 방법
데이터 정의어 : 객체를 만들고, 수정하고, 삭제하는 구문
테이블과 같은 데이터 구조를 정의할 때 사용한다
테이블, 인덱스, 유저 등 다양한 데이터 베이스 객체 생성
관리자 계정 : 데이터 베이스의 생성과 관리 담당 (모든 권한과 책임을 가짐)
사용자 계정 : 데이터 베이스에 대한 질의, 갱신, 보고서 작성 등 수행
(업무에 필요한 최소한의 권한만 가짐)
계정 생성은 관리자 계정에서만 허용된다
CREATE USER 사용자이름 IDENTIFIED BY 비밀번호
사용자이름 - 대소문자 안 가림
비밀번호 -가림
관리자 계정에서 수행
GRANT 부여할ROLE TO 사용자이름;
관리자 계정에서 권한 회수
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 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로 정보입력
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에서 다른 테이블과 참조된 컬럼을 통해 관계를 형성한다
최소 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'
CREATE TABLE DEPT_COPY
AS
SELECT * FROM DEPARTMENT;
-- CREATE AS SELECT문을 통한 테이블 복사
WHERE 1 = 0;
-- 성립하지 않는 WHERE절을 붙여주면 구조만 가져오고 데이터는 가져오지 않는다
create
as
select
데이터베이스의 객체 정보 수정
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
붙이면 제약조건 삭제하고 컬럼삭제
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'; -- 테이블명 반드시 대문자
또는 테이블정보에서 제약조건의 정보를 확인할 수 있다
ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 PRIMARY KEY(컬럼명)
ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 UNIQUE(컬럼명)
ALTER TABLE 테이블명 MODIFY 컬럼명 CONSTRAINT 제약조건명 NOT NULL
ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건명
ALTER TABLE 테이블명 MODIFY 컬럼명 NULL
CREATE로 정의된 객체를 삭제할 때 사용
DROP TABLE 테이블명
다른 테이블에서 참조하고 있는 경우 삭제 불가 >
CASCADE CONSTRAINT
연결된 제약조건 삭제하고 컬럼삭제
DROP USER 유저명
※ 유저 삭제 시 테이블을 포함한 내부 데이터 모두 삭제