So erstellen Sie eine monatliche Tabelle in einer gespeicherten MySQL-Prozedur

So erstellen Sie eine monatliche Tabelle in einer gespeicherten MySQL-Prozedur

Lassen Sie uns, ohne ins Detail zu gehen, direkt zum Code gehen. Willkommen, um gemeinsam zu kommunizieren und zu lernen.

Erstellen Sie eine gespeicherte Prozedur, um eine Tabelle nach Monaten zu erstellen. Die SQL-Anweisung lautet wie folgt:

TRENNUNGSZEICHEN // 
DROP-VERFAHREN, WENN EXISTIERT create_table_by_month //
VERFAHREN ZUM ERSTELLEN `create_table_by_month`()
BEGINNEN

  #--Deklarieren Sie vorab die Variable, die später verwendet wird. DECLARE nextMonth varchar(20);
    DECLARE nextTABLE varchar(20);
    DECLARE csql varchar(5210);
    DECLARE AusgabeParam int;
    DECLARE Tabellenname_1 varchar (20);
    DECLARE Tabellenname_2 varchar (20);
    DECLARE table_prefix varchar(20);

  #--Nächsten Monat abrufen SELECT SUBSTR(replace(DATE_ADD(CURDATE(), INTERVAL 1 MONTH), '-', ''), 1, 6) INTO @nextMonth;
  #--Teilen und analysieren Sie die obigen SQL-Anweisungen:
  #MySQL-Zeitfunktion date_add() fügt dem Datum ein Zeitintervall hinzu. Dieses SQL steht für das Datum einen Monat nach dem aktuellen Datum #select DATE_ADD(CURDATE(), INTERVAL 1 MONTH); 
  ##Rückkehr 20201006
  #Auswählen ersetzen('2020-10-06', '-', '');
  ##Rückkehr 20201006
  #Auswählen ersetzen(DATE_ADD(CURDATE(), INTERVALL 1 MONAT), '-', '');
  ## Zurück zu 202010
  #SUBSTR AUSWÄHLEN(20201006,1,6);
  ##Weisen Sie der Variablen @nextMonth einen Wert zu. #SELECT SUBSTR(20201006,1,6) INTO @nextMonth;

# Tabelle 1
    #Setzen Sie den Wert der Tabellenpräfixvariablen auf td_user_banks_log_
    Setzen Sie @table_prefix = "td_user_banks_log_".

    #Definieren Sie den Namen der Tabelle 1 SET @tableName_1 = CONCAT(@table_prefix, @nextMonth);
    ##Definieren Sie die SQL-Anweisung zum Erstellen eines Tabellensatzes @csql=concat("create table if not exists ",@tableName_1,"(
        `id` int(11) NICHT NULL AUTO_INCREMENT,
        `app_id` varchar(100) NICHT NULL,
        `user_id` int(11) NOT NULL DEFAULT '0' COMMENT 'Benutzer-ID',
        `Typ` tinyint(2) NICHT NULL STANDARD '1' KOMMENTAR '1 Anmeldebelohnung 2 Aktivitätsbelohnung 3 Einlösung',
        `gold_coin` int(11) NICHT NULL,
        `Bemerkungen` varchar(200) NOT NULL DEFAULT '' COMMENT 'Bemerkungen',
        `create_at` Zeitstempel NICHT NULL STANDARD CURRENT_TIMESTAMP,
        Primärschlüssel (`id`),
        SCHLÜSSEL `app_id` (`app_id`),
        SCHLÜSSEL `user_id` (`user_id`),
        SCHLÜSSEL `Typ` (`Typ`),
        SCHLÜSSEL `create_at` (`create_at`)
      )ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;");
  #PREPARE Einführung:
  ##Die Anweisung wird verwendet, um eine Anweisung vorzubereiten und den Namen Anweisungsname zur späteren Bezugnahme anzugeben. Bei Anweisungsnamen wird die Groß-/Kleinschreibung nicht beachtet.
  ##preparable_stmt kann eine Zeichenfolge oder eine Benutzervariable sein, die den Anweisungstext enthält. Der Text muss eine einzelne SQL-Anweisung darstellen, nicht mehrere Anweisungen.
  VORBEREITEN von create_stmt von @csql; 
    AUSFÜHREN create_stmt;
  DEALLOCATE PREPARE create_stmt;

