반응형
🍳머리말
tibero는 auto increment와 비슷하게 동작하는 sequence를 지원합니다.
📕 예제1
📔 schema
📑 sequence 생성
CREATE SEQUENCE TEST_SEQ;
📑 table 생성
CREATE TABLE TEST (
ID NUMBER DEFAULT TEST_SEQ.NEXTVAL PRIMARY KEY,
name varchar(255)
);
📑 data 삽입
ID의 default값이 seq.nextval이므로 insert into문에서 column을 명시하지 않아도 자동으로 nextval이 들어갑니다.
INSERT INTO test(name) values('why?');
📑 확인
SELECT * FROM test
📑 되지 않는 경우
default 값을 ddl에 명시 하지 않는 column은 insert into에서 해당 column 생략이 불가합니다. 다음처럼 값을 생략했으므로 constraint violation이 뜨게 됩니다.
CREATE SEQUENCE TEST2_SEQ;
CREATE TABLE TEST2 (
ID NUMBER PRIMARY KEY,
name varchar(255)
);
INSERT INTO test2(name) values('sequence!');
📕 예제2
📔 schema
이를 한꺼번에 해주는 keyword가 있습니다. 'GENERATED AS IDENTITY'입니다. 바로 만들어보죠
📑 table 생성
CREATE TABLE test_identity (
id NUMBER GENERATED AS IDENTITY primary key,
name VARCHAR(30)
);
내부적으로 sequence를 생성해주며 table drop시 sequence도 함께 제거되는 편리한 기능입니다.
📑 내부 sequence확인
SELECT * FROM user_objects WHERE OBJECT_TYPE LIKE 'S%' ORDER BY created desc;
이렇게 table만 생성했는데도 sequence가 생성되었습니다.
📑 table drop 해보기
DROP TABLE test_identity;
상기 sql을 실행해 생성된 sequence 조회시 해당 sequence가 사라진 것을 확인할 수 있습니다.
*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.
'SQL' 카테고리의 다른 글
(SQL) - LeetCode (easy) 577. Employee Bonus (0) | 2023.04.28 |
---|---|
(SQL) - LeetCode (easy) 511. Game Play Analysis I (0) | 2023.04.12 |
(MySQL) - LeetCode (medium) 176. Second Highest Salary (0) | 2022.12.20 |
(MySQL) - LeetCode (easy) 182. Duplicate Emails (0) | 2022.12.15 |
(MySQL) - LeetCode (easy) 182. Duplicate Emails (0) | 2022.12.14 |