TIL / DB 1주차(3) / Commit / Transaction / 제약조건

병아리코더 아카이브·2023년 8월 31일
0

DB

목록 보기
3/9
post-thumbnail

Commit

  • mariaDB 는 기본적으로 autocommit 이 되어있다.

  • set autocommit= 0 으로 autocommit 미설정이 가능하다.

  • rollback 은 직전 커밋으로 되돌아간다.

  • commit 과 rollback 은 데이터를 커밋하는 것이라 table 삭제를 복원시켜주지 않는다.


Transaction

  • Transaction 은 database 에서 사용되는 쪼갤 수 없는 업무처리의 단위이다.

  • 예를 들어 송금을 들 수 있다. 송금은 A 로부터 출금을 하여 B 에게 입금을 하지만 송금이라는 행위 하나로 보인다. 이럴 경우 출금이 성공했더라도 입금이 실패하면 출금까지 다 rollback 해줘야 한다.
    입금까지 완료를 해야 commit 으로 확정할 수 있다.
    그래서송금은 쪼갤 수 없는 업무 단위이다.

  • 이렇게 쪼갤 수 없는 업무단위로 실행 중 하나의 과정이 실패하면 전부 취소되어야 하는 것이 원자성이다.

  • 그 외 DB를 고치면 다른 곳에서도 똑같이 고쳐진 DB가 보여야 하는 일관성이 있다.

  • 독립성,격리성 은 데이터의 꼬임을 방지하기 위해 동시진행을 막는 것이다.

  • 영속성, 지속성은 트렌젝션의 결과를 영구적으로 저장한다는 개념이다.


제약조건 (CONSTRAINT)

  • 제약조건은 컬럼에 데이터를 넣을 때 특정한 조건을 만족시켜야 할 경우 사용한다.

  • 제약조건으로 기본키(Primary Key) 와 Not Null, 외래키(FOREIGN KEY), 연계참조 무결성 제약조건, UNIQUE 제약조건, CHECK 제약조건 등 이 있다.

기본키 (PRIMARY KEY, PK)

  • 기본키 제약조건 : 중복을 허용하지 않는다 + NULL 허용하지 않는다.

  • 테이블에 종속적이다 : 기본키는 다른 테이블에서는 사용이 안된다. 즉, 테이블 당 하나의 기본키만 가질 수 있다.

  • 1개의 컬럼으로도 만들 수 있지만(일반적) 여러 개의 컬럼을 조합해서도 만들 수 있다.(복합키)

기본키 만드는 방법

1) 테이블 생성시 함께 생성(가장 많이 사용)

  • 테이블 생성 시 컬럼 옆 primary key 를 붙여 생성한다.

2) 이미 만들어진 테이블에 넣는 방식

  • 만들어진 테이블의 컬럼에 기본키를 넣을 때 그 컬럼에 중복된 데이터가 있는지 확인한다.

  • ALTER TABLE [테이블명] ADD CONSTRAINT [제약조건종류] (적용 컬럼) -
    테이블의 속성을 수정하는 ALTER 을 사용한다.
    add constraint primary key를 컬럼에 넣어 기본키로 사용한다.

  • constraint 는 생략이 가능하다

복합키

  • 여러 컬럼을 이용해서 기본키를 만들 수 있다.
  • 이때 외래키를 이용하는 경우도 있는데 이 경우 insert 나 update 에 제한을 주므로 사용하지 않는 것이 좋다.

외래키 (FOREIGN KEY, 참조키)

  • 참조 제약 조건이라고 한다.

  • 다른 테이블의 가져온 키를 뜻한다.

Relation

  • RDBMS (Relational Data Base Management System) 에서 보았듯 관계형 데이터베이스의 특징 상 테이블간 부모-자식 관계를 설정할 수 있다.

  • 일대일, 일대다, 다대다 등의 관계들이 존재한다.

  • 이때 연결되는 선은 실선과 점선에 따라 식별관계, 비식별관계의 의미가 달라진다.

