본문 바로가기
CLASS/DATABASE

#6-1 / Oracle - data 미러링 , table 제작 상세내역 확인 , trigger

by hingu 2024. 9. 6.
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 확인

 

: Foreign Key로 세팅한 컬럼

 

 

 

❗ Foreign key 세팅 시 부모 테이블에 대한 설계 기준

  1. primary key 한개만 있을 경우 - 가능
  2. Unique 각각 분리하여 생성 하였을 경우 - 가능
  3. 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 파일 미러링 함ㅎ

data.xlsx
0.02MB

 

 

🔽 다음글로 ^^,,