Sponsor

Best Patner

Sabtu, 09 April 2011

Membuat Trigger mysql

Sebuah Trigger adalah objek database yang bernama yang mendefinisikan beberapa tindakan yang database harus mengambil ketika beberapa database yang terkait peristiwa terjadi. Trigger dijalankan ketika anda mengeluarkan perintah manipulasi data seperti INSERT, DELETE, UPDATE di atas meja yang memicu telah dibuat. Mereka secara otomatis dijalankan dan juga transparan bagi pengguna. Tapi untuk menciptakan memicu pengguna harus memiliki hak istimewa CREATE TRIGGER. Pada bagian ini kami akan menjelaskan Anda tentang sintaks untuk membuat dan drop pemicu dan menjelaskan beberapa contoh bagaimana menggunakannya.
CREATE TRIGGER
Sintaks CREATE TRIGGER umum adalah:
        
trigger_time CREATE TRIGGER trigger_name trigger_event TENTANG tbl_name UNTUK SETIAP trigger_statement ROW
Dengan menggunakan pernyataan di atas kita dapat menciptakan memicu baru. Pemicunya hanya dapat mengasosiasikan dengan nama tabel dan yang harus mengacu pada meja permanen. Trigger_time berarti waktu pemicu. Hal ini dapat SEBELUM atau SESUDAH. Hal ini digunakan untuk menentukan yang memicu kebakaran sebelum atau setelah pernyataan yang dieksekusi itu. Trigger_event menentukan pernyataan yang mengeksekusi memicu. trigger_event bisa salah satu dari DML Pernyataan: INSERT, UPDATE, DELETE.
Kita tidak dapat memiliki pemicu dua untuk tabel tertentu, yang memicu aksi waktu yang sama dan acara. Untuk Instance: kita tidak bisa memiliki dua SEBELUM INSERT pemicu untuk tabel yang sama. Tapi kita dapat memiliki INSERT SEBELUM dan memicu SEBELUM UPDATE untuk tabel yang sama.
Trigger_statement memiliki pernyataan yang mengeksekusi ketika kebakaran pemicu tetapi jika anda ingin mengeksekusi beberapa pernyataan yang Anda harus menggunakan pernyataan senyawa BEGIN ... END.
Kita bisa merujuk kolom tabel yang terkait dengan memicu dengan menggunakan kata kunci LAMA dan BARU. OLD.column_name digunakan untuk merujuk kolom dari sebuah baris yang sudah ada sebelum dihapus atau diperbarui dan NEW.column_name digunakan untuk merujuk kolom dari sebuah baris baru yang dimasukkan atau setelah baris yang sudah ada diperbarui.
Dalam pemicu INSERT kita dapat menggunakan hanya NEW.column_name karena tidak ada baris tua dan dalam memicu HAPUS kita dapat menggunakan hanya OLD.column_name karena tidak ada baris baru. Tetapi dalam memicu UPDATE kita bisa menggunakan keduanya, OLD.column_name digunakan untuk merujuk kolom berturut-turut sebelum diperbarui dan NEW.Column_name digunakan untuk merujuk kolom baris setelah diperbarui.
Pada contoh berikut ini, kami memperbarui kolom tabel Gaji Karyawan sebelum memasukkan suatu arsip dalam tabel Emp. Contoh:


mysql> SELECT * FROM Employee;
+-----+---------+----------+-------------------+--------+-------+
| Eid | Ename   | City     | Designation       | Salary | Perks |
+-----+---------+----------+-------------------+--------+-------+
| 1   | Rahul   | Delhi    | Manager           | 10300  | 853   |
| 2   | Gaurav  | Mumbai   | Assistant Manager | 10300  | 853   |
| 3   | Chandan | Banglore | Team Leader       | 15450  | 999   |
| 5   | Tapan   | Pune     | Developer         | 20600  | 1111  |
| 6   | Amar    | Chennai  | Developer         | 16000  | 1124  |
| 7   | Santosh | Delhi    | Designer          | 10000  | 865   |
| 8   | Suman   | Pune     | Web Designer      | 20000  | 658   |
+-----+---------+----------+-------------------+--------+-------+
7 rows in set (0.00 sec)
mysql> delimiter //
mysql> CREATE TRIGGER ins_trig BEFORE INSERT ON Emp
    -> FOR EACH ROW
    -> BEGIN
    -> UPDATE Employee SET Salary=Salary-300 WHERE Perks>500;
    -> END;
    -> //
