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:
-
Jika Anda belum melakukannya, buat akun Linode dan Compute Instance. Lihat panduan Memulai Linode dan Membuat Instans Komputasi.
-
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.
-
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
-
Masuk ke server MySQL:
mysql -u root -p
Anda akan diminta untuk memasukkan kata sandi root database MySQL Anda. Kemudian, tekan Enter untuk melanjutkan.
-
Selanjutnya, Anda akan melihat prompt MySQL yang mirip dengan yang ditunjukkan di bawah ini.
mysql >
-
Masukkan perintah di bawah ini untuk membuat
test_db
basis data:CREATE DATABASE test_db;
Keluaran:
Query OK, 1 row affected (0.01 sec)
-
Buat pengguna database dan berikan akses penuh ke
test_db
basis data. GantiPASSWORD
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)
-
Berikan
test_user
hak penuh untuktest_db
basis data;GRANT ALL PRIVILEGES ON test_db.* TO 'test_user'@'localhost';
Keluaran:
Query OK, 1 row affected (0.01 sec)
-
Hak istimewa flush:
FLUSH PRIVILEGES;
Keluaran:
Query OK, 0 rows affected (0.01 sec)
Mengisi Database
-
Selanjutnya, beralih ke database test_db:
USE test_db;
Keluaran:
Database changed
-
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)
-
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)
-
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)
-
Keluar dari server MySQL.
QUIT;
Keluaran:
Bye!
-
Setelah Anda membuat
test_db
basis data,products
tabel, sebuahtest_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 perilakuIN
danOUT
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.
-
Masuk ke server MySQL menggunakan
test_user
kredensial yang Anda buat saat menyiapkan database:mysql -u test_user -p
-
Masukkan sandi
test_user
dan tekan Enter untuk melanjutkan. -
Anda akan mendapatkan
mysql >
mengingatkan. Lanjutkan dengan memilihtest_db
:USE test_db;
Keluaran:
Database changed.
-
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)
-
Ubah
DELIMITER
kembali ke;
DELIMITER ;
-
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 menentukanCOMPUTER 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