1.  일련번호 필드

 

🍊 기본키는 레코드의 유일성을 보장할 뿐만 아니라 관계를 형성하는 중요한 역할

🍊 그러나 기본키가 강제 규정은 아니어서 의무적으로 만들어야 하는 것은 아니며 기본키로 쓸만한 필드가 없는 경우도 발생

 

🔖 다음은 슈퍼마켓의 매출 데이터이며 누가 어떤 상품을 구매했는지 기록

손님
상품
단군
지팡이
고주몽
고등어
박혁거세
계란
대조영
라면
박혁거세
화장지
고주몽
라면

 

  📍 이 경우 중복되지 않는 필드가 없어 기본키로 쓸만한 적당한 필드가 없음

  📍 정보 저장은 가능하지만 레코드를 식별하는 수단이 없어 검색이나 참조가 번거롭다.

     🔎  고주몽이 라면을 반품했다면 구입 기록을 삭제해야 하나 고주몽을 찾아 삭제하면 고등어도 같이 반품되고,

            라면을 찾아 삭제하면 대조영이 산 라면도 삭제 된다.

     🔎  손님과 상품을 모두 점검해서 레코드를 찾아야 하는데, 이 방법도 고주몽이 라면을 어제도 사고 오늘도 샀다면 완벽하지 않음.

 

⚡️ 억지로라도 기본키를 만드는 것이 좋은데 이때 유용한 값이 일련번호

⚡️ 계속 증가하는 일련번호를 붙이면 NULL도 아니고 고유성도 부여할 수 있음

 

 

🔖 위 테이블에 판매번호 필드를 추가

 

판매번호
손님
상품
1
단군
지팡이
2
고주몽
고등어
3
박혁거세
계란
4
대조영
라면
5
박혁거세
화장지
6
고주몽
라면

 

  📍 이제 일련번호만 알면 레코드를 특정할 수 있음

 

 

⚡️ 정수값 하나로 레코드를 식별할 수 있어 다른 조건은 더 필요 없다

⚡️ 판매번호를 PK로 지정하면 인덱스까지 생성하여 검색 속도가 빨라지고 다른 테이블과 관계를 맺을 수도 있음

⚡️ 일련번호를 붙이는 방법이 DBMS별로 조금씩 달라 각각 따로 익혀야 하는 불편함이 있음

 


 

 

2.  시퀀스

 

🍊 오라클과 SQL Server는 일련번호를 관리하는 시퀀스(SEQUENCE) 객체를 지원

      ➡️ 시퀀스는 객체를 초기화해 놓기만 하면 요청할 때마다 증가한 값을 자동으로 돌려줌

 

 

 

3.  자동 생성 시퀀스

 

🍊 시퀀스는 보통 특정 테이블의 필드 하나를 위해 생성하며 공유하는 경우가 적다.

🍊 따로 객체를 만드는 것보다 테이블을 만들 때 아예 시퀀스 필드로 지정하는 것이 효율적

    💡 단, 이 기능은 오라클만 지원

 


 

 

4.  ID 필드

 

🍊 SQL Server는 일련번호를 붙이는 더 간편한 방법을 제공한다.

🍊 자동 생성 시퀀스는 지원하지 않지만 비슷한 기능의 IDENTITY 속성이 있다.

 

 

 

5.  AUTO_INCREMENT

 

💡 MariaDB는 시퀀스를 지원하지 않는다.

💡 대신 IDENTITY와 거의 유사한 AUTO_INCREMENT 구문을 지원한다.

💡 필드 선언문에 AUTO_INCREMENT라고 선언하면 자동 증가하는 일련번호가 매겨진다.

CREATE TABLE tSale
(
saleno INT AUTO_INCREMENT PRIMARY KEY,
customer NCHAR(10),
product NCHAR(30)
);
 

 

INSERT INTO tSale (customer, product) VALUES ('단군', '지팡이');
INSERT INTO tSale (customer, product) VALUES ('고주몽', '고등어');
 

 

📌 saleno는 1부터 1씩 증가하는 일련번호이며 초기값, 증가값은 지정할 수 없다.

📌 삽입할 때 saleno는 빼고 나머지 필드의 값만 지정

 

 

 

DELETE FROM tSale WHERE saleno = 2;
INSERT INTO tSale (customer, product) VALUES ('박혁거세', '계란');
 

 

📌퀀스나 IDENTITY와 마찬가지로 삭제한 일련번호는 재사용하지 않음

📌 2번을 지운 후 삽입하면 3번으로 들어감

 

 

 

 

⚡️ 일련번호를 특정값으로 지정하는 것은 항상 가능하다.

⚡️ 다만 PK 제약상 기존 일련번호와 중복되지는 말아야

 

INSERT INTO tSale (saleno, customer, product) VALUES (2,'고주몽', '고등어');
 

 

 

📌 2번 레코드를 제자리에 다시 삽입.

 

 

 

 


 

 

💡 일련번호를 특정값으로 리셋할 때는 ALTER 명령을 사용

💡 일련번호를 리셋하면 이후 삽입하는 레코드는 리셋한 번호부터 순서대로 증가하는 값을 받는다.

💡 최후값을 알아낼 때는 LAST_INSERT_ID() 함수를 사용

 

ALTER TABLE tSale AUTO_INCREMENT = 100;
INSERT INTO tSale (customer, product) VALUES ('왕건', '너구리');
 

 

 

// 다음은 왕건이 구입한 너구리의 구매 기록을 찾아 짜파게티로 변경.
UPDATE tSale SET product = '짜파게티' WHERE saleno = LAST_INSERT_ID();
 

 


 

💡 자동 증가하는 일련번호 필드를 만드는 방법이 DBMS마다, 버전에 따라 다름

💡 단순히 자동 증가 필드를 만드는 것만이 목적이라면 다음 방법을 쓰는 것이 무난하다.

 


 *
오라클 : saleno INT GENERATED AS IDENTITY PRIMARY KEY

 * SQL Server : saleno INT IDENTITY PRIMARY KEY

 * MariaDB : saleno INT AUTO_INCREMENT PRIMARY KEY

 

⚡️ 이렇게만 해도 자동 증가열의 이점을 충분히 누릴 수 있고, 용어와 구문이 다를 뿐 개념은 같음

 

 

 

 

 

[ 내용 참고 : IT 학원 강의 ]

 

+ Recent posts