# Tabelle 2 und Tabelle 1 haben dasselbe SQL, daher werden wir sie hier nicht vorstellen:
    setze @table_prefix = 'td_sign_log_';

    SET @tableName_2 = CONCAT(@table_prefix, @nextMonth);

    setze @csql=concat("Tabelle erstellen, falls nicht vorhanden ",@tableName_2,"(
      `id` int(11) NICHT NULL AUTO_INCREMENT,
      `app_id` varchar(100) NICHT NULL,
      `user_id` int(11) NICHT NULL,
      `Tag` int(11) NICHT NULL STANDARD '0' KOMMENTAR 'Tag',
      `sign_type` tinyint(2) NOT NULL DEFAULT '1' COMMENT '1 Anmeldung 2 Make-up-Anmeldung 3 Angesammelte Belohnung',
      `Typ` tinyint(2) NICHT NULL STANDARD '1' KOMMENTAR '1 Goldmünze',
      `num` int(11) NICHT NULL STANDARD '0',
      `data_id` int(11) NICHT NULL STANDARD '0',
      `create_at` Zeitstempel NICHT NULL STANDARD CURRENT_TIMESTAMP,
      Primärschlüssel (`id`),
      SCHLÜSSEL `app_id` (`app_id`),
      SCHLÜSSEL `user_id` (`user_id`),
      SCHLÜSSEL `Typ` (`Typ`),
      SCHLÜSSEL `data_id` (`data_id`),
      SCHLÜSSEL `create_at` (`create_at`),
      SCHLÜSSEL `sign_type` (`sign_type`),
      SCHLÜSSEL `Tag` (`Tag`)
    )ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;");

    VORBEREITEN von create_stmt von @csql; 
    AUSFÜHREN create_stmt;
    DEALLOCATE PREPARE create_stmt;

    Wählen Sie COUNT(1) INTO @outputParam FROM information_schema.`TABLES` WHERE TABLE_NAME in (@tableName_1, @tableName_2);
    WÄHLEN Sie @outputParam;

ENDE //
Trennzeichen ;
#--Erstellen Sie jeden Monat eine geplante Aufgabe für die Tabelle des aktuellen Monats:

Erstellen Sie ein EREIGNIS „create_table_by_month“ nach Plan, das jeden Monat um „2020-09-06 12:40:00“ beginnt. Nach Abschluss nicht beibehalten. Aktivieren. Rufen Sie „create_table_by_month(“) auf.

Tipp: Rufen Sie in der geplanten Aufgabe die gespeicherte Prozedur SQL1-Anweisung auf, um sie zu einem bestimmten Zeitpunkt auszuführen. Der angegebene Zeitpunkt muss in der Zukunft liegen.

#Sehen Sie sich die SQL-Anweisung zum Erstellen einer gespeicherten Prozedur an:

anzeigen erstellen VERFAHREN create_table_by_month_G
#Löschen Sie die gespeicherte Prozedur:

DROP-VERFAHREN, WENN EXISTIERT: create_table_by_month;
#Löschen Sie das geplante Task-Drop-Ereignis create_table_by_month1;

Die oben gespeicherten Prozedur-SQL-Anweisungen und Timer-SQL-Anweisungen werden in der Produktionsumgebung verwendet

#Fehlerbehebung:

Ich habe festgestellt, dass das MySQL-Protokoll einen Fehler gemeldet hat. Das in der SQL-Anweisung der ursprünglichen gespeicherten Prozedur hinzugefügte Indexschlüsselfeld war zufällig ein Feld, das in der Tabelle nicht vorhanden war, daher wurde der folgende Fehler gemeldet. Entfernen Sie also das Indexschlüsselfeld in der gespeicherten Prozedur und das SQL ist in Ordnung.

