はないか尋ねられました。 SQL サーバー バージョン には、「SQL サーバーによる一意の注文番号の高同時生成 」
推奨: 「mysql チュートリアル 」
が追加されました。一、シーン再現ERP購買・販売・在庫システムや0Aなどのシステムでは、複数人が同時に注文番号を生成する作業を行うと、簡単に複数人が注文番号を取得することができます。取り返しのつかない損失を引き起こす2. 注文番号が一意ではない同時実行性の高い状況を回避する方法ストアド プロシージャとデータ テーブルを使用して、テーブルを作成し、ストアド プロシージャを作成します。ストアド プロシージャは注文番号の生成を担当し、テーブルは一意性の問題の処理を担当します。最初のステップ: データ テーブルを作成し、注文番号フィールドを主キー (一意の注文番号へのキー) に設定します。
ステップ 2: ストアド プロシージャを作成して、注文番号の生成
1. まずストアド プロシージャ ## を作成します。
#入力は BILL_TYPE (プレフィックス)、出力は BILL_NOP (注文番号) CREATE DEFINER = CURRENT_USER PROCEDURE `getbillno`(in BILL_TYPE VARCHAR(3), out BILL_NOP varchar(25))BEGIN
2. 年、月、日、およびサフィックスを生成します
年、月日は現在のシステム時刻、サフィックスの初期値は 0DECLARE 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
生成される注文番号: UIE20200611016
#前の手順で取得した注文番号が空の場合、新しく生成される注文番号のサフィックスは 001
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. 生成された注文番号をテーブルに挿入します
If テーブル内に同じ 注文番号が存在しない場合、テーブルへの挿入は成功します
INSERT INTO temp_bill (BILL_NO, BILL_TYPE) VALUES (BILL_NOP,BILL_TYPE) ;
SELECT BILL_NOP;
1. 最初のすべて、テーブルにはデータがありません。プレフィックスが生成されます (UIE と入力しました) 年と月 日 (20200611) 001 (最初のデータなので 001)
は:
2 二度目に入力すると、テーブルにデータがあるため、最新の注文番号に基づいて 1
のサフィックスが追加されます。つまり、
UIE20200611002
# 5. 要約ではない要約
この記事が皆さんのお役に立てれば幸いです
十分なポイントがある場合は、直接ダウンロードしてください。ポイントがない場合は、画像を入力するだけです。コードの量はとにかく多くありませんコードのダウンロード リンク: mysql_getbillno.sqlコードのスクリーンショット:
以上がMySQL の高い同時実行性により固有の注文番号が生成されるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。