Beispielcode und Methode zum Speichern von Arrays in MySQL

Beispielcode und Methode zum Speichern von Arrays in MySQL

Beim Schreiben gespeicherter Prozeduren werden häufig Arrays verwendet. In MySQL gibt es jedoch keine Methode, um Arrays direkt an gespeicherte Prozeduren zu übergeben. Können wir in diesem Fall nur auf die Methode zurückgreifen oder sie ändern, mit der die Parameter in Form von Zeichenfolgen übergeben werden, und die Zeichenfolgen dann im Prozedurkörper in Arrays konvertieren? Leider muss ich Ihnen mitteilen, dass MySQL keine direkte Funktion zum Konvertieren eines Strings in ein Array bereitstellt. Möchten Sie jetzt jemanden schlagen? Aber keine Panik. Wenn dieser Weg versperrt ist, können wir einen anderen nehmen. Es gibt immer eine Lösung. Wir können die eingehende Zeichenfolge in mehrere Zeichen kürzen und sie an eine temporäre Tabelle übergeben und dann einen Cursor verwenden oder die Tabelle direkt verbinden, um die Daten zu filtern. Dadurch wird später der gewünschte Effekt erzielt.

Sehen wir uns ein Beispiel an, um dies in die Praxis umzusetzen:

1. Erstellen Sie eine Datenbank für die Instanz:

DATENBANK ERSTELLEN huafeng_db;

 

verwenden Sie huafeng_db;

 

Tabelle löschen, wenn `huafeng_db`.`t_scores` vorhanden ist;

Tabelle löschen, wenn `huafeng_db`.`t_students` vorhanden ist;

Tabelle löschen, wenn `huafeng_db`.`t_class` vorhanden ist;

 

TABELLE `huafeng_db`.`t_class` ERSTELLEN ( `class_id` int(11) NICHT NULL, `class_name` varchar(32) ZEICHENSATZ utf8 STANDARD NULL,

 PRIMÄRSCHLÜSSEL (`class_id`)

)ENGINE=InnoDB STANDARD-CHARSET=utf8;

 

INSERT INTO `huafeng_db`.`t_class` (`class_id`, `class_name`) VALUES ('1', 'Erste Klasse');

INSERT INTO `huafeng_db`.`t_class` (`class_id`, `class_name`) VALUES ('2', 'Zweite Klasse');

INSERT INTO `huafeng_db`.`t_class` (`class_id`, `class_name`) VALUES ('3', 'Klasse drei');

INSERT INTO `huafeng_db`.`t_class` (`class_id`, `class_name`) VALUES ('4', 'Vierte Klasse');

INSERT INTO `huafeng_db`.`t_class` (`class_id`, `class_name`) VALUES ('5', 'Fünfte Klasse');

INSERT INTO `huafeng_db`.`t_class` (`class_id`, `class_name`) VALUES ('6', 'Klasse 6');

 

TABELLE `t_students` ERSTELLEN ( `student_id` int(11) NICHT NULL AUTO_INCREMENT, `student_name` varchar(32) NICHT NULL, `sex` int(1) STANDARD NULL, `seq_no` int(11) STANDARD NULL, `class_id` int(11) NICHT NULL,

 PRIMÄRSCHLÜSSEL (`student_id`),

 SCHLÜSSEL `class_id` (`class_id`),

 EINSCHRÄNKUNG `t_students_ibfk_1` FREMDER SCHLÜSSEL (`class_id`) REFERENZEN `t_class` (`class_id`)

)ENGINE=InnoDB STANDARD-CHARSET=utf8;

 

INSERT INTO `huafeng_db`.`t_students`(`Studentenname`,`Geschlecht`,`Sequenznummer`,`Klassen-ID`) VALUES('Xiaohong',0,1,'1');

INSERT INTO `huafeng_db`.`t_students`(`Studentenname`,`Geschlecht`,`Sequenznummer`,`Klassen-ID`) VALUES('Xiaoqing',0,2,'2');

INSERT INTO `huafeng_db`.`t_students`(`Studentenname`,`Geschlecht`,`Sequenznummer`,`Klassen-ID`) VALUES('Xiao Ming',1,3,'3');

INSERT INTO `huafeng_db`.`t_students`(`Studentenname`,`Geschlecht`,`Sequenznummer`,`Klassen-ID`) VALUES('Xiao Lan',0,4,'4');

INSERT INTO `huafeng_db`.`t_students`(`Studentenname`,`Geschlecht`,`Seq-Nr.`,`Klassen-ID`) VALUES('Studentenname',1,5,'5');

