Selasa, 28 Juni 2011

View, Trigger dan Store Prosedure pada MySQL

MySQL adalah sebuah perangkat lunak sistem manajemen basis data SQL (bahasa Inggris: database management system) atau DBMS yang multithread, multi-user, dengan sekitar 6 juta instalasi di seluruh dunia. MySQL AB membuat MySQL tersedia sebagai perangkat lunak gratis dibawah lisensi GNU General Public License (GPL), tetapi mereka juga menjual dibawah lisensi komersial untuk kasus-kasus dimana penggunaannya tidak cocok dengan penggunaan GPL.

Tidak sama dengan proyek-proyek seperti Apache, dimana perangkat lunak dikembangkan oleh komunitas umum, dan hak cipta untuk kode sumber dimiliki oleh penulisnya masing-masing, MySQL dimiliki dan disponsori oleh sebuah perusahaan komersial Swedia MySQL AB, dimana memegang hak cipta hampir atas semua kode sumbernya. Kedua orang Swedia dan satu orang Finlandia yang mendirikan MySQL AB adalah: David Axmark, Allan Larsson, dan Michael "Monty" Widenius.


Pada MySQL terdapat beberapa fitur-fitur pendukung yaitu :
  1. View Procedure
  2. Trigger Procedure
  3. Store Procedure


View 

Salah satu feature yang terdapat pada MySQL adalah view. View adalah tabel temporari kadang ada juga yang bilang virtual tabel. Biasanya view di buat untuk menyederhanakan pengambilan data misalkan di tabel tersebut terdapat join, group by, aggregate (sum, min, max, dsb).

Syntax View Procedure

  • SQL CREATE VIEW Syntax
     CREATE VIEW view_name AS
     SELECT column_name(s)
     FROM table_name
     WHERE condition
  • SQL CREATE OR REPLACE VIEW Syntax
     CREATE OR REPLACE VIEW view_name AS
     SELECT column_name(s)
     FROM table_name
     WHERE condition
  • SQL DROPPING VIEW
     DROP VIEW view_name

Trigers

Trigger adalah suatu prosedur yang otomatis akan dijalankan apabila “pemicu”dari trigger itu dipanggil. Sebagai contoh : penghapusan satu tabel akan memicu suatu trigger untuk menghapus pada tabel yang lain yang telah ditunjuk terlebih dahulu. dibawah ini saya berikan satu contoh penggunaan trigger pada database MySQL.

Syntax Triger Procedure

CREATE
[DEFINER = { user | CURRENT_USER }]
TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR EACH ROW trigger_stmt
Keterangan
  1. DEFINER menunjukkan nama user yang mempunyai hak akses untuk mengakses triger.
  2. Triger_time menunjukkan saat triger tersebut dijalankan. Terdiri dari Before atau After
  3. Triger_time menandakan saat keadaan bagaimana triger tersebut aktif. Terdiri dari
    1. Insert : Triger aktif saat baris baru dimasukkan ke dalam tabel
    2. Update : Triger aktif saat ada baris diperbaharui dimasukkan di dalam tabel
    3. Delete :Triger aktif saat baris dihapus dalam tabel

Contoh Trigers

