MySQL에서 시퀀스 시퀀스를 사용하는 방법 요약

WBOY
풀어 주다: 2022-09-13 18:01:45
앞으로
3078명이 탐색했습니다.

추천 학습: mysql 비디오 튜토리얼

오라클 데이터베이스에서 지속적으로 자체 증가하는 데이터 유형 값을 원하는 경우 시퀀스를 생성할 수 있습니다. MySQL 데이터베이스에는 시퀀스가 ​​없습니다. 일반적으로 테이블에 자동 증가 열이 하나만 필요한 경우 MySQL의 auto_increment를 사용할 수 있습니다(테이블에는 자동 증가 기본 키가 하나만 있을 수 있음). Oracle과 같은 MySQL에서 시퀀스를 사용하려면 어떻게 해야 합니까?

예를 들어 다음과 같은 테이블 정의가 있습니다.

create table `t_user`(
    `id` bigint auto_increment primary key,
    `user_id` bigint unique comment '用户ID',
    `user_name` varchar(10) not null default '' comment '用户名'
);
로그인 후 복사

여기서 user_id에는 자동 증가, 순서 및 고유성이 필요합니다. 조건에 맞는 값을 얻기 위해서는 Snowflake 알고리즘, Redis나 Zookeeper 등을 사용하는 등 다양한 구현 방법이 있으므로 여기서는 하나씩 소개하지 않겠습니다. 여기에서는 MySQL의 auto_increment 및 last_insert_id()를 사용하여 Oracle과 유사한 시퀀스를 구현하는 방법을 소개합니다.

방법 1. 저장 프로시저 사용

1. 자동 증가 기본 키가 포함된 간단한 테이블을 만듭니다.

예제는 다음과 같습니다.

create table `t_user_id_sequence` (
    `id` bigint not null auto_increment primary key,
    `t_text` varchar(5) not null default '' comment 'insert value'
);
로그인 후 복사

2. 저장 프로시저 만들기

delimiter &&
create procedure `pro_user_id_seq` (out sequence bigint)
begin
    insert into t_user_id_sequence (t_text) values ('a');
    select last_insert_id() into sequence from dual;
    delete from t_user_id_sequence;
end &&
delimiter ;
로그인 후 복사

3.Test

call pro_user_id_seq(@value);
select @value from dual;
로그인 후 복사

저장 프로시저를 사용하려면 저장 프로시저를 한 번 호출한 후 값을 할당해야 하는데 조금 번거롭습니다.

방법 2. 함수 사용

1. 시퀀스를 생성하는 함수 만들기

delimiter &&
create function user_id_seq_func() returns bigint
begin
    declare sequence bigint;
    insert into t_user_id_sequence (t_text) values ('a');
    select last_insert_id() into sequence from dual;
    delete from t_user_id_sequence;
    return sequence;
end &&
delimiter ;
로그인 후 복사

2. Test

select user_id_seq_func() from dual;
 
insert into t_user (user_id, user_name) values (user_id_seq_func(), 'java');
select * from t_user;
로그인 후 복사

추천 학습: mysql 동영상 튜토리얼

위 내용은 MySQL에서 시퀀스 시퀀스를 사용하는 방법 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:jb51.net
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