Heim > Datenbank > MySQL-Tutorial > Hauptteil

MySQL verwendet gespeicherte Prozeduren

王林
Freigeben: 2023-05-20 10:25:37
Original
1473 Leute haben es durchsucht

MySQL ist derzeit das beliebteste relationale Datenbankverwaltungssystem. Es verwendet gespeicherte Prozeduren, um die Ausführung von SQL-Anweisungen und -Programmen besser zu verwalten und zu verwalten. Gespeicherte Prozeduren sind vorkompilierte SQL-Codeblöcke, die häufig verwendete SQL-Anweisungen kapseln können, um die Effizienz bei mehreren Ausführungen zu verbessern und die Ressourcennutzung zur Laufzeit zu reduzieren.

Die Verwendung gespeicherter Prozeduren in MySQL

1. Erstellen Sie eine gespeicherte Prozedur

Grundsätzlich besteht das Erstellen einer gespeicherten Prozedur darin, eine SQL-Anweisung zu schreiben block und speichern Sie diesen Codeblock in der Systemdatenbank. Das Folgende ist ein konkretes Beispiel:

CREATE PROCEDURE `procedure_name` (`parameter_list`)
BEGIN
    -- SQL 语句块
END
Nach dem Login kopieren

Wobei procedure_name der Name der gespeicherten Prozedur ist, ist paramter_list die Parameterliste der gespeicherten Prozedur , die Parameter, Parameter oder keine Parameter enthalten können. procedure_name 是存储过程的名称,paramter_list 是存储过程的参数列表,可以包括入参、出参,也可以不包含参数。

例如,我们创建一个获取用户信息的存储过程:

CREATE PROCEDURE `get_user_info`(user_id INT)
BEGIN
    SELECT * FROM `user` WHERE `user_id` = user_id;
END
Nach dem Login kopieren

在存储过程的 SQL 语句块中,我们可以使用 MySQL 支持的所有 SQL 语句,如 SELECT、INSERT、UPDATE、DELETE 等,还可以使用控制流语句,例如 IF、WHILE、LOOP 等,从而实现更复杂的数据逻辑处理。

2、调用存储过程

创建存储过程之后,我们可以通过 CALL 语句来调用存储过程,并向其传递参数:

CALL procedure_name(param1, param2, ...)
Nach dem Login kopieren

例如,我们可以按如下方式调用上面定义的 get_user_info 存储过程:

CALL `get_user_info`(1);
Nach dem Login kopieren

3、删除存储过程

如果随着时间的推移,一个存储过程已经不再需要,可以使用 DROP PROCEDURE 语句删除它:

DROP PROCEDURE `procedure_name`;
Nach dem Login kopieren

例如:

DROP PROCEDURE `get_user_info`;
Nach dem Login kopieren

4、存储过程实例

我们来看一个完整的存储过程实例。假设我们有一个 score 表,存储了学生的考试成绩,而我们需要计算出每个学生的总分、平均分,并按照总分从高到低排列。这时可以使用存储过程来实现:

CREATE PROCEDURE `calc_stu_score`()
BEGIN
     DECLARE `total_score` INT;
     DECLARE `avg_score` FLOAT;
     DECLARE `stu_id` INT DEFAULT 0;
     DECLARE `stu_name` VARCHAR(255);
     DECLARE `total` INT DEFAULT 0;
    DECLARE `cursor_stu_id` CURSOR FOR SELECT `stu_id` FROM `score` GROUP BY `stu_id`;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = TRUE;

    DROP TEMPORARY TABLE IF EXISTS `tmp_score`;
    CREATE TEMPORARY TABLE `tmp_score` (
        `stu_id` INT NOT NULL,
        `stu_name` VARCHAR(255) NOT NULL,
        `total_score` INT NOT NULL,
        `avg_score` FLOAT NOT NULL,
        PRIMARY KEY (`stu_id`)
    );

    OPEN cursor_stu_id;

    stu_loop: LOOP
        FETCH cursor_stu_id INTO stu_id;
        IF finished = TRUE THEN 
            LEAVE stu_loop;
        END IF;

        SELECT `name` INTO stu_name FROM `student` WHERE `stu_id` = stu_id;

        SELECT SUM(`sorce`), COUNT(*) INTO total_score, total FROM `score` WHERE `stu_id` = stu_id;

        SET avg_score = total_score / NULLIF(total, 0);

        INSERT INTO `tmp_score` (`stu_id`, `stu_name`, `total_score`, `avg_score`) VALUES (stu_id, stu_name, total_score, avg_score);

    END LOOP;

    CLOSE cursor_stu_id;

    SELECT * FROM `tmp_score` ORDER BY `total_score` DESC;

    DROP TEMPORARY TABLE `tmp_score`;

END
Nach dem Login kopieren

