SQLD에서는 DDL DML DCL TCL을 분리해서 기억 DDL Create Alter Drop Rename DML Insert Update Delete Select DCL Revoke Grant TCL Commit Rollback Savepoint
DML은 무슨 데이터를 원하는지만을 명세함. As-Is
절차적 데이터 조작어는 어떻게(How) 접근할것인지를 명세한다. PL/SQL, T-SQL
CREATE TABLE PRODUCT (
PROD_ID VARCHAR2(10) NOT NULL,
PROD_NM VARCHAR2(100) NOT NULL,
REG_DT DATE NOT NULL,
REGR_NO NUMBER(10),
CONSTRAINT PRODUCT_PK PRIMARY KEY (PROD_ID)
);
pk 정의 시 CONSTRAINT PK이름 PRIMARY KEY (컬럼)
** SQL서버에서는 여러개의 컬럼ㅇ르 동시에 수정하는 구문은 지원하지 않는다.
** 괄호를 사용하지않는다.
'기본키를 구성하는 컬럼이 복수일 수는 있어도'
'기본키가 복수일 수는 없다'
테이블에 중복된 값은 허용하지 않으나 NULL값은 허용한다.
CREATE TABLE EMP(
EMP_NO VARCHAR2(10) PRIMARY KEY,
EMP_NM VARCHAR2(30) NOT NULL,
DEPT_CD VARCHAR2(4) DEFAULT '0000' NOT NULL,
JOIN_DATE DATE NOT NULL,
REGIST_DATE DATE NULL <<<<< 이와같이 NULL만 작성 만약 조회시에는 IS NULL
);
SELECT COUNT(*) FROM PRODUCT; SELECT COUNT(REGR_NO) FROM PRODUCT; 1번의 조회 결과는 3이나온다. 2번의 결과는 REGR_NO 중 NULL값이 존재하므로 2가 출력된다.
FK는 null값을 가질수있다
여러개도 가질수있다.
테이블생성시 설정 가능하다.
참조무결성제약을 받을수있다.
CHECK는 값의 범위 또는 패턴을 정의할 때 사용하는 제약 조건이다.
예를 들면 특정 열에 들어가는 문자열이 반드시 5글자 이상이어야 한다거나,
특정 열에 들어가는 숫자는 반드시 1000을 넘어야 한다는 조건 등을 설정해 두는 것이다.
인라인(inline) 제약 조건 정의
-- 제약 조건 이름 미기입 시
CREATE TABLE [테이블 이름](
(다른 열 정의 문법 생략),
[열 이름] [열 자료형] CHECK [해당 열의 조건 설정]
);
-- 제약 조건 이름 기입 시
CREATE TABLE [테이블 이름](
(다른 열 정의 문법 생략),
[열 이름] [열 자료형] CONSTRAINT [제약 조건 이름] CHECK [해당 열의 조건 설정]
);
아웃오브라인(out-of-line) 제약 조건 정의
CREATE TABLE [테이블 이름](
[지정할 열 이름] [지정할 열 자료형],
(다른 열 정의 문법 생략),
CONSTRAINT [제약 조건 이름] CHECK [해당 열의 조건 설정]
);
Oracle 기준
추가
ALTER TABLE {TABLE_NAME} ADD {COLUMN_NAME}{DATA_TYPE}
제거
ALTER TABLE {TABLE_NAME} DROP COLUMN {COLUMN_NAME};
RENAME {BEFORE_TABLE_NAME} TO { NEW_TALBE_NAME }
CASECADE : 연쇄
RESTRICT : 삭제방지
DEPENDENT : 입력방지로 기억하자 당분간은..
컬럼 명시하면 not null이 아닌건 다들어간다
컬럼을 명시하지않으면 무조건 모든 값을 순서에 맞게 작성
delete는 로그를 남기지만 + 디스크 사용량을 초기화하지않는다
truncate는 로그를 남기지 않는다. + 디스크 사용량을 초기화한다.
1. Dirty Read : T/S이 수정되었지만 데이터가 커밋이 되지 않은 것을 읽는 것
2. Non-Repeatable Read : 한T/S에서 같은쿼리를 두번수행 >> 그사이에 다른 T/S이 수행되어 두 쿼리 결과가 다르게 나타남
3. Phantom Read : 한/TS에서 같은 쿼리를 두번실행 >> 1쿼리에서없던 유령 레코드가 두번째 쿼리에서 나타나는것
**조건 : 오토커밋은 꺼져있다.
오라클 DDL 수행후 자동 커밋
SQLS는 DDL 문장 수행 후 자동으로 커밋되지않는다.