식별관계와 비식별관계

  • 부모의 기본키를 자식의 기본키로 사용하는 경우 '식별관계' 라고 한다.

  • 실선을 사용한다.

  • 이 경우 자식도 중복이 허용이 되지 않기 때문에 부모의 번호를 중복으로 사용할 수 없다.

  • 부모의 기본키를 자식의 기본키로 사용하지 않는 경우 '비식별관계' 라고 한다.

  • 점선을 사용한다.

  • 이 경우엔 부모의 번호는 중복이 되지 않으나 자식은 부모의 번호를 중복으로 사용할 수 있다.

외래키 만드는 방법

1) 만들면서 설정

  • 부모 테이블을 만들고 자식 테이블을 만든다.

  • 자식 테이블에 부모테이블의 컬럼과 동일한 컬럼과 타입을 만든다.
    그리고 FOREIGN KEY([자식컬럼명]) REFERENCE [부모테이블]([부모컬럼명]) 을 붙여 외래키를 만든다.

2) 만들어진 테이블에 추가

  • ALTER TABLE [테이블명] ADD CONSTRAINT [제약조건 타입(적용컬럼)]
    REFERENCES [가져올 테이블명](가져올 컬럼명) -
    자식 테이블의 user_id 컬럼을 add constraint foreign key (user_id) references 로 부모테이블의 user_id 컬럼의 외래키로 변경한다 ( ALTER )

3) 식별관계 추가

  • user_id 도 기본키로 만들고 싶으면 primary key 를 추가한다.

  • 테이블을 만들면서 설정할 수도 있고 만들어진 테이블에 기본키 만들듯 만들 수 있다.


NOT NULL

  • null 을 허용하지 않는 제약조건

  • 이때 null 은 컬럼의 속성으로 취급하기 때문에 속성을 변경하는 DDL 명령어인 ALTER 을 사용한다.

  • ALTER TABLE [테이블명] MODIFY COLUMN [컬럼명 데이터타입(사이즈) not null]
    ( primary key는 alter ~~ add constraint 사용 )

  • 기본키와 마찬가지로 테이블을 만들면서 넣을 수 있고 이미 만들어진 테이블에 추가할 수도 있다.


연계참조 무결성 제약조건

  • 부모 없는 자식이 생기지 않게 하는 것이다.

  • 부모 테이블에 내용이 삭제 될 경우 자식 테이블의 데이터를 지우는 옵션을 제공해준다.

  • ON DELETE CASCADE 를 설정해줘야 부모 테이블 삭제시 자식테이블도 자연히 삭제시켜준다. 그렇지 않으면 부모 테이블 삭제시 일일히 지워주지 않는 한 오류가 발생한다.

  • 부모 테이블의 기본키로 존재하지 않는 데이터를 자식 테이블의 외래키로 사용하려는 경우에도 오류가 발생한다.


UNIQUE 제약 조건

  • ALTER TABLE [테이블 이름] ADD CONSTRAINT [제약조건종류](적용 컬럼명) -
    NULL, 여러개 사용하는 것은 허용하지만 중복은 허용하지 않는 제약조건이다.

  • 중복 시 Duplicate entry '박영수' ~ 라는 오류가 뜬다.

  • 중복만 허용하지 않는 컬럼에 적용하면 좋다.


CHECK 제약조건

  • ALTER TABLE [테이블 이름] ADD CONSTRAINT [제약조건종류](조건) -
    조건에 맞지 않으면 데이터 입력을 하지 않게 하는 제약조건이다.

  • 하지만 제약조건이 desc 나 select 를 통해 보여지지 않는 단점이 있다.

  • 또 조건을 바꾸려면 제약조건을 다시 변경해야 하기 때문에 데이터 속성을 건들이게 되어 지금은 사용하지 않는다.


제약조건 삭제

  • ALTER TABLE [테이블명] DROP [제약조건종류] - 제약조건을 삭제한다.

0개의 댓글

관련 채용 정보