CREATE TABLE test1(a1 INT);
CREATE TABLE test2(a2 INT);
CREATE TABLE test3(a3 INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
CREATE TABLE test4(
a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
b4 INT DEFAULT 0
);
DELIMITER |
CREATE TRIGGER testref BEFORE INSERT ON test1
FOR EACH ROW BEGIN
INSERT INTO test2 SET a2 = NEW.a1;
DELETE FROM test3 WHERE a3 = NEW.a1;
UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
END;
|
DELIMITER ;
INSERT INTO test3 (a3) VALUES
(NULL), (NULL), (NULL), (NULL), (NULL),
(NULL), (NULL), (NULL), (NULL), (NULL);
INSERT INTO test4 (a4) VALUES
(0), (0), (0), (0), (0), (0), (0), (0), (0), (0);
 
Silakan masukkan nilai ke test1

mysql> INSERT INTO test1 VALUES 
-> (1), (3), (1), (7), (1), (8), (4), (4);
Query OK, 8 rows affected (0.01 sec)
Records: 8  Duplicates: 0  Warnings: 0

As a result, the data in the four tables will be as follows:
mysql> SELECT * FROM test1;
+------+
| a1   |
+------+
|    1 |
|    3 |
|    1 |
|    7 |
|    1 |
|    8 |
|    4 |
|    4 |
+------+
8 rows in set (0.00 sec)
mysql> SELECT * FROM test2;
+------+
| a2   |
+------+
|    1 |
|    3 |
|    1 |
|    7 |
|    1 |
|    8 |
|    4 |
|    4 |
+------+
8 rows in set (0.00 sec)
mysql> SELECT * FROM test3;
+----+
| a3 |
+----+
|  2 |
|  5 |
|  6 |
|  9 |
| 10 |
+----+
5 rows in set (0.00 sec)
mysql> SELECT * FROM test4;
+----+------+
| a4 | b4   |
+----+------+
|  1 |    3 |
|  2 |    0 |
|  3 |    1 |
|  4 |    2 |
|  5 |    0 |
|  6 |    0 |
|  7 |    1 |
|  8 |    1 |
|  9 |    0 |
| 10 |    0 |
+----+------+
10 rows in set (0.00 sec)

Store Procedure

Stored procedure adalah salah satu objek routine yang tersimpan pada database MySQL dan dapat digunakan untuk menggantikan berbagai kumpulan perintah yang sering kita gunakan, seperti misalkan sejumlah row ke table lain dengan filter tertentu.

Stored procedure sangat berguna ketika kita tidak ingin user mengakses table secara langsung, atau dengan kata lain membatasi hak akses user dan mencatat operasi yang dilakukan. Dengan demikian resiko kebocoran dan kerusakan data dapat lebih diminalisir.

Syntax Store Procedure

CREATE
    [DEFINER = { user | CURRENT_USER }]
    PROCEDURE sp_name (proc_parameter[,...])
    
[characteristic ...] routine_body

Contoh Penggunaan

Berikut adalah contoh pembuatan dan penggunaan stored procedure untuk menghapus data berdasarkan "kode produk" untuk tiga table yaitu table "ms_produk", "ms_harga_harian", dan "tr_penjualan".

  1. Buatlah satu stored procedure dengan nama HapusProduk, dengan satu argumen yaitu kode_produk_param bertipe teks (varchar) dengan perintah berikut :

    DELIMITER |
     
    CREATE PROCEDURE HapusProduk(IN kode_produk_param VARCHAR(12))
    BEGIN
            DELETE FROM ms_produk WHERE kode_produk = kode_produk_param;
            DELETE FROM ms_harga_harian WHERE kode_produk = kode_produk_param;
            DELETE FROM tr_penjualan WHERE kode_produk = kode_produk_param;
    END;
     
    |
     
    DELIMITER ;

  2. Setelah selesai dieksekusi, pastikan stored procedure tersebut sudah terbentuk di database kita.

  3. Sebelum kita mengeksekusi stored procedure tersebut. Kita coba lihat hasil query untuk produk "PROD-0000002" untuk ketiga table yang disebutkan di atas. Ini untuk memastikan adanya row untuk produk tersebut.


  4. Sekarang coba panggil stored procedure HapusProduk dengan parameter "PROD-0000002" dan tunggu beberapa saat sampai eksekusi selesai.

    CALL HapusProduk('PROD-0000002');


  5. Coba lakukan kembali perintah pada point no. 3 dan terlihat bahwa sudah tidak terdapat data untuk produk  "PROD-0000002" pada ketiga table tersebut.

  6. Selesai
Demikian sedikit pembahasan tentang fitur-fitur dalam MySQL semoga bermanfaat bagi teman2 semua.

Tidak ada komentar:

Posting Komentar