Db_기타

마지막으로 작업한것들은 항상 transaction 을 완료해야한다.

Transaction : 연속적으로 한번에 일어나야하는 동작들 (commit, rollback)

commit : 트랜잭션을 마무리하는 명령 (저장)

rollback : 이전 상태로 되돌린 후에 마무리 (되돌리면서 마무리) 예를들어서 어떤 프로그램 설치할 때, 설치 중단되면, 되돌리면서 마무리.

커밋, 롤백 둘 중 하나 해야한다.

테이블이 변경됐을 때 트랜잭션이 변경된다.

create sequence temp_seq;
create table temp
(
seq_no number constraint temp_no_pk primary key,
user_name varchar2(50) constraint temp_name_nn not null,
user_addr varchar2(1000)
);

insert into temp
( seq_no, user_name, user_addr)
values
(TEMP_SEQ.NEXTVAL,'aaa','seoul');

select * from temp;
insert into temp
( seq_no, user_name, user_addr)
values
(TEMP_SEQ.NEXTVAL,'ba','newyork');
commit;

create sequence temp_seq;
create table temp
(
seq_no number constraint temp_no_pk primary key,
user_name varchar2(50) constraint temp_name_nn not null,
user_addr varchar2(1000)
);

insert into temp
( seq_no, user_name, user_addr)
values
(TEMP_SEQ.NEXTVAL,'aaa','seoul');

select * from temp;
insert into temp
( seq_no, user_name, user_addr)
values
(TEMP_SEQ.NEXTVAL,'aaa','seoul');

--자식 테이블은 FR키를 갖는다.
CREATE TABLE TEMP_CHILD
(
CHILD_SEQ NUMBER CONSTRAINT CHILD_SEQ_PK PRIMARY KEY,
CHILD_NAME VARCHAR2(50) CONSTRAINT CHILD_NAME_NN NOT NULL,
--FK로 쓸것이다.
SEQ_NO NUMBER CONSTRAINT CHILD_NO_FK REFERENCES TEMP(SEQ_NO) ON DELETE CASCADE
);

create sequence temp_seq;
create table temp
(
seq_no number constraint temp_no_pk primary key,
user_name varchar2(50) constraint temp_name_nn not null,
user_addr varchar2(1000)
);

insert into temp
( seq_no, user_name, user_addr)
values
(TEMP_SEQ.NEXTVAL,'aaa','seoul');
commit;
select * from temp;
insert into temp
( seq_no, user_name, user_addr)
values
(TEMP_SEQ.NEXTVAL,'aaa','seoul');

--자식 테이블은 FR키를 갖는다.
CREATE TABLE TEMP_CHILD
(
CHILD_SEQ NUMBER CONSTRAINT CHILD_SEQ_PK PRIMARY KEY,
CHILD_NAME VARCHAR2(50) CONSTRAINT CHILD_NAME_NN NOT NULL,
--FK로 쓸것이다.
SEQ_NO NUMBER CONSTRAINT CHILD_NO_FK REFERENCES TEMP(SEQ_NO) ON DELETE CASCADE
);

select * from temp;

insert into temp_child
values
(100,'child_name',1);
select * from temp_child;

delete from temp; --부모 테이블의 모든 데이터를 지운다.

--부모 테이블은 데이터가 살아나지만, 자식 테이블은 안 살아난다. 그래서 항상 조심해야한다.
rollback;

테이블 삭제시, 자식테이블 부터 삭제해야한다. 이건 rollback 해도 안살려난다.

drop table temp_child;
drop table temp;

on delete cascade 안 걸어놓은 자식테이블 삭제 안하고 부모테이블 먼저 삭제하면 오류뜬다.


© 2018. All rights reserved.

Powered by Hydejack v8.5.2