create SEQUENCE cno start with 1 INCREMENT BY 1 MAXVALUE 9999 CYCLE NOCYCLE;
-> sequence 는 nocycle로 만들어주는게 좋다 ㅎ
//고객 테이블
create table customer(
c_idx number(4) not null,
c_id nvarchar2(30) not null,
c_name nchar(10) not null,
c_hp nvarchar2(11) not null,
c_email nvarchar2(50) not null,
c_tel nvarchar2(13) null,
c_post char(5) not null,
c_road nvarchar2(200) not null,
c_address nvarchar2(100) not null,
c_level char(1) not null,
c_area char(1) not null,
c_join TIMESTAMP not null,
primary key(c_idx),
unique(c_id),
unique(c_hp)
); //unique key는 따로 잡는걸 추천
//level 테이블
create table clevel(
level_no char(1) not null,
level_nm nvarchar2(30) not null
);
//지역 테이블
create table carea(
area_code char(1) not null,
area_nm nvarchar2(10) not null
);
//point table
create table point(
c_idx number(4) not null,
c_id nvarchar2(30) not null,
c_point number(6) null,
FOREIGN key(C_IDX) REFERENCES CUSTOMER(C_IDX),
FOREIGN key(C_ID) REFERENCES CUSTOMER(C_ID)
) - foreign key는 부모 테이블(reference table) 의 unique key 형태와 동일하게 해야 생성됨
위에서 unique(c_id,c_hp) 했으면 foreign key(c_id,c_hp) / 각 나눴으면 나눠서
=> table 생성함ㅎ
❗ table에 대한 상세 내역을 확인하는 방법
SELECT * from all_constraints cons,all_cons_columns cols
where cols.table_name='테이블명'
nd cons.constraint_name=cols.constraint_name
( SELECT cons.constraint_type,cols.column_name from all_constraints cons,all_cons_columns cols
where cols.table_name='CUSTOMER'
and cons.constraint_name=cols.constraint_name ) => contraint_type,column_name 많이 씀
all_contarints : 사용자 범위 및 설정 정보가 담겨있는 table (key 정보)
all_cons_columns : 컬럼 이름 및 컬럼의 사용된 자료형 , not or not null 확인
r : Foreign Key로 세팅한 컬럼
❗ Foreign key 세팅 시 부모 테이블에 대한 설계 기준
- primary key 한개만 있을 경우 - 가능
- Unique 각각 분리하여 생성 하였을 경우 - 가능
- Unique 복합으로 생성하였을 경우 - Foreign key도 복합으로 생성시 가능
👀 Trigger 생성
create or replace TRIGGER POINTIN
after INSERT on CUSTOMER
for EACH ROW
BEGIN
INSERT INTO point (c_idx,c_id,c_hp,c_point) values (:new.c_idx,:new.c_id,:new.c_hp,1000);
END;
=> insert시 실행되는 트리거 만듬
create or replace TRIGGER POINTDELETE
after DELETE on CUSTOMER
for EACH ROW
BEGIN
DELETE from point where C_IDX=:old.C_IDX and C_ID=:old.C_ID;
END;
=> delete 시 실행되는 트리거 만듬
create or replace TRIGGER 트리거 이름
after INSERT on 부모테이블
for EACH ROW
BEGIN
INSERT INTO 자식테이블 (컬럼) values ( :old.컬럼 or :new.컬럼 )
END;
Trigger 사용 형태
- after : 입력 후
- before : 입력 전
- insert,update,delete 시
- 구문에 ; 필수
- old : 기존 테이블에 값이 있을 경우 백업 테이블에 삽입할 때 사용하는 형태
- new : 테이블에 신규 데이터가 입력 되었을 경우 사용하는 형태
SQL DEVELOPER에서 미러링으로 데이터를 입력 후
입력사항이 필요없을 경우 rollback; => 실제 데이터에 반영하지 않음
commit; => 실제 테이블로 데이터를 반영함
🔽 excel 파일 미러링 함ㅎ
🔽 다음글로 ^^,,
'CLASS > DATABASE' 카테고리의 다른 글
#6-3/ Oracle+mybatis - selectone/like 사용하는 방식 (0) | 2024.09.06 |
---|---|
#6-2/ Oracle - sequence reset, ROW_NUMBER(),view+join (0) | 2024.09.06 |
#5-1 / Oracle - Excel 파일 data입력 , 파일로 저장 (3) | 2024.09.05 |
#4-4 / Oracle + Mybatis 로그인 (0) | 2024.09.04 |
#4-2 / Oracle 실제 테이블에 commit (0) | 2024.09.04 |