Pengenalan Trigger, Function, Procedure dan View pada MYSQL

May 2nd, 2008

Berikut adalah dasar-dasar trigger, function, procedure serta view yang bisa diimplementasikan pada MYSQL 5 keatas. Dengan menggunakan trigger, function, procedure serta view, pemanfaatan MYSQL akan lebih bermanfaat. Contohnya : kita bisa membuat urutan langkah-langkah tertentu setelah suatu even dilakukan (ex: insert, update, delete). Tutorial ini ditujukan bagi yang belum mengenal trigger, function, procedure serta view sama sekali. Bagi yang sudah bisa, artikel ini boleh dan harus diabaikan :-P

Procedure dan Function

Syntax Umum

procedure

Syntak untuk membuat procedure dalam MySQL adalah sebagai berikut.

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

Function

CREATE
    [DEFINER = { user | CURRENT_USER }]
    FUNCTION sp_name ([func_parameter[,...]])
    RETURNS type
    [characteristic ...] routine_body

Keterangan

1. proc_parameter (hanya pada procedure):

    [ IN | OUT | INOUT ] param_name type
  • IN parameter dilewatkan ke dalam procedure tetapi modifikasi nilai dari parameter ini tidak kelihatan setelah procedure tersebut dipanggil.
  • Out parameter merupakan parameter yang dilewatkan dari dalam procedure ke pemanggil procedure tersebut. Nilai inisialisasi saat memanggil adalah null dan hasil parameter akan kelihatan setelah procedure dipanggil.
  • INOUT parameter diinisilaisai oleh pemanggil procedure, kemudian hasil modifikasinya tersebut akan kelihatan setelah procedure tersebut dipanggil.

2. characteristic

    LANGUAGE SQL
  | [NOT] DETERMINISTIC
  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
  | SQL SECURITY { DEFINER | INVOKER }
  | COMMENT 'string'

3. routine_body:

Valid SQL procedure statement

Routine body berisi syntax-syntax sql yang valid, seperti insert atau select. Bisa juga berisi compound. Compount diapit oleh begin… end. Syntax dari compound system adalah sebagai berikut.

[begin_label:] BEGIN
    [statement_list]
END [end_label]

Compound ini bisa diisi dengan label. Begin label dan end label harus sama. Di dalam compound juga bisa berisi deklarai variabel, looping atau kontrol program lainnya. Setiap Function harus punya return value untuk mengembalikan nilai yang dihasilkan

Contoh Procedure dan Function MySQL

Berikut adalah contoh penggunaan procedure. Pertama kita buat terlebih dahulu database dengan nama adakara. Kemudian silakan buat table berikut dengan isinya. Berikut ini adalah hasil dumping dari database adakara.

