Maison > Article > base de données > La haute concurrence MySQL génère des numéros de commande uniques
Après la publication de cet article de blog, un ami a demandé s'il y avait un La version du serveur SQL a désormais "numéro de commande unique de génération de concurrence élevée du serveur SQL "
Recommandé : "tutoriel mysql "
Dans un système d'achat, de vente et d'inventaire ERP ou d'autres systèmes tels que 0A, si plusieurs personnes effectuent l'opération de génération de numéros de commande en même temps, il est facile pour plusieurs personnes d'obtenir le même numéro de commande, ce qui aura un impact négatif sur l'activité de l'entreprise, provoquant des pertes irréparables
Nous pouvons utiliser des procédures et des données stockées. tables pour construire une table et créer des procédures stockées. Les procédures stockées sont responsables de générer des numéros de commande, et la table est responsable de la gestion des problèmes d'unicité
Lorsque la procédure stockée génère d'abord un numéro de commande, écrivez le numéro de commande dans le tableau, puis affichez le résultat du numéro de commande et générez. Lorsque le numéro de commande est écrit dans le tableau, deux situations se produiront. Pourquoi ? Parce que notre table a une clé primaire (unicité de la clé primaire)
Ce qui suit expliquera le processus de génération d'un numéro de commande unique à l'aide du code et des opérations réelles
Le format du numéro de commande généré est : Préfixe personnalisé + année, mois et jour + suffixe (001, 002, 003)
1. 🎜>L'entrée est BILL_TYPE (préfixe) et la sortie est BILL_NOP (numéro de commande)
CREATE DEFINER = CURRENT_USER PROCEDURE `getbillno`(in BILL_TYPE VARCHAR(3), out BILL_NOP varchar(25))BEGIN
2 Générez l'année, le mois et le jour et le suffixe année, mois. et le jour est l'heure actuelle du système et la valeur initiale du suffixe est 0
DECLARE currentDate varCHAR (15);DECLARE lastno INT DEFAULT 0;SELECT DATE_FORMAT(NOW(), '%Y%m%d') INTO currentDate;
3. Formulaire de requête, obtenez le numéro d'ordre de la table Interrogez la table. et obtenez le dernier numéro de commande avec le préfixe lié au contenu personnalisé
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. Générez le numéro de commande
C'est la commande générée Le numéro est : UIE20200611016
Exemple : Le numéro de commande généré : 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. Insérez le numéro de commande généré dans le tableauSi le même
numéro de commande existe dans le tableau, l'insertion dans le tableau échoueSi le table Si le même
numéro de commande n'existe pas, le numéro de commande est inséré avec succès dans la table INSERT INTO temp_bill (BILL_NO, BILL_TYPE) VALUES (BILL_NOP,BILL_TYPE) ;
Lorsque le La commande est insérée dans le tableau avec succès, le numéro de commande unique peut être renvoyé (Si l'étape précédente échoue, cette étape ne sera pas exécutée)
SELECT BILL_NOP;
soit :
UIE20200611001
2 Lorsque je le saisis pour la deuxième fois, Puisqu'il y a des données dans le tableau, le dernier numéro de commande sera ajouté avec un suffixe de 1
UIE20200611002
5. Un résumé qui n'est pas un résumé
L'auto-évaluation d'une humble recrue : J'espère que cet article pourra aider tout le monde Si vous avez suffisamment de points, téléchargez-le. Si vous n'avez pas de points, tapez sur l'image. Quoi qu'il en soit, la quantité n'est pas grande non plus.
Si vous êtes étudiant et n'avez pas de points, vous pouvez m'envoyer un message privé et je vous enverrai le code source gratuitement
Lien de téléchargement du code : mysql_getbillno.sql
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!