Rumah  >  Artikel  >  pangkalan data  >  mysql menggunakan prosedur tersimpan

mysql menggunakan prosedur tersimpan

王林
王林asal
2023-05-20 10:25:371476semak imbas

MySQL kini merupakan sistem pengurusan pangkalan data hubungan yang paling popular Ia menggunakan prosedur tersimpan untuk menyelenggara dan mengurus pelaksanaan pernyataan dan program SQL dengan lebih baik. Prosedur tersimpan ialah blok kod SQL tersusun awal yang boleh merangkum penyataan SQL yang biasa digunakan untuk meningkatkan kecekapan semasa berbilang pelaksanaan dan mengurangkan penggunaan sumber masa jalan.

Penggunaan prosedur tersimpan dalam MySQL

1 Cipta prosedur tersimpan

Secara asasnya, mencipta prosedur tersimpan adalah untuk menulis blok pernyataan SQL dan menciptanya dalam pangkalan data sistem. Simpan blok kod ini. Berikut ialah contoh khusus:

CREATE PROCEDURE `procedure_name` (`parameter_list`)
BEGIN
    -- SQL 语句块
END

di mana, procedure_name ialah nama prosedur yang disimpan dan paramter_list ialah senarai parameter prosedur yang disimpan, yang boleh termasuk parameter input, parameter output atau tiada parameter.

Sebagai contoh, kami mencipta prosedur tersimpan untuk mendapatkan maklumat pengguna:

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

Dalam blok pernyataan SQL prosedur tersimpan, kami boleh menggunakan semua pernyataan SQL yang disokong oleh MySQL, seperti SELECT, INSERT, UPDATE , DELETE, dsb., anda juga boleh menggunakan pernyataan aliran kawalan, seperti IF, WHILE, LOOP, dsb., untuk mencapai pemprosesan logik data yang lebih kompleks.

2. Panggil prosedur tersimpan

Selepas mencipta prosedur tersimpan, kita boleh memanggil prosedur tersimpan melalui pernyataan CALL dan hantar parameter kepadanya:

CALL procedure_name(param1, param2, ...)

Sebagai contoh, kita boleh menekan Panggil get_user_info prosedur tersimpan yang ditakrifkan di atas dengan cara berikut:

CALL `get_user_info`(1);

3. Padam prosedur tersimpan

Jika prosedur tersimpan tidak lagi diperlukan dari semasa ke semasa, anda boleh menggunakan kenyataan DROP PROCEDURE Padamkannya:

DROP PROCEDURE `procedure_name`;

Contohnya:

DROP PROCEDURE `get_user_info`;

4. Contoh prosedur tersimpan

Mari lihat contoh prosedur tersimpan yang lengkap. Katakan kita mempunyai jadual score yang menyimpan markah ujian pelajar, dan kita perlu mengira jumlah skor dan purata skor setiap pelajar, dan menyusunnya dari tinggi ke rendah mengikut jumlah skor. Ini boleh dicapai menggunakan prosedur tersimpan:

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

Dalam prosedur tersimpan ini, kami mula-mula mentakrifkan beberapa pembolehubah yang perlu digunakan, termasuk total_score mewakili jumlah skor pelajar, dan avg_score mewakili tertentu The skor purata pelajar, stu_id mewakili bilangan pelajar tertentu, stu_name mewakili nama pelajar tertentu, dan terdapat jadual sementara tmp_score.

Kemudian kami menggunakan pernyataan DECLARE CURSOR untuk mengisytiharkan pembolehubah kursor cursor_stu_id untuk menanyakan nombor pelajar dalam jadual pelajar. Dalam gelung, kami menanyakan jadual skor berdasarkan nombor pelajar ini, mengira jumlah skor dan purata skor pelajar, dan menyimpannya ke jadual sementara. Akhir sekali, kami menggunakan pernyataan SELECT untuk menanyakan jadual sementara, mengisih jumlah skor dari tinggi ke rendah, dan akhirnya menggunakan pernyataan DROP TABLE untuk memadamkan jadual sementara.

Akhir sekali, kita boleh menggunakan pernyataan CALL untuk memanggil prosedur tersimpan ini:

CALL `calc_stu_score`();

Ringkasan

Prosedur tersimpan ialah alat yang sangat berkuasa dalam MySQL, yang boleh sangat Memudahkan operasi pangkalan data kami dan meningkatkan prestasi dan keselamatan pangkalan data. Dalam aplikasi praktikal, kami boleh menggunakan prosedur tersimpan untuk melengkapkan banyak operasi pemprosesan data yang kompleks untuk memenuhi keperluan perniagaan dengan lebih baik, meningkatkan kecekapan dan mengurangkan kos.

Atas ialah kandungan terperinci mysql menggunakan prosedur tersimpan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:fail mysql aksara bercelaruArtikel seterusnya:fail mysql aksara bercelaru