DB에 소속돼있는 Table들 구성요소를 부르기 위해 Schema 가 필요하다.
SQL Schema 는 같은 DB 안에 있는 Table 의 모음이고 System Catalog 에 저장이 된다.
Create 문은 새로운 DB를 만드는것으로 권한을 줄수도 있다.
Catalog 는 Schema 의 모음이다.
Giving R to name - 이름을 줘야한다.
그리고 필요한 attribute 를 적시하고 Domain 있어야하고 Constraint 피료하다.
Alter 문으로 Table 을 수정하고 변경할수있다.
Base tables 는 실제 Record 가 생성되고 저장되는 table 이다.
Virtual Relations 는 쿼리결과를 부르는 이름으로 떄로는 저장하거나 저장 한하룻도있따.
이것들이 왜 필요하나?
복잡한 Query 를 Simple 하게 해주고, 저장하지 않아도 되는건 그떄그떄 자주 Access 하는것도 해줌,,
Numeric Data tpye 이 있따.
Oracle 에서는 Number 로 쓰인다.
또한 소수점도 표현이 가능한데 DECIMAL(10,2) 이면 10자리로 2자리 소수점까지 표현 가능하게 한다.
Character-string data type 도 가능하다.
4K 가 최대지만 고정길이,가변길이가 있다.
Fix Length 는 CHAR(N)
Variable Length 는 VARCHAR(N) 이 가능하다.
또한 CLOB(Character Large Object) 는 4k 보다 더 큰 규모의 Text 를 저장할때 쓴다
CLOB(20M) 을 쓰게 된다면 이 Data Type 은 20M data 저장 가능하다는 뜻.
Binary Code를 저장하겠다는것이고
BIT(N) 으로 쓸수있따.이것 또한 4K 까지 밖에 허용하지 안흔다.
하지만 이보다 큰 Data 로 저장하려면 BLOB(Binary Large Object) 를 사용해서 BLOB(N) 을 사용하면 된다.
Boolean 가능하다.
또한 Date and TIme 이 가능한데 이러한 부분은 String 으로도 저장이 가능하지만 만약 몇일전, 몇년 후 이런것들은 String 에서 감당하기 좀 어렵다,,
하지만 Date,TIme은 그런 기능을 다 허용한다.
Date,Time 에는 유효한 날짜가 허용 되어야한다.
TimeStamp 는 Date,Time 이 합처진것이다.
또한 interval 로도 저장가능한데 구간정보도 저장가능하다는 말이다.
C언어에서 #define 같이 변환해주는거 같다.
Domain 은 열에 대해 받아 들일수 있는값이다.
객체를 선언해서 저장할수 있따.
struct 같은 느낌이다.
그래서 테이블 정의에 Constraints 를 적시해줘야한다.
Attribute 에 제약조건을 적시하는것으로 DEFAULT 는 삽입할때 비워있으면 DEFUALT 로 채워라는 말이다.
NULL 은 아무것도 없으면 NULL 로 채우고 NOT NULL 이면 NULL 이 허용되지 않는것이다.
CHECK 는 복잡한 조건문으로 Dnumber INT NOT NULL CHECK (Dnumber > 0 and Dnumber <10) 이면 (1~9)까지의 값이 들어올수 있다는 말이다.
PK 가 하나 일때는 Dnumber INT PRIMARY KEY 로 설정할수있고
PK 가 두개 이상일떄는 PRIMARY KEY(State,Number) 로 설정할수있다.
UNIQUE 는 Candidate Key를 적시하는것으로 똑같이 하나면 위와같이 두개 이상이면 밑에와 같이 작성하면 된다.
FOREIGN KEY 는 위반이 생겼을떄 Reject 한다.
그리고 추가적인 Action 으로는 SET NULL,CASCADE,SET DEFAULT 가 있다.
CASCADE 는 일관성 유지하기에 매우 용이하다.
CONSTRAINT reg_no_u UNIQUE (State,Number) 는 명시적으로 이름을 주는것으로 적시하지 않으면 System 이 자동으로 이름 만들어 낸다. 그것을 Catalog 에 저장한다.
SELECT 는 Table 안의 Content 를 보고 싶다는 뜻이다.
질의문으로 조회하는것을 말한다.
다중의 Tuple 조회하는것도 허용한다.
INSERT 는 삽입 UPDATE 는 수정 DELETE 는 삭제이다.
1개 이상 Tuple을 넣을때 Attribute 순서를 지켜서 넣으면 된다.
근데 값을 넣을때 Attribute 값을 빼고 넣으면 자동으로 NULL 이다. 근데 PK를 까먹고 안넣으면 바로 Entity Entegrity Constraints 이다.
어떤 조건을 충족되 것을 삭제 할건가 적시해준다.
한 테이블만 삭제가 가능하다.
delete from,drop from 차이점은 Drop 은 table 자체를 없애버리는 것이고 delete 는 table 내 Data를 없앤다.
하지만 누군가 참조 하고있다면?
어떤 Trigger action 이 걸려있는지 확인해야한다.