在这个存储过程中,我们首先定义了一些需要使用的变量,包括 total_score 表示某个学生的总分,avg_score 表示某个学生的平均分,stu_id 表示某个学生的编号,stu_name 表示某个学生的姓名,还有一个临时表 tmp_score

然后我们使用了 DECLARE CURSOR 语句声明了一个游标变量 cursor_stu_id,用于查询学生表中的学生编号。在循环中,我们根据这个学生编号查询成绩表,计算出该学生的总分和平均分,并将其保存到临时表中。最后,我们使用 SELECT 语句查询临时表,按照总分从高到低排序,并在最后使用 DROP TABLE 语句删除临时表。

最后,我们可以使用 CALL

Zum Beispiel erstellen wir eine gespeicherte Prozedur, um Benutzerinformationen zu erhalten:

CALL `calc_stu_score`();
Nach dem Login kopieren
Im SQL-Anweisungsblock der gespeicherten Prozedur können wir alle von MySQL unterstützten SQL-Anweisungen verwenden, B. SELECT, INSERT, UPDATE, DELETE usw. Sie können auch Kontrollflussanweisungen wie IF, WHILE, LOOP usw. verwenden, um eine komplexere Datenlogikverarbeitung zu erreichen.

2. Rufen Sie die gespeicherte Prozedur auf #🎜🎜##🎜🎜#Nachdem wir die gespeicherte Prozedur erstellt haben, können wir die gespeicherte Prozedur über die CALL-Anweisung aufrufen und ihr Parameter übergeben: #🎜🎜#rrreee# 🎜🎜 #Zum Beispiel können wir die oben definierte gespeicherte Prozedur get_user_info wie folgt aufrufen: #🎜🎜#rrreee#🎜🎜#3. Löschen Sie die gespeicherte Prozedur #🎜🎜##🎜🎜#Wenn vorbei Wenn eine gespeicherte Prozedur im Laufe der Zeit nicht mehr benötigt wird, können Sie sie mit der DROP PROCEDURE-Anweisung löschen: #🎜🎜#rrreee#🎜🎜#Zum Beispiel: #🎜🎜#rrreee#🎜🎜#4, gespeicherte Prozedurinstanz #🎜🎜##🎜🎜 #Sehen wir uns ein vollständiges Beispiel einer gespeicherten Prozedur an. Angenommen, wir haben eine score-Tabelle, in der die Testergebnisse der Schüler gespeichert sind, und wir müssen die Gesamtpunktzahl und die durchschnittliche Punktzahl jedes Schülers berechnen und sie entsprechend der Gesamtpunktzahl von hoch nach niedrig ordnen. Zu diesem Zeitpunkt können Sie eine gespeicherte Prozedur verwenden, um Folgendes zu erreichen: #🎜🎜#rrreee#🎜🎜#In dieser gespeicherten Prozedur definieren wir zunächst einige Variablen, die verwendet werden müssen, einschließlich total_score zur Darstellung von a Gesamtpunktzahl des Schülers, avg_score stellt die durchschnittliche Punktzahl eines bestimmten Schülers dar, stu_id stellt die Nummer eines bestimmten Schülers dar, stu_name stellt den Namen eines bestimmten Schülers dar bestimmter Schüler, und es gibt eine temporäre Tabelle tmp_score. #🎜🎜##🎜🎜#Dann haben wir mit der Anweisung DECLARE CURSOR eine Cursorvariable cursor_stu_id für die Abfrage der Studierendennummer in der Studierendentabelle deklariert. In der Schleife fragen wir die Punktetabelle basierend auf dieser Schülernummer ab, berechnen die Gesamtpunktzahl und die Durchschnittspunktzahl des Schülers und speichern sie in einer temporären Tabelle. Schließlich verwenden wir die Anweisung SELECT, um die temporäre Tabelle abzufragen, sortieren die Gesamtpunktzahl von hoch nach niedrig und verwenden schließlich die Anweisung DROP TABLE, um die temporäre Tabelle zu löschen. #🎜🎜##🎜🎜#Schließlich können wir die Anweisung CALL verwenden, um diese gespeicherte Prozedur aufzurufen: #🎜🎜#rrreee#🎜🎜#Zusammenfassung#🎜🎜##🎜🎜#Die gespeicherte Prozedur ist MySQL Es ist ein sehr leistungsfähiges Tool, das unseren Datenbankbetriebsprozess erheblich vereinfachen und die Leistung und Sicherheit der Datenbank verbessern kann. In praktischen Anwendungen können wir gespeicherte Prozeduren verwenden, um viele komplexe Datenverarbeitungsvorgänge abzuschließen, um Geschäftsanforderungen besser zu erfüllen, die Effizienz zu verbessern und Kosten zu senken. #🎜🎜#

Das obige ist der detaillierte Inhalt vonMySQL verwendet gespeicherte Prozeduren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!