CREATE [DEFINER = {user
| CURRENT_USER }] TRIGGERtrigger_name
trigger_time
trigger_event
ONtbl_name
FOR EACH ROWtrigger_body
Pernyataan ini membuat trigger baru. trigger adalah salah satu nama objek database yang berhubungan dengan tabel, dan aktif ketika peristiwa tertentu terjadi pada tabel. Trigger-nya terkait dengan tabel bernama tbl_name, yang harus mengacu pada tabel permanen. Anda tidak dapat mengaitkan trigger dengan tabel
TEMPORARY
atau tabel view. CREATE TRIGGER ditambahkan di MySQL 5.0.2.
Dalam MySQL 5.0 CREATE TRIGGER membutuhkan hak SUPER istimewa .
The DEFINER
clause menentukan konteks keamanan yang akan digunakan saat memeriksa hak akses pada waktu aktivasi trigger. Ini ditambahkan di MySQL 5.0.17. Lihat nanti dalam bagian ini untuk informasi lebih lanjut.
trigger_time adalah waktu pemicu. Hal ini dapat berupa BEFORE atau AFTER untuk menyatakan bahwa trigger aktif sebelum atau setelah setiap baris dimodifikasi.
trigger_event menunjukkan jenis pernyataan yang mengaktifkan trigger. trigger_event bisa salah satu dari berikut:
- INSERT: Trigger aktif setiap kali baris baru dimasukkan ke dalam tabel, misalnya, melalui INSERT, LOAD DATA, dan pernyataan REPLACE.
- UPDATE: Trigger aktif setiap kali sebuah baris dimodifikasi, misalnya, melalui pernyataan UPDATE.
- DELETE: Trigger aktif setiap kali sebuah baris dihapus dari tabel, misalnya, melalui pernyataan DELETE dan REPLACE. Namun,
pernyataan DROP TABLE dan TRUNCATE TABEL tidak mengaktifkan trigger ini, karena mereka tidak menggunakan DELETE. Lihat Bagian 12.2.10, "Sintaks TRUNCATE TABLE"
testref
seperti ditunjukkan dalam contoh ini:
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);
Misalkan Anda memasukkan nilai berikut ke dalam tabel test1 seperti yang ditunjukkan di sini:
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 Akibatnya, data di empat tabel akan menjadi sebagai berikut: 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) http://dev.mysql.com/
Tidak ada komentar:
Posting Komentar