bagaimana cara buat triger yang benar di MySql Command

mas/mbak mohon bantuan dan panduannya bagaimana cara buat trigger dimysql command versi 8.0 agar supaya ketika kita isi data di tabel pasok terutama jumlah maka di table barang qty nya bertambah,

contoh ditabel barang kode produk 123 qty ada 11 nah pas kita isi di table pasok produk 123 datanya jumlah 5 maka di table barang  harusnya bertambah qty jadi 16 karena tadi ada kita input di table pasok produk 123 jumlah 5. ini contoh table yang saya buat:

Tabel Barang

+-------------+--------------+------+-----+---------+-------+

| Field       | Type         | Null | Key | Default | Extra |

+-------------+--------------+------+-----+---------+-------+

| id_barang   | varchar(20)  | NO   | PRI | NULL    |       |

| nama_barang | varchar(60)  | NO   |     | NULL    |       |

| stock       | int          | NO   |     | NULL    |       |

| harga_pokok | double(10,2) | NO   |     | NULL    |       |

| harga_jual  | double(10,2) | NO   |     | NULL    |       |

+-------------+--------------+------+-----+---------+-------+

Tabel Pasok

+-----------+-------------+------+-----+---------+-------+

| Field     | Type        | Null | Key | Default | Extra |

+-----------+-------------+------+-----+---------+-------+

| id_pasok  | varchar(20) | NO   | PRI | NULL    |       |

| id_barang | varchar(20) | YES  | MUL | NULL    |       |

| jumlah    | int         | YES  |     | NULL    |       |

| tanggal   | date        | YES  |     | NULL    |       |

+-----------+-------------+------+-----+---------+-------+

ini contoh trigger yang saya buat tapi tidak berhasil;

mysql> delimiter //

mysql> create trigger auto_update_barang

    -> before update on pasok for each row

    -> begin

    -> update barang set stock=NEW.jumlah where id_barang=NEW.id_barang;

    -> end;

    -> //Query OK, 0 rows affected (0.19 sec)Query OK, 0 rows affected (0.62 sec)

Setelah trigger saya buat dan saya coba jalankan tapi hasilnya tidak berubah produk 123 di teble barang Qty masih tetap 11

mysql> insert into pasok values('007',123,5,'2020-09-04');

    -> //

Query OK, 1 row affected (0.21 sec)

tapi hasil nya tidak berubah:

catatan:

coba ubah -> before update on pasok for each row ditriggernya menjadi -> after update on pasok for each row tetap juga hasilnya tidak berubah

mysql> select * from barang;

    -> //

+-----------+----------------+-------+-------------+------------+

| id_barang | nama_barang    | stock | harga_pokok | harga_jual |

+-----------+----------------+-------+-------------+------------+

| 001       | Tas            |    19 |    70000.00 |  100000.00 |

| 002       | Sepatu         |    30 |    70000.00 |  100000.00 |

| 003       | Sandal         |   100 |    40000.00 |   70000.00 |

| 123       | Manisan Jambu  |    11 |    15000.00 |   20000.00 |

| 456       | Manisan Pepaya |   100 |    14000.00 |   19000.00 |

| 789       | shampo         |   100 |      500.00 |    1000.00 |

+-----------+----------------+-------+-------------+------------+

6 rows in set (0.00 sec)

terima kasih

Salam,

Suhandana

avatar suhandana
@suhandana

24 Kontribusi 1 Poin

Diperbarui 3 tahun yang lalu

2 Jawaban:

<div>Kenapa tidak jalan? Karena trigger itu ada 6 event, insert update delete (before after). Yang agan buat adalah trigger update sedangkan sql yg agan eksekusi adalah insert into, jadinya gak nyambung.<br><br>Kalo saya untuk stok biasanya pake view, jauh lebih mudah dan efisien. Memang kelihatan aneh, tapi trigger biasanya saya gunakan untuk hal2 yg sangat sederhana, seperti update status pembayaran, karena kalo untuk update stok agak susah, apalagi kalo ada stok opname segala.<br><br>Anggap saja agan udah berhasil bikin trigger insert, stok awal 5 jadi 10. Trus dikemudian hari salah &amp; harus dihapus. Berarti agan harus bikin trigger before delete. Ada lagi kejadian salah input, sehingga qty nya salah dan perlu diubah, agan harus bikin trigger before dan after update. Walaupun trigger kelihatannya lebih masuk akal, tapi tidak efisien.<br><br>Maaf kalau jawabannya bukan seperti yg diharapkan, tetapi disini saya memberikan solusi yang lebih baik.<br><br>Kunjungi juga&nbsp;<a href="https://warkop-it.000webhostapp.com">https://warkop-it.000webhostapp.com</a></div>

avatar ChronoJava
@ChronoJava

41 Kontribusi 23 Poin

Dipost 3 tahun yang lalu

Tanggapan

View punya kelemahan dibanding dengan trigger. Kalo trigger langsung update tabel barang, stok ambil dari tabel barang. Kalo view, stok ambil dari tabel pasok. Tabel pasok datanya jauh lebih banyak daripada tabel barang. Untuk data sampe ribuan perbedaan kecepatannya tidak terasa. Cuma kalo datanya jutaan, pasti kelihatan bedanya.

<div>Terima kasih mas masukannya sangat membantu</div>

avatar suhandana
@suhandana

24 Kontribusi 1 Poin

Dipost 3 tahun yang lalu

Tanggapan

Minta bantuannya gan, ini di post di https://warkop-it.000webhostapp.com/index.php/board,39.0.html . Lengkapi dengan script databsenya kalo bisa. Nanti saya bantu bikin scriptnya untuk yg metode view dan trigger.

Login untuk ikut Jawaban