最新消息: 新版网站上线了!!!

mysql trigger的使用例子

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\Users\Nur Hidayat>d:

D:\>cd xampp\mysql\bin

D:\xampp\mysql\bin>mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.5.16 MySQL Community Server (GPL)

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use test;
Database changed

mysql> -----------------------------
mysql> -- buat table header
mysql> -----------------------------
mysql> create table header (
    ->   id int auto_increment primary key,
    ->   amount int default 0
    -> ) ;
Query OK, 0 rows affected (0.04 sec)

mysql> -----------------------------
mysql> -- buat table detail
mysql> -----------------------------
mysql> create table detail (
    ->   id int auto_increment primary key,
    ->   header_id int not null,
    ->   quantity int default 0,
    ->   unit_price int default 0,
    ->   foreign key (header_id) references header (id)
    -> ) ;
Query OK, 0 rows affected (0.03 sec)

mysql> -----------------------------
mysql> -- insert sampel data ke header
mysql> -- kemudian tampilkan
mysql> -----------------------------
mysql> insert into header(amount)
    -> values (0), (0), (0) ;
Query OK, 3 rows affected (0.02 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from header ;
+----+--------+
| id | amount |
+----+--------+
|  1 |      0 |
|  2 |      0 |
|  3 |      0 |
+----+--------+
3 rows in set (0.00 sec)

mysql> -----------------------------
mysql> -- buat insert trigger untu tabel detail
mysql> -- amount di table header dihitung
mysql> -- berdasarkan perkalian quantity*unit_price
mysql> -----------------------------
mysql> delimiter |
mysql> create trigger trg_detail_insert
    -> after insert on detail
    -> for each row
    -> begin
    ->   update header
    ->   set amount = (
    ->     select sum(quantity*unit_price)
    ->     from detail where header_id = new.header_id )
    ->   where id = new.header_id ;
    -> end;
    -> |
Query OK, 0 rows affected (0.01 sec)

mysql> delimiter ;

mysql> -----------------------------
mysql> -- insert sampel data ke detail
mysql> -- kemudian tampilkan
mysql> -----------------------------
mysql> insert into detail (header_id, quantity, unit_price)
    -> values (1, 10, 100), (1, 2, 300),
    ->        (2, 1, 500), (2, 5, 300) ;
Query OK, 4 rows affected (0.04 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> select * from detail;
+----+-----------+----------+------------+
| id | header_id | quantity | unit_price |
+----+-----------+----------+------------+
|  3 |         1 |       10 |        100 |
|  4 |         1 |        2 |        300 |
|  5 |         2 |        1 |        500 |
|  6 |         2 |        5 |        300 |
+----+-----------+----------+------------+
4 rows in set (0.00 sec)

mysql> -----------------------------
mysql> -- coba tampilkan isi table header
mysql> -- seharusnya amount sudah berubah
mysql> -----------------------------
mysql> select * from header;
+----+--------+
| id | amount |
+----+--------+
|  1 |   1600 |
|  2 |   2000 |
|  3 |      0 |
+----+--------+
3 rows in set (0.00 sec)

mysql> -----------------------------
mysql> -- YESS....... !!!
mysql> -- it works
mysql> -----------------------------
mysql>
.....

转载请注明:谷谷点程序 » mysql trigger的使用例子