MySQL Triggers Tutorial
If you’ve worked with any of the commerical databases other than MySQL, you may have already had some experience with triggers.
I’m glad that the MySQL developers finally managed to squeeze in this extremely important feature. I no longer dread trying to defend MySQL from the Microsoft and Oracle developers who have had triggers for so many years.
I’ll use the example off the MySQL website (explained below in detail). I’ll assume you know how to create a table. If not, please read up on that first.
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 ;
First, we need to change the end of line delimiter. We do this because the statements in the trigger need to end in a semicolon, this is explained further below. This is simple:
DELIMITER |
Next, we specify the action and table for this trigger. In this example, the table is “test1″, and the trigger will execute before any inserts.
CREATE TRIGGER testref BEFORE INSERT ON test1
We specify the following line to make sure if we’re doing a batch update it’ll apply the trigger to each row inserted.
FOR EACH ROW BEGIN
Now we can specify the actions that will occur as the trigger. We use the keywords NEW and OLD to reference the columns in the row. On an INSERT, there are no OLD columns.
INSERT INTO test2 SET a2 = NEW.a1;
DELETE FROM test3 WHERE a3 = NEW.a1;
UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
We’re done – end the trigger. To finish this single statement (because this entire trigger is really 1 statement, remember we changed our end of statement delimiter) we end it with the |
END;
|
We can now change back the end of line delimiter to a semi-colon.
DELIMITER ;
You will now have a trigger on the table ‘test1′ that occurs on every insert.
A few notes:
As of MySQL 5, triggers on DELETES will not run if you delete via cascading foreign keys.
On an INSERT, you can only use NEW for column values. On a DELETE, you must use OLD.
I will post another tutorial soon on the practical use of triggers in web development. I hope this helps someone.
Recent Comments
- pratibha on MySQL Triggers Tutorial
- pratibha on MySQL Triggers Tutorial
- MySQL Tutorials on MySQL Triggers Tutorial
- jon on The Lack of Flexibility of Stored Procedures in MySQL
- Nithya on The Lack of Flexibility of Stored Procedures in MySQL
- vietnam travel guide on MySQL Triggers Tutorial
- Phil Freo on Making Better Use of your .ackrc file
- PHP Examples on MySQL Triggers Tutorial
- jon on Drizzle Differences from MySQL
- Will on Drizzle Differences from MySQL
Recent Posts
- Vim: Use !make: to avoid auto jumping to files
- Weird Disutils Error When Running Python Scripts within MacVim
- Installing vim-ipython with MacVim
- Applescripting A Remote X-Windows Session for Virt-Manager
- Drizzle Differences from MySQL
- Great Article by the Varnish Architect
- Making Better Use of your .ackrc file
- Nginx pub/sub module
- Coffeescript, Bootstrap, and Less are amazing
- Splitmytab ready for the public!
Categories
- ack (1)
- amazon (1)
- answerbag (6)
- apache (9)
- apple (9)
- awk (2)
- bbedit (2)
- bootstrap (1)
- c++ (3)
- chrome (2)
- cluster (1)
- cocoa (1)
- coffeescript (2)
- collective intelligence (1)
- css (1)
- curl (3)
- db2 (1)
- demand media (1)
- drizzle (1)
- ebay (1)
- eclipse (4)
- erlang (13)
- facebook (1)
- fortran (1)
- gen_server (1)
- git (5)
- google (4)
- haddad (1)
- hdf5 (1)
- html (1)
- innodb (1)
- itunes (1)
- java (2)
- jester (2)
- kvm (2)
- launchbar (1)
- leex (1)
- less (1)
- letsgetnuts.com (1)
- libvirt (1)
- links (6)
- linux (28)
- lucene (1)
- mac (16)
- memcached (1)
- misconception (1)
- mobile (1)
- mono (1)
- mssql (1)
- munin (1)
- mysql (34)
- nginx (1)
- numpy (1)
- oracle (1)
- php (23)
- puppet (4)
- pyparsing (1)
- pytables (1)
- python (13)
- q&a (1)
- quicksilver (1)
- rant (6)
- readynas (1)
- redis (2)
- regex (1)
- replication (1)
- search (1)
- shitty code (1)
- solr (3)
- spaces (1)
- splitmytab (2)
- sshfs (1)
- stored procedure (1)
- svn (5)
- textmate (2)
- tips (25)
- tornado (1)
- trac (1)
- tutorial (4)
- ubuntu (3)
- Uncategorized (5)
- unix (1)
- vim (6)
- virtual box (6)
- vmware (1)
- weird (3)
- wikipedia (1)
- windows (1)
- xcode (1)








Woow, very nice post. PHP is a powerful tool for making dynamic and interactive Web pages. Thanks
.
Thank for useful guides.
[...] Triggers Tutorial [...]
Can anybody tell me how to enable disable trigger in mysql?
can u tell me how to enable disable trigger in mysql