INSERT INTO `huafeng_db`.`t_students`(`Studentenname`,`Geschlecht`,`Seq-Nr.`,`Klassen-ID`) VALUES('Studentenname',1,6,'6');

 

TABELLE `huafeng_db`.`t_scores` ERSTELLEN ( `score_id` int(11) NICHT NULL AUTO_INCREMENT, `course_name` varchar(64) STANDARD NULL, `score` double(3,2) STANDARD NULL, `student_id` int(11) STANDARD NULL,

 PRIMÄRSCHLÜSSEL (`score_id`),

 SCHLÜSSEL `student_id` (`student_id`),

 EINSCHRÄNKUNG `t_scores_ibfk_1` FREMDER SCHLÜSSEL (`student_id`) REFERENZEN `t_students` (`student_id`)

) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

 

INSERT INTO `t_scores` (`score_id`, `course_name`, `score`, `student_id`) VALUES ('1', 'Chinesisch', '90', '1');

INSERT INTO `t_scores` (`score_id`, `course_name`, `score`, `student_id`) VALUES ('2', 'Wert', '97', '1');

INSERT INTO `t_scores` (`score_id`, `Kursname`, `Punktzahl`, `Studenten-ID`) VALUES ('3', 'Englisch', '95', '1');

INSERT INTO `t_scores` (`score_id`, `course_name`, `score`, `student_id`) VALUES ('4', 'Chinesisch', '92', '2');

INSERT INTO `t_scores` (`score_id`, `course_name`, `score`, `student_id`) VALUES ('5', '5', '100', '2');

INSERT INTO `t_scores` (`score_id`, `Kursname`, `Punktzahl`, `Studenten-ID`) VALUES ('6', 'Englisch', '98', '2');

2. Anforderung: Stapelweises Löschen von Studenteninformationen gemäß Studentenausweis

DROP-VERFAHREN, WENN EXISTIERT `p_del_studentInfo_bySeqNo`;

TRENNUNGSZEICHEN $$

PROZEDUR ERSTELLEN p_del_studentInfo_bySeqNo(IN arrayStr VARCHAR(1000),IN sSplit VARCHAR(10))

SQL SECURITY INVOKER #Anderen Benutzern das Ausführen erlauben BEGIN DECLARE e_code INT DEFAULT 0; #Den Fehlercode auf 0 initialisieren

  DECLARE result VARCHAR(256) CHARACTER set utf8; #Initialisiere das zurückgegebene Ergebnis, um das chinesische verstümmelte Problem zu lösen DECLARE arrLength INT DEFAULT 0; /*Definiere die Array-Länge*/

  DECLARE arrString VARCHAR(1000);/*definiere das anfängliche Array-Zeichen*/

  DECLARE sStr VARCHAR(1000);/*definiere das Anfangszeichen*/

  DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET e_code=1;#Ausführung nach Auftreten eines Fehlers fortsetzen; (verwenden Sie dies, wenn Sie das Ausführungsergebnis zurückgeben müssen)

 

 

  START TRANSACTION;#Transaktion starten SET arrLength = LENGTH(arrayStr) - LENGTH(REPLACE(arrayStr,sSplit,''));/*Array-Länge abrufen*/

  SET arrString = arrayStr;

  Temporäre Tabelle löschen, falls vorhanden, list_tmp;

  Temporäre Tabelle erstellen list_tmp(id VARCHAR(32));/*Temporäre Tabelle definieren*/

 

  WHILE arrLength > 0 DO

   set sStr = substr(arrString,1,instr(arrString,sSplit)-1); – Ruft die Zeichenfolge vor dem Trennzeichen ab set arrString = substr(arrString,length(sString)+length(sSplit)+1); – Ruft die Zeichenfolge nach dem Trennzeichen ab set arrLength = arrLength -1;

   setze @str = trim(sStr);

   in list_tmp(id) Werte(@str) einfügen;

   ENDE WÄHREND; WENN row_count()=0 DANN 

    Setzen Sie den E-Code auf 1. 

    SET-Ergebnis = „Bitte geben Sie die korrekten Parameter ein“; 

   ENDE, WENN;

 

  setze @count = (SELECT count(1) FROM t_students s,list_tmp t WHERE s.seq_no = t.id); WENN @count > 0 DANN

    LÖSCHEN AUS t_scores, WO student_id in (WÄHLEN s.student_id AUS t_students s,list_tmp t, WO s.seq_no = t.id);

    LÖSCHEN AUS t_students, WO student_id in (WÄHLEN Sie t.id AUS list_tmp t); SONST

     Setzen Sie den E-Code auf 1.

     SET-Ergebnis = 'Der Student existiert nicht! ';

  ENDE WENN; WENN e_code=1 DANN

    ROLLBACK; #Rollback SONST

    BEGEHEN;

    SET-Ergebnis = „Der Student wurde erfolgreich gelöscht“;

  ENDE, WENN;

  SELECT-Ergebnis;

  Temporäre Tabelle löschen, falls vorhanden, list_tmp;

