Skip to content Skip to sidebar Skip to footer

SQL Server - Contoh Fungsi Trigger Untuk CRUD Database

SQL Server - Contoh Fungsi Trigger Untuk CRUD Database



Assalamu'alaikum wr.wb.
Pada kesempatan ini, saya akan membahas tentang trigger pada SQL Server. trigger ini adalah salah satu fitur dari SQL Server yang digunakan untuk memanipulasi data pada database tersebut. Dengan trigger pula kemudahan untuk menambah, mengubah, dan menghapus data dari database ketika satu tabel yang berhubungan kita tambahkan data.

Ketika kita menginput data dari satu tabel, lalu kita juga harus menginput data ke tabel lain, maka yang harus kita lakukan adalah melakukan dua kali insert, dimana insert pertama digunakan untuk menginput tabel pertama dan insert kedua digunakan untuk menginput tabel kedua. Masalahnya adalah bagaimana jika Salah satu dari proses insert tersebut error? yang kita tahu tentu jika insert pertama yang error, maka insert kedua pun error, namun jika insert kedua yang error, maka yang terinput hanya insert pertama.

Contohnya ketika kita membuat tabel mahasiswa dan status mahasiswa. Dimana tabel mahasiswa sendiri berfungsi untuk menyimpan data mahasiswa, sedangkan tabel status berfungsi untuk menyimpan status mahasiswa (aktif / tidak aktif). Ketika kita inputkan data mahasiswa, maka kita juga harus menginputkan data status tersebut, status aktif misal. Jika kita melakukan dua kali proses insert, maka jika proses insert mahasiswa yang error, tentu insert status juga error. Namun jika proses insert status yang error, maka yang terinput hanya proses insert mahasiswa. Hal itu tentu akan mengakibatkan penyimpanan data yang ambigu dimana status mahasiswa bernilai null bahkan tidak ada isinya.

Solusi untuk mengatasinya adalah dengan menggunakan trigger. Dengan trigger, kita dapat menginput data mahasiswa dan status secara bersamaan dengan hanya melakukan proses insert pada mahasiswa saja. Status akan terisi otomatis dengan menggunakan trigger. Jadi kita hanya memberikan proses insert status pada trigger saja pada tabel mahasiswa ketika melakukan CRUD.
Oke langsung saja. Saya akan memberikan tentang cara membuat trigger pada SQL Server. Simak tutorial dibawah ini :




Baca Juga

Pada tutorial ini, saya akan memberikan contoh trigger untuk menginput data dari tabel lain, namun sebenarnya cara ini juga bisa diganti dengan mengubah query saja. Jadi bagi anda yang ingin tahu tentang contoh trigger update dan delete menggunakan SQL Server. silahkan simak tutorial dibawah ini.


1. Membuat database

Langkah ini diperlukan untuk membuat database pada SQL Server. Hal ini dikarenakan tabel hanya bisa dibuat di dalam database. Jadi kita perlu untuk menambahkan database terlebih dahulu yang kemudian kita buat tabel didalamnya.

create DATABASE contoh

Program diatas adalah program yang berfungsi untuk membuat database dengan simpel. Perlu diketahui bahwa cara diatas adalah cara dimana kita membuat database dengan settingan default dari database SQL Server. Apabila anda ingin mengubah kapasitas penyimpanan maupun directory, silahkan kunjungi artikel saya tentang cara membuat database SQL Server. Pada artikel tersebut, saya memberikan tutorial tentang cara membuat database SQL Server dengan memberikan contoh program yang ada dan dijamin tidak error.

use contoh

Apabila kita sudah membuat database, saat ini yang perlu kita lakukan adalah mengetikkan source diatas, dengan begitu maka query yang kita buat ini akan terhubung dengan database yang baru saja kita buat.


2. Membuat Tabel Mahasiswa Dan Status Mahasiswa

Selanjutnya, kita buat dulu dua buah tabel yang mana dua tabel tersebut berelasi satu sama lain. Sebenarnya memang tidak harus berelasi, namun disini saya gunakan cara yang mudah saja agar anda lebih memahami tentang trigger, apabila anda ingin memahami tentang relasi database, silahkan kunjungi artikel saya yang membahas tentang pengenalan sql.

CREATE TABLE mahasiswa(
 id_mahasiswa int identity primary key NOT NULL,
 nama_mahasiswa varchar(50) NOT NULL,
 jkel char(1) NOT NULL,
 alamat varchar(100) NOT NULL,
 tgl_lahir date NOT NULL
)