Query OK, 0 rows affected (0.01 sec)
mysql> delimiter ;
mysql> INSERT INTO Emp VALUES(9,'Rajesh','Delhi','Developer',15000,658);
Query OK, 1 row affected (0.05 sec)
mysql> SELECT * FROM Employee;
+-----+---------+----------+-------------------+--------+-------+
| Eid | Ename   | City     | Designation       | Salary | Perks |
+-----+---------+----------+-------------------+--------+-------+
| 1   | Rahul   | Delhi    | Manager           | 10000  | 853   |
| 2   | Gaurav  | Mumbai   | Assistant Manager | 10000  | 853   |
| 3   | Chandan | Banglore | Team Leader       | 15150  | 999   |
| 5   | Tapan   | Pune     | Developer         | 20300  | 1111  |
| 6   | Amar    | Chennai  | Developer         | 15700  | 1124  |
| 7   | Santosh | Delhi    | Designer          | 9700   | 865   |
| 8   | Suman   | Pune     | Web Designer      | 19700  | 658   |
+-----+---------+----------+-------------------+--------+-------+
7 rows in set (0.00 sec)


Pada contoh berikut ini kita memodifikasi tabel gaji karyawan sebelum memperbarui catatan dari tabel yang sama. Contoh:

mysql> delimiter //
mysql> CREATE TRIGGER updtrigger BEFORE UPDATE ON Employee
    -> FOR EACH ROW
    -> BEGIN
    -> IF NEW.Salary<=500 THEN
    -> SET NEW.Salary=10000;
    -> ELSEIF NEW.Salary>500 THEN
    -> SET NEW.Salary=15000;
    -> END IF;
    -> END
    -> //
Query OK, 0 rows affected (0.01 sec)
mysql> delimiter ;
mysql> UPDATE Employee
    -> SET Salary=500;
Query OK, 5 rows affected (0.04 sec)
Rows matched: 7  Changed: 5  Warnings: 0
mysql> SELECT * FROM Employee;
+-----+---------+----------+-------------------+--------+-------+
| Eid | Ename   | City     | Designation       | Salary | Perks |
+-----+---------+----------+-------------------+--------+-------+
| 1   | Rahul   | Delhi    | Manager           | 10000  | 853   |
| 2   | Gaurav  | Mumbai   | Assistant Manager | 10000  | 853   |
| 3   | Chandan | Banglore | Team Leader       | 10000  | 999   |
| 5   | Tapan   | Pune     | Developer         | 10000  | 1111  |
| 6   | Amar    | Chennai  | Developer         | 10000  | 1124  |
| 7   | Santosh | Delhi    | Designer          | 10000  | 865   |
| 8   | Suman   | Pune     | Web Designer      | 10000  | 658   |
+-----+---------+----------+-------------------+--------+-------+
7 rows in set (0.00 sec)
mysql> UPDATE Employee
    -> SET Salary=1500;
Query OK, 7 rows affected (0.03 sec)
Rows matched: 7  Changed: 7  Warnings: 0
mysql> SELECT * FROM Employee;
+-----+---------+----------+-------------------+--------+-------+
| Eid | Ename   | City     | Designation       | Salary | Perks |
+-----+---------+----------+-------------------+--------+-------+
| 1   | Rahul   | Delhi    | Manager           | 15000  | 853   |
| 2   | Gaurav  | Mumbai   | Assistant Manager | 15000  | 853   |
| 3   | Chandan | Banglore | Team Leader       | 15000  | 999   |
| 5   | Tapan   | Pune     | Developer         | 15000  | 1111  |
| 6   | Amar    | Chennai  | Developer         | 15000  | 1124  |
| 7   | Santosh | Delhi    | Designer          | 15000  | 865   |
| 8   | Suman   | Pune     | Web Designer      | 15000  | 658   |
+-----+---------+----------+-------------------+--------+-------+
7 rows in set (0.01 sec)


DROP TRIGGER
Sintaks umum DROP TRIGGER adalah:
         DROP TRIGGER trigger_name

Pernyataan ini digunakan untuk menjatuhkan pemicu. Contoh Menjatuhkan Pemicu ini:


mysql> DROP TRIGGER updtrigger;
Query OK, 0 rows affected (0.02 sec)


sumber dari http://www.roseindia.net/mysql/mysql5/triggers.shtml

0 komentar:

Posting Komentar