2020-09-06T12:40:00.244879+08:00 604392 [FEHLER] Event Scheduler: [root@localhost][test0001.create_table_by_month1] Schlüsselspalte 'sign_date' existiert nicht in der Tabelle
2020-09-06T12:40:00.244926+08:00 604392 [Hinweis] Ereignisplaner: Ausführung des Ereignisses [root@localhost].[test0001.create_table_by_month1] fehlgeschlagen.

Die oben gespeicherte Prozedur ist nur das SQL der Online-Geschäftsumgebung dieses Bloggers. Bitte wenden Sie es nicht direkt an. Der entstandene Verlust hat nichts mit diesem Blogbeitrag zu tun. Dieser Artikel wird hier mit der ursprünglichen Absicht des Lernens und der Kommunikation veröffentlicht und dient nur als Referenz für das Lernen und die Kommunikation aller.

Damit ist dieser Artikel über die Schritte zum Erstellen einer Monatstabelle mithilfe einer gespeicherten Prozedur in MySQL abgeschlossen. Weitere Informationen zum Erstellen einer Monatstabelle in MySQL finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung zum Erstellen, Aufrufen und Verwalten von MySQL-gespeicherten Prozeduren
  • Einführung in Abfragebefehle für gespeicherte MySQL-Prozeduren
  • Beispiele und Zusammenfassung der In-, Out- und Inout-Parameter von gespeicherten MySQL-Prozeduren
  • Detaillierte Schritte zum Ändern gespeicherter MySQL-Prozeduren
  • Verwenden einer Cursorschleife zum Lesen temporärer Tabellen in gespeicherten MySQL-Prozeduren
  • Problem mit Berechtigungen zum Ändern gespeicherter Prozeduren in MySQL
  • Ausführliche Erläuterung der gespeicherten MySQL-Prozeduren (in, out, inout)
  • Eine kurze Diskussion über MySql-Ansichten, Trigger und gespeicherte Prozeduren
  • Detailliertes Beispiel für die Verwendung der if-Anweisung in einer gespeicherten MySQL-Prozedur
  • Analyse der Vor- und Nachteile von gespeicherten MySQL-Prozeduren

<<:  Verwendung des Linux-Stat-Befehls

>>:  Implementierung des Durchklickens des transparenten Bereichs unregelmäßiger Formen in Electron

Artikel empfehlen

4 Funktionen, die durch das Transform-Attribut in CSS3 implementiert werden

In CSS3 können mit der Transformationsfunktion vi...

Detaillierte Analyse und Prüfung von SSD-Leistungsproblemen in MySQL-Servern

【Frage】 Wir haben einen HP-Server. Wenn die SSD e...

js zur Implementierung einer Überprüfungscode-Interferenz (dynamisch)

In diesem Artikelbeispiel wird der spezifische Co...

VUE Erste Schritte Erlernen der Ereignisbehandlung

Inhaltsverzeichnis 1. Funktionsbindung 2. Mit Par...

Docker-Installation von MySQL (8 und 5.7)

In diesem Artikel wird die Verwendung von Docker ...

Details der MySQL-Berechnungsfunktion

Inhaltsverzeichnis 2. Feldverkettung 2. Geben Sie...

Häufige JavaScript-Speicherfehler und Lösungen

Inhaltsverzeichnis 1. Zeitüberwachung 2. Ereignis...

Analyse der zum Ausführen von Docker erforderlichen Berechtigungen

Zum Ausführen von Docker sind Root-Rechte erforde...

Detaillierter Prozess zum Dekomprimieren und Installieren von mysql5.7.17 zip

1. Adresse herunterladen https://dev.mysql.com/do...

So erstellen Sie ein Docker-Repository mit Nexus

Das mit dem offiziellen Docker-Register erstellte...