Script diatas adalah script untuk membuat tabel mahasiswa dengan kolom - kolom yang sudah ditentukan. Disini kita buat lengkap saja agar terlihat lebih nyata.

create table status_mahasiswa(
id_mahasiswa int primary key foreign key references mahasiswa(id_mahasiswa) not null,
status_mhs varchar(12) not null,
tahun_masuk char(4) not null
)

Lalu kita buat juga tabel status_mahasiswa, kita hanya memerlukan tiga kolom tersebut saja. Disini kita membuat sebuah relasi dari tabel mahasiswa dan tabel status_mahasiswa dengan foreign key id_mahasiswa. Hal itu menandakan bahwa relasi kedua tabel tersebut adalah one to one dimana satu tabel berelasi dengan tabel lain dan relasi dari tabel tersebut merupakan primrary key di tabel satunya.


3. Membuta Trigger Untuk Menginput Data Status_mahasiswa Ketika Proses CRUD Mahasiswa dilakukan

Pada tahap ini, kita menggunakan trigger untuk menambahkan data status_mahasiswa secara otomatis tanpa perlu mengetiknya ataupun memanggilnya. Disinilah perbedaan function, stored procedur, dan trigger. Trigger ini tidak perlu dipanggil untuk melakukan CRUD. Trigger sudah otomatis terpanggil sendiri ketika proses crud yang dimaksud dilakukan.

create trigger updatestatus on mahasiswa
 
Program diatas adalah script untuk membuat trigger. Dengan script diatas, kita dapat membuat trigger pada sebuah tabel. Disini saya contohkan membuat trigger pada tabel mahasiswa. Kita lihat saja setelah script on tersebut merupakan nama tabel yang dimaksud.


for insert

Program diatas adalah perintah untuk menjalankan trigger pada saat tertentu. Disini saya membuat trigger yang dijalankan ketika proses insert dari tabel mahasiswa dilakukan. Bisa saja diganti update, ataupun delete. Atau mungkin untuk ketiganya sekaligus. Dengan syarat memberikan dampak yang sama pada tabel yang dimaksud.

as begin transaction

Script diatas sebagai pembuka dari program yang akan kita buat. Ketika kita membuat trigger, procedure, ataupun function, kita menggunakan script diatas untuk memulai dan membuka logika yang akan kita buat pada fungsi tersebut.

declare @id_mhs int

Deklarasi variabel yang kita butuhkan hanyalah satu saja dengan tipe data int. Hal ini akan saya jelaskan nanti. Intinya kita membutuhkan variabel tipe data integer pada trigger ini agar proses berjalan lancar.

select @id_mhs = id_mahasiswa from inserted

Disinilah deklarasi variabel tersebut digunakan. Kita menyimpan data id_mahasiswa dari inserted yang artinya data yang baru saja dimasukkan. Untuk update juga kita gunakan inserted.

insert into status_mahasiswa(id_mahasiswa, status_mhs,tahun_masuk) values
(@id_mhs,'Aktif',year(getdate()))

Setelah itu, kita buat proses insert status_mahasiswa didalam trigger tersebut. Kita lihat sebelumnya yang dibutuhkan adalah data id_mahasiswa dari data yang baru saja disimpan. Lalu kita inputkan ke status_mahasiswa sebagai id_mahasiswa. Tentu hal ini menunjukkan bahwa id_mahasiswa di tabel status_mahasiswa dan mahasiswa haruslah sama. Karena keduanya berelasi. Lalu untuk kolom yang lain seperti status_mhs dan tahun masuk kita buat default yang mana jika kita inputkan data mahasiswa maka secara otomatis status_mahasiswa akan aktif di tahun tersebut.

if @@error = 0
commit transaction
else
rollback transaction

Setelah selesai, kita buat juga script diatas, hal tersebut bertujuan agar ketika trigger selesai dijalankan, maka trigger akan berhenti. Kita lihat jika tidak error, maka commit transaction yang artinya semuanya telah berhenti dan data dimasukkan. Jika terjadi error, maka proses insert dari trigger tersebut akan dirollback atau dibuang dari tabel agar data yang disimpan tidak crash dengan data lain.


4. Menambah Data Pada Tabel Mahasiswa

