반응형
/********************************************************************************************
-- Title : [2k5] IDENTITY 속성과 만들기 및 생성 제약
-- Reference : dbrang.tistory.com
-- Key word : identity insert ident_current alter table
********************************************************************************************/
-- 오라클에서는 SEQUENCE라고 해서 씨퀄의 IDENTITY와 같은 기능을 하나의 개체로 운영한다.
-- 씨퀄도 동작하기는 하나의 개체처럼 동작하는건 아닌가 싶다.
-- 개뿔도 모르는 나의 개인적인 생각..^.^;;;;;;

DROP TABLE ttt;

CREATE TABLE ttt
( a INT NOT NULL IDENTITY
, b INT NOT NULL
);

INSERT INTO ttt (b)
SELECT 1 UNION ALL
SELECT 2 UNION ALL
SELECT 3 UNION ALL
SELECT 4 UNION ALL
SELECT 5 UNION ALL
SELECT 6 UNION ALL
SELECT 7 UNION ALL
SELECT 8 UNION ALL
SELECT 9 UNION ALL
SELECT 10;

SELECT IDENT_CURRENT('ttt'); --10

--delete 후 현재 id = 10
DELETE FROM ttt WHERE a > 5;

SELECT IDENT_CURRENT('ttt'); --10

--truncate 후
TRUNCATE TABLE ttt;

SELECT IDENT_CURRENT('ttt'); --1 /* 데이터가 없을 때는 1로 잡나부다..*/

INSERT INTO ttt (b) VALUES (1);
INSERT INTO ttt (b) VALUES (2);

SELECT IDENT_CURRENT('ttt'); --2

--identity_insert랑은? 상관없다
SET IDENTITY_INSERT ttt ON;

INSERT INTO ttt (a,b)
SELECT 3,3 UNION ALL
SELECT 4,4 UNION ALL
SELECT 5,5;

SELECT IDENT_CURRENT('ttt'); --5

SET IDENTITY_INSERT ttt OFF;

--나중에 identity 추가 했을 때는?
DROP TABLE ttt;

CREATE TABLE ttt
( a INT NOT NULL
, b INT NOT NULL
);

INSERT INTO ttt (a,b)
SELECT 1,1 UNION ALL
SELECT 2,2 UNION ALL
SELECT 3,3 UNION ALL
SELECT 4,4 UNION ALL
SELECT 5,5;

ALTER TABLE ttt
ADD c INT NULL;

ALTER TABLE ttt
ALTER COLUMN c INT NOT NULL IDENTITY;  -- alter column으론 identity 설정 불가
  
ALTER TABLE ttt
DROP COLUMN c;
ALTER TABLE ttt
ADD c INT NULL IDENTITY; -- add column identity에서 null이면 설정 불가
  
ALTER TABLE ttt
ADD c INT NOT NULL IDENTITY;
SELECT IDENT_CURRENT('ttt') --5

--그럼 alter table ~alter column에서 identity 안쓰면 사라질까?
ALTER TABLE ttt
ALTER COLUMN c SMALLINT NOT NULL;

SELECT IDENT_CURRENT('ttt') --5 /* 그냥 있돠.. */

반응형

+ Recent posts