MySql에 Sequence만들기
1. 시퀀스를 저장할 테이블 생성
CREATE TABLE `TB_SEQUENCE` (
`SEQ_NM` VARCHAR(30) NOT NULL COMMENT '시퀀스명',
`CURRVAL` BIGINT NULL COMMENT '현재 값'
);
ALTER TABLE `TB_SEQUENCE` ADD CONSTRAINT `PK_TB_SEQUENCE` PRIMARY KEY (
`SEQ_NM`
);
2. 시퀀스를 생성하는 프로시저 생성
DELIMITER $$
CREATE PROCEDURE `create_sequence` (IN the_name text)
MODIFIES SQL DATA
DETERMINISTIC
BEGIN
DELETE FROM TB_SEQUENCE WHERE SEQ_NM = the_name;
INSERT INTO TB_SEQUENCE VALUES(the_name, 0);
END
3. 시퀀스의 다음 값을 가져오는 함수 생성
DELIMITER $$
CREATE FUNCTION `nextval` (the_name VARCHAR(30))
RETURNS BIGINT UNSIGNED
MODIFIES SQL DATA
DETERMINISTIC
BEGIN
DECLARE ret BIGINT UNSIGNED;
UPDATE TB_SEQUENCE SET CURRVAL = CURRVAL +1 WHERE SEQ_NM = the_name;
SELECT CURRVAL INTO ret FROM TB_SEQUENCE WHERE SEQ_NM = the_name LIMIT 1;
RETURN ret;
END
4. 프로시저를 이용해 시퀀스 생성 및 nextval 조회
CALL create_sequence('Test'); #시퀀스 생성
SELECT nextval('Test') FROM DUAL; #nextval 조회
# 오류 사례 1
- 시퀀스의 다음 값을 가져오는 함수 생성할 때 아래와 같은 오류 발생
DELIMITER $$
CREATE FUNCTION `nextval` (the_name VARCHAR(30))
RETURNS BIGINT UNSIGNED
MODIFIES SQL DATA
DETERMINISTIC
BEGIN
DECLARE ret BIGINT UNSIGNED;
UPDATE TB_SEQUENCE SET CURRVAL = CURRVAL +1 WHERE SEQ_NM = the_name;
SELECT CURRVAL INTO ret FROM TB_SEQUENCE WHERE SEQ_NM = the_name LIMIT 1;
RETURN ret;
END
/* SQL 오류 (1419): You do not have the SUPER privilege and binary logging is enabled (you might want to use the less safe log_bin_trust_function_creators variable) */
- aws접속 후 파라미터 변경

Confluence 권한 부여
GRANT ALL PRIVILEGES ON confluence.* TO 'hpp(계정 이름)'@'%';
-
DB 재실행
-
기존 소스 실행
DELIMITER $$
CREATE FUNCTION `nextval` (the_name VARCHAR(30))
RETURNS BIGINT UNSIGNED
MODIFIES SQL DATA
DETERMINISTIC
BEGIN
DECLARE ret BIGINT UNSIGNED;
UPDATE TB_SEQUENCE SET CURRVAL = CURRVAL +1 WHERE SEQ_NM = the_name;
SELECT CURRVAL INTO ret FROM TB_SEQUENCE WHERE SEQ_NM = the_name LIMIT 1;
RETURN ret;
END
참고
MySQL 1419 error - “You do not have the SUPER privilege and binary logging is enabled” 해결 방법