Wah siang-siang gini lagi belajar tentang menggunakan trigger, Insya Allah kalo ini dah selesai mau berlanjut belajar tentang procedure mysql. Maklum yang namanya sedang belajar pasti akan menemui banyak masalah. Nah karena menemukan beberapa masalah sehingga akan menemukan beberapa solusi, dan alhamdulillah untuk mengingatkan saya sendiri terutama makanya saya menuliskan masalah dan solusi saya disini.
OK langsung saja menuju ke pokok persoalan. Misalkan saya membuat 2 buah tabel dengan nama tabel users dan table user_roles. Untuk tabel users:
<code>
CREATE TABLE `users` (
`userID` int(10) unsigned zerofill NOT NULL auto_increment,
`userName` varchar(20) NOT NULL,
`passWord` text NOT NULL,
`firstName` varchar(20) NOT NULL,
`lastName` varchar(20) NOT NULL,
`email` varchar(30) NOT NULL,
`alamat` text NOT NULL,
`status` int(1) NOT NULL,
PRIMARY KEY (`userID`),
KEY `Username` (`userName`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;
</code>
Dan untuk tabel user_roles:
<code>
CREATE TABLE `user_roles` (
`userID` bigint(20) NOT NULL,
`roleID` bigint(20) NOT NULL,
`addDate` datetime NOT NULL,
UNIQUE KEY `userID` (`userID`,`roleID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
</code>
Kemudian maksud saya untuk kedua tabel tersebut adalah ketika saya menghapus record yang ada pada tabel users, maka record yang berhubungan dengan tabel tersebut pada tabel user_roles akan ikut terhapus melalui field userID. Maka trigger yang saya masukkan adalah:
<code>
DELIMITER $$ //optional untuk versi mysql tertentu
CREATE TRIGGER `database`.`auto_delete_users`
BEGIN//optional untuk versi mysql tertentu
AFTER DELETE ON `database`.`users`
FOR EACH ROW DELETE FROM user_roles WHERE userID = OLD.userID
END;%//optional untuk versi mysql tertentu
</code>
Code di atas pada dasarnya code yang saya ambil dari sebuah website, masalah yang saya temui adalah terdapat error ketika menggunakan delimiter, begin, dan end. Ternyata ini yang menjadi masalah, karena code-code tersebut hanya berlaku untuk mysql versi terbaru, dan versi mysql yang saya miliki adalah yang lama, sehingga solusinya adalah code-code tersebut harus saya hilangkan, dan akhirnya berhasil. Semoga bermanfaat!
