MySQL-Implementierung des Funktionsbeispiels „lastInfdexOf“

MySQL-Implementierung des Funktionsbeispiels „lastInfdexOf“

Manchmal muss MySQL eine Funktion ähnlich zu lastIndexOf verwenden, es ist jedoch keine vorgefertigte Funktion direkt verfügbar, sodass Sie diese selbst herausfinden müssen.

Erstens bietet MySQL die folgenden drei Funktionen:

instr(str:varchar, substr:varchar): Gibt das erste Vorkommen von subsrtr in str# zurück. Beispiel: Suchen Sie das erste Vorkommen von b in der Zeichenfolge ab/cd/abc.html. select instr('ab/cd/abc.html', 'b');
# Anders als der Programmierer denkt, ist das obige Ergebnis 2 (der Index beginnt bei 1, bitte beachten)

reverse(str:varchar): Kehren Sie die Zeichenfolge von Anfang bis Ende um, geben Sie abc ein und geben Sie cba aus

length(str:varcha): Gibt die Länge des Strings zurück

Nachdem die obigen Informationen bekannt sind, denke ich, dass die meisten Leute wissen, wie die Funktion lastInfdexOf implementiert wird.

Geben Sie direkt an:

select length('Eingabezeichenfolge') - instr(reverse('Eingabezeichenfolge'), 'zu durchsuchende Zeichenfolge');
# zB: Suchen Sie die letzte Position von „/“ in der Zeichenfolge „ab/cd/abc.html“. Die Ergebnisse sind: 5
Wählen Sie Länge ('ab/cd/abc.html') – Instr (umgekehrt ('ab/cd/abc.html'), '/');

Zum Schluss noch eine kleine Anforderung, auf die ich kürzlich gestoßen bin:

Schreiben Sie ein SQL-Skript, um den Wert des Datenbankfelds abzurufen (der Wert ist der Pfadname der Datei, z. B. ab/cd/abc.html) und den Dateinamen (abc.html) zu analysieren:

Wählen Sie rechts (INHALTSNAME, instr (umgekehrt (INHALTSNAME), '/') - 1) DATEINAME
von config_template_content
wobei lower(CONTENT_NAME) wie '%/%.html' ist;
# Dies reicht aus, wenn die Daten / enthalten. Wenn der Feldwert abcde.html ist, müssen Sie eine Entscheidung treffen ~

Oben wird die richtige Funktion verwendet. Bitte suchen (erfahren) Sie selbst nach ihrer Nützlichkeit.

Ergänzung: Probleme bei der Verwendung der MySQL-Anweisung SELECT LAST_INSERT_ID()

Vorwort:

Wenn wir einen Datensatz in eine Datenbanktabelle einfügen, deren Primärschlüssel automatisch inkrementiert ist (z. B. die Benutzertabelle), erwarten wir, die ID des gerade geschriebenen Datensatzes zu erhalten (da wir in einigen Szenarien diese ID benötigen, um andere Vorgänge auszuführen). Zu diesem Zeitpunkt müssen wir die Anweisung SELECT LAST_INSERT_ID () verwenden, um den Wert der automatisch inkrementierten ID zu erhalten, die nach dem Einfügen des Datensatzes zurückgegeben wird.

Als Beispiel:

 /**
 * Beschwerdeinformationen einfügen * @param complaintInfoModel
 * @zurückkehren
 */
 @InsertProvider(Typ = ComplaintInfoDao.ComplaintProviderSql.class, Methode = "insertComplaintInfo")
 @SelectKey(Anweisung="SELECT LAST_INSERT_ID()", Schlüsseleigenschaft="id", vorher=false, Ergebnistyp=Integer.class)
 Integer insertComplaintInfo(ComplaintInfoModel complaintInfoModel); // Daten einfügen und Anzahl der geänderten Datenbankeinträge zurückgeben

SelectKey in Mybatis löst das Problem, dass der Primärschlüssel beim Einfügen von Daten nicht automatisch generiert wird. Die Methode zur Generierung des Primärschlüssels kann nach Belieben festgelegt werden. Aber egal, wie gut SelectKey ist, versuchen Sie, diese Situation zu vermeiden, schließlich ist sie sehr lästig.

selectKey-Attribute

Eigentum beschreiben
Schlüsseleigenschaft Die Zieleigenschaft, auf die das Ergebnis der selectKey-Anweisung gesetzt werden soll.
Ergebnistyp

Der Ergebnistyp.

MyBatis kann es normalerweise herausfinden, aber es ist kein Problem, es zu schreiben. MyBatis ermöglicht die Verwendung jedes einfachen Typs als Primärschlüsseltyp, einschließlich Zeichenfolgen.

Befehl

