Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Membuat dan Menggunakan Prosedur Tersimpan MySQL - Tutorial

Prosedur tersimpan adalah pernyataan SQL yang ditentukan pengguna yang disimpan dalam database MySQL dan dieksekusi sesuai permintaan untuk melakukan operasi database tertentu. Subrutin yang telah ditentukan ini membantu memindahkan logika bisnis ke database, yang menawarkan beberapa manfaat:

  • Perjalanan pulang pergi yang dilakukan ke server database oleh aplikasi diminimalkan.
  • Kemampuan pemeliharaan kode ditingkatkan, karena aplikasi yang berbeda dapat berbagi prosedur tersimpan.
  • Kinerja basis data ditingkatkan, karena prosedur tersimpan dikompilasi sekali dan dieksekusi dengan sangat cepat dan efisien.

Dalam panduan ini, Anda akan:

  • Pelajari sintaks untuk membuat prosedur tersimpan, dan nyatakan prosedur pertama Anda.

  • Jalankan prosedur contoh setelah Anda mendeklarasikannya.

  • Pelajari cara menghapus prosedur saat Anda tidak lagi membutuhkannya.

Sebelum Anda Mulai

Pastikan Anda memiliki yang berikut ini:

  1. Jika Anda belum melakukannya, buat akun Linode dan Compute Instance. Lihat panduan Memulai Linode dan Membuat Instans Komputasi.

  2. Ikuti panduan Menyiapkan dan Mengamankan Instans Komputasi untuk memperbarui sistem Anda. Anda mungkin juga ingin mengatur zona waktu, mengkonfigurasi nama host Anda, membuat akun pengguna terbatas, dan memperkuat akses SSH.

  3. Server dan klien MySQL diinstal pada server Linode. Panduan penginstalan untuk MySQL tersedia untuk distribusi yang berbeda di bagian MySQL kami.

Siapkan Database

Anda akan mulai dengan membuat database sampel, tabel, dan pengguna untuk mengakses database. Anda juga akan mengisi tabel dengan data sampel untuk tujuan pengujian.

Membuat Database, Tabel, dan Pengguna

  1. Masuk ke server MySQL:

     mysql -u root -p
    

    Anda akan diminta untuk memasukkan kata sandi root database MySQL Anda. Kemudian, tekan Enter untuk melanjutkan.

  2. Selanjutnya, Anda akan melihat prompt MySQL yang mirip dengan yang ditunjukkan di bawah ini.

    mysql >
  3. Masukkan perintah di bawah ini untuk membuat test_db basis data:

    CREATE DATABASE test_db;
    

    Keluaran:

    Query OK, 1 row affected (0.01 sec)
  4. Buat pengguna database dan berikan akses penuh ke test_db basis data. Ganti PASSWORD dengan nilai yang kompleks dan unik yang mengikuti pedoman untuk kata sandi MySQL:

    CREATE USER 'test_user'@'localhost' IDENTIFIED BY 'PASSWORD';
    

    Keluaran:

    Query OK, 1 row affected (0.01 sec)
  5. Berikan test_user hak penuh untuk test_db basis data;

    GRANT ALL PRIVILEGES ON test_db.* TO 'test_user'@'localhost';
    

    Keluaran:

    Query OK, 1 row affected (0.01 sec)
  6. Hak istimewa flush:

    FLUSH PRIVILEGES;
    

    Keluaran:

    Query OK, 0 rows affected (0.01 sec)