ENDE $$

TRENNUNGSZEICHEN ;

Hinweis: Beim Erstellen einer gespeicherten Prozedur werden zwei Parameter übergeben. Der erste Parameter stellt das zu übergebende Array-String-Format dar und der zweite Parameter ist die Methode, mit der der String aufgeteilt wird.

Deklarieren und Initialisieren von Variablen

DECLARE arrLength INT DEFAULT 0;/*Arraylänge definieren*/

DECLARE arrString VARCHAR(1000);/*definiere das anfängliche Array-Zeichen*/

DECLARE sStr VARCHAR(1000);/*definiere das Anfangszeichen*/

Holen Sie sich die Länge des eingehenden Parameter-Arrays

SET arrLength = LENGTH(arrayStr) - LENGTH(REPLACE(arrayStr,sSplit,''));/*Arraylänge abrufen*/

SET arrString = arrayStr;/*Zuweisung*/

Erstellen einer temporären Tabelle

Temporäre Tabelle löschen, falls vorhanden, temporäre Liste;

Temporäre Tabelle erstellen list_tmp(id VARCHAR(32));/*Temporäre Tabelle definieren*/

Fangen Sie die Array-Zeichenfolge ab und speichern Sie sie in einer temporären Tabelle zur späteren geschäftlichen Verwendung

WHILE arrLength > 0 DO

 set sStr = substr(arrString,1,instr(arrString,sSplit)-1); – Ruft die Zeichenfolge vor dem Trennzeichen ab set arrString = substr(arrString,length(sString)+length(sSplit)+1); – Ruft die Zeichenfolge nach dem Trennzeichen ab set arrLength = arrLength -1;

 setze @str = trim(sStr);

 in list_tmp(id) Werte(@str) einfügen;

ENDE WÄHREND;

Hinweis: Vergessen Sie nicht, die temporäre Tabelle am Ende der gespeicherten Prozedur zu löschen.

Für Unternehmen, die nicht sehr komplex sind, besteht keine Notwendigkeit, gespeicherte Prozeduren zu verwenden. Dieser Artikel führt nicht jeden zur Verwendung gespeicherter Prozeduren an, sondern lässt nur alle wissen, dass es so etwas gibt!

Das könnte Sie auch interessieren:
  • Mysql teilt Zeichenfolge durch gespeicherte Prozedur in Array auf
  • So reorganisieren Sie mit PHP ein zweidimensionales MySQL-Array mit doppelter ID in ein dreidimensionales Array
  • Ein Beispiel, wie PHP MySQL-Abfrageergebnisse in ein Array konvertiert und sie mit where verknüpft.
  • So fragen Sie eine MySQL-Datenbank in PHP ab und speichern die Ergebnisse in einem Array
  • Tiefgreifendes Verständnis der Verwendung von mysql_fetch_row(), um Abfrageergebnisse als Array zurückzugeben
  • In PHP erfordert die Verarbeitung des von mysql_fetch_assoc zurückgegebenen Arrays kein foreach--echo

<<:  Beispielcode für die Vue-Bildzuschneidekomponente

>>:  Lösen Sie das Problem des Startfehlers von PHPStudy MySQL unter Windows

Artikel empfehlen

Zusammenfassung der Anwendungspraxis für Docker-Container des Node.js-Dienstes

In diesem Artikel wird die Verwendung und Install...

Zusammenfassung der Lösungen für allgemeine Linux-Probleme

1. Centos7 unter VMware verbinden und eine feste ...

Div in HTML ausblenden Tabelle ausblenden TABLE- oder DIV-Inhalt im CSS-Stil

Ich habe heute Abend ein Problem gelöst, das mich...

Implementierung eines Nginx-Load-Balancing-Clusters

(1) Experimentelle Umgebung youxi1 192.168.5.101 ...

So stellen Sie Go-Webanwendungen mit Docker bereit

Inhaltsverzeichnis Warum brauchen wir Docker? Bei...

Docker-Compose erstellt schnell Schritte für ein privates Docker-Warehouse

Erstellen Sie docker-compose.yml und füllen Sie d...

Datenstruktur - Baum (III): Mehrweg-Suchbaum B-Baum, B+ Baum

Mehrweg-Suchbaum Höhe eines vollständigen Binärba...

So verwenden Sie Docker zum Bereitstellen eines Django-Technologie-Stack-Projekts

Mit der Popularität und Reife von Docker ist es a...