Setelah kita selesai membuat trigger, lalu kita buatlah proses insert pada tabel mahasiswa. Trigger yang kita buat sebelumnya adalah trigger yang dijalankan ketika proses insert pada tabel mahasiswa dilakukan. Jadi kita harus membuat insert mahasiswa agar terlihat hasilnya apakah trigger tersebut berhasil atau tidak.

insert into mahasiswa(nama_mahasiswa, jkel, alamat, tgl_lahir) values
('Febri Nugraha Wicaksana','L','Bantul Yogyakarta','1995-02-14')

Proses insert yang kita lakukan adalah proses insert seperti biasa. Dimana proses tersebut memberikan data ke dalam tabel mahasiswa berdasarkan kolom - kolom yang akan kita inputkan. Hal ini adalah hal dasar tentang insert. Silahkan kunjungi artikel tentang CRUD Pada SQL Server.

select mahasiswa.id_mahasiswa, nama_mahasiswa, jkel, alamat, tgl_lahir, sm.status_mhs, sm.tahun_masuk from mahasiswa 
join status_mahasiswa sm on mahasiswa.id_mahasiswa = sm.id_mahasiswa

Selanjutnya, kita hanya perlu untuk menampilkan data saja.Tujuannya adalah untuk membuktikan apakah status_mahasiswa sudah tersimpan atau belum. Query diatas adalah query select join yang saya gunakan untuk menampilkan data mahasiswa yang digabung dengan status_mahasiswa. silahkan kunjungi artikel saya disini apabila belum memahami tentang select join.


Contoh trigger menambah data dari tabel lain

Gambar diatas adalah gambar dari hasil select join yang kita buat tadi. Kita bisa lihat pada gambar bahwa secara otomatis status_mahasiswa terisi aktif dan tahun_masuk adalah tahun 2018. Dengan begitu maka trigger berhasil.


5. Program Trigger Keseluruhan

Setelah kita memahami tentang fungsi masing - masing program pada trigger yang kita buat, Sekarang saatnya kita lihat hasil akhir atau program keseluruhan dari trigger tersebut. Disini saya membuatnya dengan sangat sederhana agar pembaca mampu memahami trigger dengan baik. Berikut ini adalah contoh program keseluruhan dari trigger yang kita bahas sebelumnya.

create DATABASE contoh

use contoh

--membuat tabel mahasiswa
CREATE TABLE mahasiswa(
 id_mahasiswa int identity primary key NOT NULL,
 nama_mahasiswa varchar(50) NOT NULL,
 jkel char(1) NOT NULL,
 alamat varchar(100) NOT NULL,
 tgl_lahir date NOT NULL
)

--Membuat tabel status_mahasiswa
create table status_mahasiswa(
id_mahasiswa int primary key foreign key references mahasiswa(id_mahasiswa) not null,
status_mhs varchar(12) not null,
tahun_masuk char(4) not null
)

--trigger untuk menambah data status_mahasiswa ketika proses insert mahasiswa dilakukan
create trigger updatestatus on mahasiswa
for insert
as begin transaction
declare @id_mhs int
select @id_mhs = id_mahasiswa from inserted

insert into status_mahasiswa(id_mahasiswa, status_mhs,tahun_masuk) values
(@id_mhs,'Aktif',year(getdate()))
if @@error = 0
commit transaction
else
rollback transaction


insert into mahasiswa(nama_mahasiswa, jkel, alamat, tgl_lahir) values
('Febri Nugraha Wicaksana','L','Bantul Yogyakarta','1995-02-14')

select mahasiswa.id_mahasiswa, nama_mahasiswa, jkel, alamat, tgl_lahir, sm.status_mhs, sm.tahun_masuk from mahasiswa 
join status_mahasiswa sm on mahasiswa.id_mahasiswa = sm.id_mahasiswa

Itulah hasil dari program yang sudah di pisah - pisah. Setelah dijadikan satu, maka begitulah hasilnya. Memang tidak hanya trigger saja. Program diatas adalah gabungan dari pembuatan database hingga menampilkan data mahasiswa. Jadi keseluruhan program diatas adalah semua yang dibahas sebelumnya.


Penutup

Demikianlah tutorial ini saya sampaikan. Apabila ada kekurangan saya mohon maaf, silahkan tinggalkan jejak di kolom komentar. Assalamu'alaikum wr.wb.


1 comment for "SQL Server - Contoh Fungsi Trigger Untuk CRUD Database"