Mengisi Database

  1. Selanjutnya, beralih ke database test_db:

    USE test_db;
    

    Keluaran:

    Database changed
  2. Buat products tabel untuk menyimpan catatan sampel:

    CREATE TABLE products(product_id BIGINT PRIMARY KEY, product_name VARCHAR(50), category_name VARCHAR(50) ) ENGINE=INNODB;
    

    Keluaran:

    Query OK, 0 rows affected (0.01 sec)
  3. Sekarang Anda dapat menambahkan beberapa produk ke tabel produk dengan menjalankan perintah di bawah ini satu per satu:

    INSERT INTO products (product_id, product_name, category_name) VALUES ('1', 'GAMING KEYBOARD', 'COMPUTER ACCESSORIES');
    INSERT INTO products (product_id, product_name, category_name) VALUES ('2', 'OPTICAL MOUSE', 'COMPUTER ACCESSORIES');
    INSERT INTO products (product_id, product_name, category_name) VALUES ('3', 'MOUSE PAD', 'COMPUTER ACCESSORIES');
    INSERT INTO products (product_id, product_name, category_name) VALUES ('4', 'STEREO SYSTEM', 'ELECTRONICS');
    INSERT INTO products (product_id, product_name, category_name) VALUES ('5', '32 INCH TV', 'ELECTRONICS');
    INSERT INTO products (product_id, product_name, category_name) VALUES ('6', 'DVB-T2 RECEIVER', 'ELECTRONICS');
    

    Anda akan mendapatkan output di bawah ini setelah menjalankan setiap Insert pernyataan:

    Query OK, 1 row affected (0.00 sec)
  4. Berikutnya. konfirmasi jika produk sampel berhasil dimasukkan ke database dengan menjalankan Select perintah di bawah ini:

    SELECT * FROM products;
    

    Produk sampel Anda harus terdaftar seperti yang ditunjukkan di bawah ini:

    +------------+-----------------+----------------------+
    | product_id | product_name    | category_name        |
    +------------+-----------------+----------------------+
    |          1 | GAMING KEYBOARD | COMPUTER ACCESSORIES |
    |          2 | OPTICAL MOUSE   | COMPUTER ACCESSORIES |
    |          3 | MOUSE PAD       | COMPUTER ACCESSORIES |
    |          4 | STEREO SYSTEM   | ELECTRONICS          |
    |          5 | 32 INCH TV      | ELECTRONICS          |
    |          6 | DVB-T2 RECEIVER | ELECTRONICS          |
    +------------+-----------------+----------------------+
    6 rows in set (0.00 sec)
  5. Keluar dari server MySQL.

    QUIT;
    

    Keluaran:

    Bye!
  6. Setelah Anda membuat test_db basis data, products tabel, sebuah test_user , dan menambahkan beberapa contoh produk, sekarang Anda dapat melanjutkan ke pembuatan prosedur tersimpan pertama.

Membuat Prosedur Tersimpan

Sintaks Prosedur Tersimpan

Sintaks dasar untuk membuat prosedur tersimpan dalam database MySQL ditunjukkan di bawah ini:

DELIMITER &&
CREATE PROCEDURE PROCEDURE_NAME (PARAMETER_1, PARAMETER_2, PARAMETER_N...)
BEGIN
[SQL STATEMENT]
END &&
DELIMITER ;
  • DELIMITER && baris di awal memberi tahu server MySQL untuk memperlakukan pernyataan SQL berikut sebagai pernyataan tunggal, daripada mengeksekusinya satu per satu. && Another lainnya disertakan pada baris berikutnya untuk menandai akhir dari pernyataan ini.

  • PROCEDURE_NAME adalah tempat nama prosedur tersimpan Anda dideklarasikan.

  • Nama prosedur diikuti oleh serangkaian tanda kurung, dan ini menyertakan parameter ke prosedur Anda. Prosedur tersimpan mendukung parameter yang dipisahkan koma, dan fitur ini membuatnya lebih fleksibel. Lihat bagian parameter untuk detail selengkapnya.

  • BEGIN...END perintah menyertakan pernyataan SQL yang ingin Anda jalankan oleh prosedur tersimpan.

  • Pada akhirnya, pernyataan DELIMITER ; dikeluarkan lagi untuk mengubah pembatas kembali ke nilai default ;

Parameter Prosedur Tersimpan

Setiap parameter untuk prosedur memiliki tipe, nama, dan tipe data, dipisahkan oleh spasi:

PARAMETER_TYPE PARAMETER_NAME DATA_TYPE

Misalnya, untuk membuat parameter dengan tipe IN , bernama category , dengan VARCHAR tipe data yang memiliki panjang 50 karakter, gunakan sintaks ini:

IN category VARCHAR(50)

MySQL mendukung tiga jenis parameter:

  • IN :Nilai parameter harus ditentukan oleh klien pemanggil. Nilai ini tidak dapat diubah oleh prosedur tersimpan .

    Misalnya, jika Anda meneruskan variabel sesi MySQL sebagai IN parameter ke prosedur, dan prosedur memodifikasi nilai ini dalam pernyataannya, variabel sesi Anda akan tetap tidak dimodifikasi setelah prosedur keluar.

  • OUT :Jenis parameter ini juga ditentukan oleh program pemanggil, tetapi nilainya dapat diubah oleh prosedur tersimpan dan diambil oleh program pemanggil.

    Perhatikan bahwa prosedur tersimpan tidak dapat mengakses nilai awal variabel yang diteruskan sebagai OUT parameter.

  • INOUT :Parameter jenis ini menggabungkan perilaku IN dan OUT parameter:

    • Prosedur tersimpan dapat membaca nilai awal parameter.

    • Parameter dapat diubah selama eksekusi prosedur tersimpan.

    • Nilai yang diubah dapat dikembalikan ke program pemanggil, jika program pemanggil melewatkan variabel sebagai parameter.

Contoh Stored Procedure

