집 >데이터 베이스 >MySQL 튜토리얼 >MySQL 높은 동시성은 고유한 주문 번호를 생성합니다.
이 블로그 글이 올라간 후 친구가 SQL 서버 버전이 있냐고 물어보더군요. 지금은 "SQL 서버 고동시성 고유 주문 번호"
가 있습니다. : " mysql tutorial》
ERP 구매, 판매, 재고 시스템이나 0A와 같은 기타 시스템에서 주문 번호 생성 작업을 여러 사람이 동시에 수행하면 여러 사람이 동일한 주문 번호를 획득하여 회사 비즈니스에 돌이킬 수 없는 손실을 초래함
저장 프로시저와 데이터 테이블을 사용하여 테이블을 만들고 저장 항목을 생성할 수 있습니다. 프로시저는 주문 번호 생성을 담당합니다. 테이블은 고유성 문제를 처리합니다.
저장 프로시저가 주문 번호를 생성하면 먼저 주문 번호가 테이블에 기록되고 그 다음에 주문 번호 결과가 기록됩니다. 생성된 주문 번호가 테이블에 기록되면 두 가지 상황이 발생합니다. 이유는 무엇입니까? 테이블에 기본 키(기본 키 고유성)가 있으므로
다음은 코드와 실제 작업을 사용하여 고유 주문 번호를 생성하는 프로세스를 설명합니다
는 사용자 지정 접두사 + 연, 월, 일 + 접미사(001, 002, 003)
1. 먼저 저장 프로시저를 만듭니다.
입력은 BILL_TYPE(접두사)이고 출력은 BILL_NOP(주문 번호)입니다.
CREATE DEFINER = CURRENT_USER PROCEDURE `getbillno`(in BILL_TYPE VARCHAR(3), out BILL_NOP varchar(25))BEGIN
2 연도, 월, 일 및 접미사
를 생성합니다. day는 현재 시스템 시간이고 접미사의 초기값은 0
DECLARE currentDate varCHAR (15);DECLARE lastno INT DEFAULT 0;SELECT DATE_FORMAT(NOW(), '%Y%m%d') INTO currentDate;
3입니다. 테이블을 쿼리하여 테이블의 주문 번호를 가져옵니다.
테이블을 쿼리하여 접두사가 인 최신 주문 번호를 가져옵니다. 커스텀 콘텐츠 관련
SELECT IFNULL(BILL_NO, 'notnull') INTO BILL_NOP FROM temp_bill WHERE SUBSTRING(BILL_NO,1,3) =BILL_TYPE and SUBSTRING(BILL_NO,4,8) =currentDate ORDER BY BILL_NO DESC LIMIT 1;
4. 주문 번호 생성
이전 단계에서 얻은 주문 번호가 비어 있지 않으면 새로 생성된 주문 번호가 원래 주문 번호에 +1됩니다
예 : 획득된 주문 번호: UIE20200611015
생성된 주문 번호: UIE20200611016
이전 단계에서 획득한 주문 번호가 비어 있는 경우 새로 생성된 주문 번호의 접미사는 001
예: 생성된 주문 번호: UIE20200611001
IF BILL_NOP !='' THEN SET lastno = CONVERT(SUBSTRING(BILL_NOP, -3), DECIMAL) ; SELECT CONCAT(BILL_TYPE,currentDate,LPAD((lastno + 1),3, '0')) INTO BILL_NOP ;ELSE SELECT CONCAT(BILL_TYPE,currentDate,LPAD((lastno + 1),3, '0')) INTO BILL_NOP ;END IF;
5. 생성된 주문 번호를 테이블에 삽입합니다
테이블에 동일한 주문 번호가 있으면 테이블에 삽입이 실패합니다.테이블에 동일한
주문 번호가 없으면 삽입이 실패합니다. 테이블이 성공했습니다INSERT INTO temp_bill (BILL_NO, BILL_TYPE) VALUES (BILL_NOP,BILL_TYPE) ;
주문이 테이블에 성공적으로 삽입되면 고유 주문 번호가 반환될 수 있습니다. (이전 단계가 실패할 경우 이 단계는 실행되지 않습니다.)
SELECT BILL_NOP;
즉:
UIE20200611001
2 두 번째 입력할 때 테이블 때문에 데이터가 있으면 최신 주문 번호의 접미사에 1이 추가됩니다. 즉:
5. 요약이 아닌 요약
이 글이 도움이 되었으면 좋겠습니다포인트가 충분하다면 다운받으세요. 포인트가 없으니 사진을 입력해 보세요. 어쨌든 코드 양은 많지 않습니다학생이고 포인트가 없으신 분들은 개인적으로 메시지를 보내주시면 무료로 소스코드를 보내드리겠습니다
코드 다운로드 링크: mysql_getbillno .sql
코드 스크린샷:
위 내용은 MySQL 높은 동시성은 고유한 주문 번호를 생성합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!