728x90
데이터 딕셔너리
다양한 객체들의정보를 저장하고 있는 시스템 테이블
USER_TABLES
현재 이 계정이 가지고 있는 테이블들의 전반적인 구조를 확인할 수 있는 데이터
SELECT * FROM USER_TABLES;
USER_TAB_COLUMNS
모든 컬럼을 확인할 수 있는 데이터
SELECT * FROM USER_TAB_COLUMNS
INSERT
데이터를 추가할 수 있는 구문. 한 행으로 추가되며 값의 순서가 중요하다
-- 1)
INSERT INTO 테이블명
VALUES (컬럼값1, 컬럼값2, ... )
-- 2)
INSERT INTO 테이블명(컬럼명1, 컬럼명2, ...)
VALUES (값1, 값2, ...)
/*
INSERT INTO MEMBER(MEMBER_ID, MEMBER_PWD, MEMBER_NAME, MEMBER_DATE)
VALUES ('user01', 'pass01', '홍길동', '2021-02-01');
*/
INSERT INTO MEMBER VALUES ('user01', 'pass01', '홍길동', '2021-02-01');
-- 1행이(가) 삽입되었습니다.
INSERT INTO MEMBER VALUES ('user02', 'pass02', '김길동', SYSDATE);
INSERT INTO MEMBER VALUES ('user03', 'pass03', '이길동', '21/02/02');
INSERT INTO MEMBER VALUES (NULL, NULL, NULL, SYSDATE);
-- 아이디, 비밀번호, 이름이 NULL값으로 들어감
INSERT INTO MEMBER VALUES ('user03', 'pass03', '박길동', SYSDATE);
-- 중복값 입력 가능함
-- => NULL값이나 중복된 값은 유효하지 않은 값들이므로,
-- 유효한 데이터값을 유지하기 위해서는 제약조건을 걸어줘야 한다
728x90
제약 조건 CONSTRAINTS
- NOT NULL, UNIQUE, CHECK, PRIMARY KEY, FOREIGN KEY
- 원하는 데이터값만을 유지하기 위해서(보관하기 위해서) 특정 컬럼마다 설정하는 제약
- 제약조건이 부여된 컬럼에 들어올 데이터에 문제가 없는지 자동으로 검사할 목적
- 컬럼에 제약조건을 부여하는 방식
1) 컬럼 레벨: 컬럼명 자료형 제약조건 => 제약조건을 부여하고자 하는 컬럼 뒤에 기술
2) 테이블레벨
NOT NULL
- 해당 컬럼에 반드시 값이 존재해야할 경우에 사용.
(NULL 값이 절대 들어와서는 안되는 컬럼)
- 삽입/수정시 NULL값을 허용하지 않도록 제한
NOT NULL 제약조건은 컬럼레벨 방식 밖에 안됨
CREATE TABLE MEM_NOTNULL(
MEM_NO NUMBER NOT NULL,
MEM_ID VARCHAR2(20) NOT NULL,
MEM_PWD VARCHAR2(20) NOT NULL,
MEM_NAME VARCHAR2(20) NOT NULL,
GENDER CHAR(3),
PHONE VARCHAR2(15),
EMAIL VARCHAR2(30)
);
INSERT INTO MEM_NOTNULL
VALUES (2, NULL, NULL, NULL, NULL, NULL, NULL);
-- NOT NULL 제약조건에 위배되어 오류발생
-- ORA-01400 : cannot insert NULL into ("DDL"."MEM_NOTNULL"."MEM_ID")
INSERT INTO MEM_NOTNULL
VALUES (1, 'user01','pass01', '홍길동', '남', '010-1234-4321', 'hgd@email.com');
INSERT INTO MEM_NOTNULL
VALUES (2, 'user02','pass02', '김길동', NULL, NULL, NULL);
-- NOT NULL 제약조건이 부여되어있는 컬럼에는 반드시 값이 존재해야 함
INSERT INTO MEM_NOTNULL
VALUES (3, 'user01','pass03', '박길동', '남', NULL, NULL);
-- 중복값에 대한 제약조건은 걸지 않았기 때문에 중복값은 입력됨
UNIQUE
- 컬럼에 중복값을 제한하는 제약조건
- 삽입/수정시 기존에 해당 컬럼값 중 중복값이 있을 경우, 추가 또는 수정이 되지 않게 제약
* UNIQUE 제약조건은 컬럼레벨/테이블레벨 방식 둘다 가능.
CREATE TABLE MEM_UNIQUE(
MEM_NO NUMBER NOT NULL,
MEM_ID VARCHAR2(20) NOT NULL UNIQUE, -- 컬럼레벨 방식
MEM_PWD VARCHAR2(20) NOT NULL,
MEM_NAME VARCHAR2(20) NOT NULL,
GENDER CHAR(3),
PHONE VARCHAR2(15),
EMAIL VARCHAR2(30)
);
-- DROP TABLE : 테이블 삭제
DROP TABLE MEM_UNIQUE; --Table MEM_UNIQUE이(가) 삭제되었습니다.
CREATE TABLE MEM_UNIQUE(
MEM_NO NUMBER NOT NULL,
MEM_ID VARCHAR2(20) NOT NULL,
MEM_PWD VARCHAR2(20) NOT NULL,
MEM_NAME VARCHAR2(20) NOT NULL,
GENDER CHAR(3),
PHONE VARCHAR2(15),
EMAIL VARCHAR2(30),
UNIQUE (MEM_ID) -- 테이블레벨 방식
);
INSERT INTO MEM_UNIQUE VALUES(1, 'user01', 'pass01', '홍길동', '남', NULL, NULL);
INSERT INTO MEM_UNIQUE VALUES(2, 'user02', 'pass02', '이길동', '남', NULL, NULL);
INSERT INTO MEM_UNIQUE VALUES(3, 'user02', 'pass03', '김길동', NULL, NULL, NULL);
-- UNIQUE 제약 조건에 위배되어 오류 발생
-- ORA-00001: unique constraint (DDL.SYS_C007040) violated
-- 오류 구문으로 제약조건명을 알려주지만 (unique constraint) 어떤 컬럼에 문제가 있는지
-- 컬럼명을 알려주지는 않으므로 제약조건을 모르면 파악하기 어려움(ORA-00001: unique constraint)
-- 제약조건명을 지정해줄 수 있다.
>> 제약조건 부여시 제약조건명도 같이 지정하는 표현방법
1) 컬럼레벨 방식
CREATE TABLE 테이블명(
컬럼명 자료형 CONSTRAINT 제약조건명 제약조건,
컬럼명 자료형,
...
);
2) 테이블레벨 방식
CREATE TABLE 테이블명(
컬럼명 자료형,
컬럼명 자료형,
...
CONSTRAINT 제약조건명 제약조건 (컬럼명)
);
CREATE TABLE MEM_CON_NM(
MEM_NO NUMBER NOT NULL,
MEM_ID VARCHAR2(20) NOT NULL,
MEM_PWD VARCHAR2(20) NOT NULL,
MEM_NAME VARCHAR2(20) CONSTRAINT MEM_NAME_NN NOT NULL, -- 컬럼레벨 방식
GENDER CHAR(3),
PHONE VARCHAR2(15),
EMAIL VARCHAR2(30),
CONSTRAINT MEM_ID_UQ UNIQUE (MEM_ID) -- 테이블레벨 방식
);
INSERT INTO MEM_CON_NM VALUES (1, 'user01', 'pass01', '홍길동', NULL, NULL, NULL);
INSERT INTO MEM_CON_NM VALUES (2, 'user01', 'pass02', '김길동', NULL, NULL, NULL);
-- 오류: ORA-00001: unique constraint (DDL.MEM_ID_UQ) violated
-- => MEM_ID_UQ 제약조건명을 알려줌
728x90