Setelah memahami sintaks dasar, mari buat prosedur tersimpan sederhana untuk memfilter produk berdasarkan nama kategori. Nama kategori akan diberikan sebagai IN parameter.

  1. Masuk ke server MySQL menggunakan test_user kredensial yang Anda buat saat menyiapkan database:

     mysql -u test_user -p
    
  2. Masukkan sandi test_user dan tekan Enter untuk melanjutkan.

  3. Anda akan mendapatkan mysql > mengingatkan. Lanjutkan dengan memilih test_db :

     USE test_db;
    

    Keluaran:

    Database changed.
  4. Kemudian, masukkan perintah SQL di bawah ini untuk membuat filter_by_category prosedur tersimpan:

     DELIMITER &&
     CREATE PROCEDURE filter_by_category (IN category VARCHAR(50))
     BEGIN
     SELECT * FROM products WHERE category_name=category;
     END &&
    

    Keluaran:

    Query OK, 0 rows affected (0.00 sec)
  5. Ubah DELIMITER kembali ke ;

    DELIMITER ;
    
  6. Jika kode untuk membuat prosedur tersimpan berhasil dijalankan, Anda sekarang dapat melanjutkan untuk menjalankan prosedur tersimpan.

Menjalankan Stored Procedure

Pada langkah ini, kita akan memanggil stored procedure yang kita buat di atas. Kami akan mengikuti sintaks dasar ini:

CALL PROCEDURE_NAME (COMMA-SEPARATED PARAMETER VALUES);
  • Untuk menjalankan filter_by_category prosedur tersimpan yang kita buat di atas, masukkan perintah di bawah ini:

    CALL filter_by_category('COMPUTER ACCESSORIES');
    

    Prosedur tersimpan sekarang harus menampilkan semua produk di COMPUTER ACCESSORIES kategori karena kami telah menentukan COMPUTER ACCESSORIES sebagai parameter:

    +------------+-----------------+----------------------+
    | product_id | product_name    | category_name        |
    +------------+-----------------+----------------------+
    |          1 | GAMING KEYBOARD | COMPUTER ACCESSORIES |
    |          2 | OPTICAL MOUSE   | COMPUTER ACCESSORIES |
    |          3 | MOUSE PAD       | COMPUTER ACCESSORIES |
    +------------+-----------------+----------------------+
    3 rows in set (0.00 sec)
    
    Query OK, 0 rows affected (0.01 sec)
  • Demikian pula, Anda dapat mengambil daftar semua produk dari ELECTRONICS kategori dengan menjalankan perintah di bawah ini.

    CALL filter_by_category('ELECTRONICS') ;
    

    Keluaran:

    +------------+-----------------+---------------+
    | product_id | product_name    | category_name |
    +------------+-----------------+---------------+
    |          4 | STEREO SYSTEM   | ELECTRONICS   |
    |          5 | 32 INCH TV      | ELECTRONICS   |
    |          6 | DVB-T2 RECEIVER | ELECTRONICS   |
    +------------+-----------------+---------------+
    3 rows in set (0.00 sec)
    
    Query OK, 0 rows affected (0.01 sec)

Prosedur tersimpan kami bekerja seperti yang kami harapkan. Selanjutnya, kita akan mempelajari cara menghapus prosedur tersimpan jika kita tidak ingin prosedur tersebut dijalankan lagi.

Menghapus Prosedur Tersimpan

Anda dapat menghapus prosedur tersimpan MySQL jika Anda tidak ingin menggunakannya lagi atau jika Anda ingin membuatnya kembali dari awal. Sintaks dasar untuk menghapus prosedur tersimpan ditunjukkan di bawah ini:

DROP PROCEDURE IF EXISTS PROCEDURE_NAME;

Misalnya, untuk menghapus filter_by_category prosedur tersimpan, jalankan perintah MySQL di bawah ini:

DROP PROCEDURE IF EXISTS filter_by_category;

Jika prosedur tersimpan ada, Anda akan mendapatkan output yang ditunjukkan di bawah ini:

Query OK, 0 rows affected (0.00 sec)

Itu saja dalam hal membuat, menggunakan, dan menghapus prosedur tersimpan MySQL.

Informasi Lebih Lanjut

Anda mungkin ingin berkonsultasi dengan sumber daya berikut untuk informasi tambahan tentang topik ini. Meskipun ini disediakan dengan harapan dapat bermanfaat, harap perhatikan bahwa kami tidak dapat menjamin keakuratan atau ketepatan waktu materi yang dihosting secara eksternal.

  • Bekerja dengan prosedur tersimpan MySQL

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JSON_REPLACE() – Ganti Nilai dalam Dokumen JSON di MySQL

  2. TO_SECONDS() Contoh – MySQL

  3. Tanggal dalam URL hh/bb/tttt

  4. Hapus dari dua tabel dalam satu kueri

  5. Manajemen akun pengguna, peran, izin, otentikasi PHP dan MySQL - Bagian 2