반응형
- IDENTITY
기본키를 사용자가 다음 숫자를 예상하고 입력하는것은 불가능하다.
그래서 다양한 방법이 존재하는데 그중하나가 identity를 사용하는것이다 (SQL SERVER 2008이하)
형식: IDENTIY(시작할 숫자값, 증가할 숫자값)
CREATE TABLE PRODUCT(
PRODUCTNO INT IDENTITY(1,1) PRIMARY KEY, --곧바로 이렇게 데이터 타입에 넣어줘도 하단에넣는거랑 똑같다.
-- 기존 앞서 맨 아랫줄에 PRRMARY KEY 따로주던 방식과 같다!
PRODUCTNAME VARCHAR(10),
MAKEDAY DATETIME,
PRICE FLOAT,
PRODUCTINFO VARCHAR(MAX),
)
INSERT INTO PRODUCT
(
PRODUCTNAME,
MAKEDAY,
PRICE,
PRODUCTINFO
)
VALUES
(
'ProductA',
getdate(),
105.5,--숫자틑 ' 필요없다
'Product INFOA'
)
INSERT INTO PRODUCT
(
PRODUCTNAME,
MAKEDAY,
PRICE,
PRODUCTINFO
)
VALUES
(
'ProductB',
getdate(),
105.5,--숫자틑 ' 필요없다
'Product INFOA'
)
select * from product;
하지만 이미 PRODUCTNO 칼럼에 1,2,3,7,10 이렇게 저장되어있다면
다음값으로 11을 원해도 중간에 비어있는 5,6등을 매꾸는 작업을 할 가능성이 있다고 한다.
이건 오류로 이어질 수 있음!
대안
1.프로시저에서 SELECT로 다음 값 조회 후 INSERT시 사용.
2.값 삽입후 검증
3. MSSQL2012부터 SEQUENCE사용 권장
- SEQUENCE
CREATE SEQUENCE PRODUCTSEQ
AS int
START WITH 0
INCREMENT BY 1
MINVALUE 0
MAXVALUE 1000000000
NO CYCLE;
CREATE SEQUENCE 시퀀스이름
AS int --int형
START WITH 0 --시작값
INCREMENT BY 1 --증가값
MINVALUE 0 --최소값 , 음수도가능
MAXVALUE 1000000000 --최대값
NO CYCLE; --순환없이, 이거없으면 다시 처음부터 순화한다. ex) 0~100이면 100다음 다시 0
쿼리문에서 이와같이 작성후 실행해 시퀀스를 만들 수 도 있지만
이와같이 GUI 인터페이스로 새 시퀀스를 만들 수 있다.
증가값, 최소, 최대값등 전부 지정할 수 있다.
INSERT INTO PRODUCT
(
PRODUCTNO,
PRODUCTNAME,
MAKEDAY,
PRICE,
PRODUCTINFO
)
VALUES
(
--NEXT VALUE FOR 시퀀스이름
NEXT VALUE FOR PRODUCTSEQ, -- 시퀀스가 현재값을 계속 기억한다.
'BBBPRODUCT',
getdate(),
500,
'PINFOSSABABABAB'
)
SELECT * FROM PRODUCT
이와같이 VALUES에서 NEXT VALUE FOR 시퀀스 이름의 형태로 사용해준다.
결과는 아래와같다. PRODUCTNO가 증가하는게 보인다!
반응형
'SQL' 카테고리의 다른 글
MSSQL 저장 프로시저 내용 검색 (0) | 2022.10.06 |
---|---|
MSSQL 4. ORDER BY (0) | 2022.08.12 |
MSSQL 2.DROP TABLE, ALTER TABLE (0) | 2022.08.04 |
MSSQL 1.무결성 제약조건 - FOREIGN KEY, CHECK, UNIQUE (0) | 2022.08.04 |
MSSQL 1.무결성 제약조건 - NULL, PRIMARY KEY (0) | 2022.08.04 |