CREATE TABLE `siswa` (
  `NIS` varchar(20) collate latin1_general_ci NOT NULL,
  `Nama` varchar(30) collate latin1_general_ci NOT NULL,
  `Angkatan` varchar(9) collate latin1_general_ci NOT NULL,
  PRIMARY KEY  (`NIS`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
LOCK TABLES `siswa` WRITE;
/*!40000 ALTER TABLE `siswa` DISABLE KEYS */;
INSERT INTO `siswa` VALUES ('1024','resika arthana','2005/2006'),('1','cxfbsdjg','2005/2006'),('2','dshfk','2005/2006'),('3','dsfku','2005/2006'),('11','Ari damayanti','2005/2006'),('12','wedana','2005/2006'),('122','andika','2005/2006'),('123','mas ayu','2005/2006');
/*!40000 ALTER TABLE `siswa` ENABLE KEYS */;
UNLOCK TABLES;
-- Dump completed on 2007-03-21  7:47:58

Procedure

Berikut ini adalah proses pembuatan procedure, dibuat dalam command from.

mysql> delimiter //
mysql> CREATE PROCEDURE jumlahSiswa (OUT param1 INT)
    -> BEGIN
    ->   SELECT COUNT(*) INTO param1 FROM siswa;
    -> END;
    -> //
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;

Function

mysql> create function tmbhSaudara(nama char(20)) returns char(5)

-> return concat('Saudara ',nama);

Query OK, 0 rows affected (0.36 sec)

Pemanggilan Procedure dan Function

Pemanggilan procedure menggunakan syntax

CALL procedure_atau_function_name([parameter[,...]])

procedure_atau_function_name adalah nama procedure ata fungsi yang dipanggil dan parameter adalah nama-nama parameter procedure atau fungsi tersebut

Procedure

mysql> call jumlahSiswa(@a);
Query OK, 0 rows affected (0.00 sec)
mysql> select @a;
+------+
| @a   |
+------+
| 8    |
+------+
1 row in set (0.00 sec)

Function

mysql> select tmbhSaudara(' resika arthana');

+--------------------------------+

| tmbhSaudara(' resika arthana') |

+--------------------------------+

| Saudara resika arthana |

+--------------------------------+

1 row in set (0.00 sec)

Menghapus Procedure dan Function

Untuk menghapus procedure atau function digunakan perintah sebagai berikut

DROP {PROCEDURE | FUNCTION} [IF EXISTS] procedure_or_function_name

Trigers

Syntax Umum Triger

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)
  1. QQ
    May 23rd, 2008 at 06:47
    Reply | Quote | #1

    Mas,, koq kaya yang dimanual mysql.chm ya,, bisa kasih tau ga script function lainnya,,, teng’s

  2. amed
    Jun 5th, 2008 at 05:12
    Reply | Quote | #2

    mas boleh mulai dari awal ga….(langkah2 nya)…..

  3. tude
    Jun 30th, 2008 at 05:15
    Reply | Quote | #3

    om swastiastu bli…

    bli, bisa dijelaskan lebih banyak ga… tentang fungsi triger…

    thanks….

  4. agus
    Jul 5th, 2008 at 04:33
    Reply | Quote | #4

    bagus buat nambah2 ilmu.
    misalkan kita buat semacam triggers tetapi trigger_event bukan ( insert, update & delete) melainkan waktu( jadi setiap 10 menit triggers tsb dijalankan ) ?
    thx.

  5. yulianto
    Jul 25th, 2008 at 07:46
    Reply | Quote | #5

    kalo triger digunakan buat otomasi pengurangan dan penambahan jumlah stok saat stok dikembalikan bisa tidak?makasih

  6. ndolelout
    Sep 17th, 2008 at 16:55
    Reply | Quote | #6

    bli nanya gmna procedure untuk ngecek apakah suatu file ada didalam folder atau belum ada, soalnya tiang menggunaan database mysql 5 dg basa pemrograman fox
    tengkyu nah bliii…

  7. yuno
    Oct 18th, 2008 at 02:02
    Reply | Quote | #7

    matur suksma bli…infone…
    salam kenal bli…

  8. arief adi
    Nov 28th, 2008 at 03:21
    Reply | Quote | #8

    terimakasih ilmunya…
    kebetulan ane ada makul database semester ini ^^

  9. ashadi
    Mar 12th, 2009 at 13:52
    Reply | Quote | #9

    bli……

    gimana caranya nampilan collation di php

    saya udah bisa nampilin semua struktur tapi yang collation itu lho…..

    ga bisa saya…..

    kalo ga salah baliprocom punyanya Mr. Gede Rasben Dantes ya bli ????
    reply :
    collation bagian mana? yang di table mysql? ga ngerti :D
    yapp.. kok kenal bli?

  10. basuki
    Sep 8th, 2009 at 15:57

    mas motanya databse mysql kalau buat fungsi itu bisa nampilin data kesamping ya trus bagaimana menampilakan penjualan pertahun
    misalkan tabel penjulan

    nah hasilnya gini tampil danya perbulan kesamping
    jan feb | jan feb
    baranga 1 2 2 4

    nanti di select
    select fungsipenjualan(tahun 2006-2009)

    maskih mas
    moh.basuki

  11. Barayuda
    Dec 27th, 2009 at 16:53

    Wah thx kak…
    Pas kali lagi nyari ketemu di web sini..
    Wah bakal rajin kesini lagi klo gtu..hehe

  12. Resika Arthana
    Dec 27th, 2009 at 19:04

    @basuki : untuk nampilin hasil tu tergantung programmingnya (aplikasi yang digunakan untuk menampilkan isi tabel)
    @bara: ha3.. siip. kalo ada artikel/pelajaran yang diinginkan tinggal request aja :-)

  13. Jempol..
    Jan 17th, 2010 at 16:25

    Mantap bro ……

  14. tutorial komputer
    Feb 24th, 2010 at 10:05

    cukup lengkap tutorialnya. biar tambah contohnya, ada tutorial mengenai trigger di mysql nich, ada di http://bit.ly/TriggerMySQL. :D
    tutorial komputer´s last blog ..Mengenal Trigger di MySQL My ComLuv Profile

  15. Cialis
    Mar 10th, 2010 at 01:12

    NSp4g3 Excellent article, I will take note. Many thanks for the story!

  16. cuhe
    Mar 15th, 2010 at 17:42

    wah bagus nih…
    ini buat tambahan referensi…
    http://dev.mysql.com/doc/refman/5.1/en/create-trigger.html
    cuhe´s last blog ..Quotes dari RFS@ING My ComLuv Profile

CommentLuv Enabled
[+] kaskus emoticons nartzco