Dies kann auf VORHER oder NACHHER eingestellt werden.

Wenn der Wert auf BEFORE gesetzt ist, wird zuerst der Primärschlüssel ausgewählt, die Schlüsseleigenschaft festgelegt und dann die Einfügeanweisung ausgeführt.

Wenn der Wert auf AFTER gesetzt ist, wird zuerst die Einfügeanweisung und dann das SelectKey-Element ausgeführt. Dies ähnelt Datenbanken wie Oracle, wo Sequenzaufrufe in Einfügeanweisungen eingebettet werden können.

Anweisungstyp

Wie bisher unterstützt MyBatis die Mapping-Typen STATEMENT-, PREPARED- und CALLABLE-Anweisungen.

Stellt jeweils die Typen PreparedStatement und CallableStatement dar.

----1. SelectKey muss auf das Bestellattribut achten,

In Datenbanken wie MySQL, die automatisches Wachstum unterstützen, muss die Reihenfolge auf „nach“ gesetzt werden, um den richtigen Wert zu erhalten.

Wenn Sie eine Sequenz wie bei Oracle verwenden, muss sie auf „vorher“ gesetzt werden, andernfalls wird ein Fehler gemeldet.

-----2. Wenn Sie Spring zur Verwaltung von Transaktionen verwenden,

SelectKey und Insert erfolgen in derselben Transaktion. In diesem Fall kann Mysql den automatisch erhöhten Schlüssel nicht abrufen, da die Daten nicht in die Datenbank eingefügt werden.

Brechen Sie die Transaktionsverwaltung ab, dann tritt kein Problem mehr auf.

Nachfolgend finden Sie ein Beispiel für XML und Annotationen. Der SelectKey ist sehr einfach und zwei Beispiele reichen aus:

<insert id="insert" parameterType="map"> 
 in Tabelle1 (Name) Werte einfügen (#{name}) 
 <selectKey resultType="java.lang.Integer" keyProperty="id"> 
  CALL IDENTITY() 
 </Schlüsselauswahl> 
 </einfügen>

Der Eingabeparameter der obigen XML ist map, und selectKey fügt das Ergebnis in den Eingabeparameter map ein. Bei POJO ist die Situation dieselbe. Allerdings muss beachtet werden, dass das der keyProperty entsprechende Feld über eine entsprechende Setter-Methode im POJO verfügen muss und der Parametertyp des Setters konsistent sein muss, da sonst ein Fehler gemeldet wird.

@Insert("in Tabelle2 (Name) Werte einfügen(#{name})") 
@SelectKey(Anweisung="Aufrufidentität()", Schlüsseleigenschaft="NameId", vorher=false, Ergebnistyp=int.class) 
int insertTable2(Name name);

Das Obige hat die Form einer Anmerkung.

Das Obige ist meine persönliche Erfahrung. Ich hoffe, es kann Ihnen als Referenz dienen. Ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen werden. Sollten dennoch Fehler oder unvollständige Überlegungen vorliegen, freue ich mich über eine Korrektur.

Das könnte Sie auch interessieren:
  • Mysql Master-Slave-Synchronisation Last_IO_Errno:1236 Fehlerlösung
  • Lösung für das Datenasymmetrieproblem zwischen MySQL und Elasticsearch
  • Lösung für den MySQL-Replikationsfehler Last_SQL_Errno:1146
  • Detaillierte Erklärung zur Verwendung der Funktion LAST_INSERT_ID() in Mysql

<<:  Lösen Sie das Problem, nachdem Sie --subnet zum Docker-Netzwerk hinzugefügt haben.

>>:  jQuery implementiert einen einfachen Popup-Fenstereffekt

Artikel empfehlen

So erstellen Sie eine lnmp-Umgebung im Docker

Erstellen eines Projektverzeichnisses mkdir php E...

Verwenden Sie CSS, um zwischen dem Dunkelmodus und dem Hellmodus zu wechseln

In der fünften Ausgabe von Web Skills wird ausdrü...

WeChat-Miniprogramm zur Implementierung elektronischer Signaturen

In diesem Artikel finden Sie den spezifischen Cod...

CSS-Implementierungscode für verzerrte Schatten

Dieser Artikel stellt den Implementierungscode vo...

Detaillierte Erklärung der Verwendung des Bash-Befehls

Unter Linux wird Bash als Standard übernommen, wa...

js-Entwicklungs-Plugin zum Erzielen eines Tab-Effekts

In diesem Artikelbeispiel wird der spezifische Co...

So richten Sie geplante Sicherungsaufgaben in Linux CentOS ein

Implementierungsvorbereitung # Der Dateipfad muss...

Einführung in die Installationsmethode in Vue

Inhaltsverzeichnis 1. Weltweit registrierte Kompo...