1. Apa itu transaction?
Sebuah transaksi adalah sekelompok perintah yang harus dijalankan, hasilnya berhasil atau gagal untuk semua perintah tersebut
2. Apa pentingnya transaction?
Lihat contoh berikut : missal diperlukan perubahan stok setiap kali ada penjualan 1 item barang
Update Inventory
Set qty = qty – 1
Where item_id=2012
Insert Sales_detail (item_id, inv_id, datesold, qty)
Values(2012, 308, current_timestamp, 1)
BEGIN TRAN
Update Inventory
Set qty = qty – 1
Where item_id=2012
Insert Sales_detail (item_id, inv_id, datesold, qty)
Values(2012, 308, current_timestamp, 1)
COMMIT TRAN
LATIHAN 1:
--LIHAT DATA SEBELUM DIUPDATE
select * from FB
BEGIN TRAN
--LAKUKAN UPDATE
update FB
set tempo=200 where KODEPELANGGAN='S-00002'
update FB
set tempo=300 where KODEPELANGGAN='S-00003'
--LIHAT DATA SESUDAH DIUPDATE
select * from FB
--LAKUKAN ROLLBACK
ROLLBACK TRAN
--LIHAT DATA SESUDAH ROLLBACK
select * from FB
LATIHAN 2 :
--LIHAT DATA SEBELUM DIUPDATE
select * from FB
BEGIN TRAN
--LAKUKAN UPDATE
update FB
set tempo=200 where KODEPELANGGAN='S-00002'
update FB
set tempo=300 where KODEPELANGGAN='S-00003'
--LIHAT DATA SESUDAH DIUPDATE
select * from FB
--LAKUKAN COMMIT
COMMIT
--LIHAT DATA SESUDAH COMMIT
select * from FB
LATIHAN 3 :
select * from fb
BEGIN TRAN
insert into fb(NoFJ,KodePelanggan,tglFJ,totalfaktur)
VALUES ('FB-3','S-00002','2007-11-06 12:12:12','10000')
update Supplier
set Piutang = Piutang+10000 where KODEPELANGGAN ='S-00002'
select * from fb
select * from supplier
COMMIT
CREATE TABLE tbCustomer
(
IdCust varchar(10),
Customer varchar(30),
primary key (IdCust)
)
--lihat data sebelum di update
SELECT * FROM tbCustomer --data msh kosong
BEGIN TRAN
--lakukan insert
INSERT tbCustomer VALUES ('001','Nugraha')
INSERT tbCustomer VALUES ('002', 'Agung')
--lihat data sesudah diinsert
SELECT * FROM tbCustomer --data sudah terisi 2 data
ROLLBACK TRAN
--lihat data sesudah dirollback
SELECT * FROM tbCustomer -- data kmbl kosong
--lihat data sebelum diupdate
SELECT * FROM tbCustomer
BEGIN TRAN
--lakukan insert
INSERT tbCustomer VALUES ('001','Nugraha')
INSERT tbCustomer VALUES ('002', 'Agung')
--lihat data sesudah diinsert
SELECT * FROM tbCustomer --data sudah terisi 2 data
COMMIT TRAN --data tersimpan dan tak bs di rollback
--lihat data sesudah dirollback
SELECT * FROM tbCustomer --menampilkan data terkahir yg diinsert
--lihat data sebelum diupdate
SELECT * FROM tbCustomer
BEGIN TRAN
--lakukan insert
INSERT tbCustomer VALUES ('001','Nugraha') --gagal
INSERT tbCustomer VALUES ('002', 'Agung') --gagal
INSERT tbCustomer VALUES ('003', 'Michael') --data 1 dan 2 tidak dapat terinsert krn sebelumnya sudah diinsert, hny data 3 yg bs diinsert
IF @@ERROR != 0
BEGIN
PRINT 'ERROR, Insert data gagal'
ROLLBACK TRAN --kalau eror, data akan di rollback
END
ELSE
BEGIN
PRINT 'Berhasil'
COMMIT TRAN --kalau tdk tjd eror maka data akan di commit
END
GO
--lihat data sesudah di rollback
SELECT * FROM tbCustomer
CREATE TABLE tbCustomer1 (
IdCust varchar(10),
Customer varchar(30),
Piutang money default 0,
primary key (IdCust)
) --membuat table baru
CREATE TABLE tbJual(
NoJual varchar(10),
IdCust varchar(10),
Jumlah money,
primary key (NoJual)
) --membuat table baru
CREATE PROCEDURE spInsert --membuat proc insert
@NoJual varchar(10),
@IdCust varchar(10),
@Jumlah money
AS
DECLARE @piutang money
BEGIN TRAN
SELECT @piutang = piutang from dbo.tbCustomer1 WHERE IdCust = @IdCust
IF @piutang is null SET @piutang=0 --menegecek jika piutang null makan di set nilainy mjd 0
UPDATE dbo.tbCustomer1 SET Piutang=@piutang + @Jumlah WHERE IdCust=@IdCust --mengupdate isi dari nilai piutang
INSERT dbo.tbJual (NoJual, IdCust, Jumlah) VALUES (@NoJual, @IdCust, @Jumlah) --menginsert data ke dalam table jual
IF @@ERROR != 0
ROLLBACK TRAN --jika eror maka data akan di rollback
ELSE
COMMIT TRAN --jika tdk eror maka data akan dicommit
INSERT dbo.tbCustomer1(IdCust,Customer,Piutang) VALUES ('C001','Antoni',0)
SELECT * FROM dbo.tbCustomer1
exec dbo.spInsert 'J001', 'C001',1000
SELECT * FROM dbo.tbCustomer1
SELECT * FROM dbo.tbCustomer1
exec dbo.spInsert 'J002', 'C001',1000
SELECT * FROM dbo.tbCustomer1
create table tbNilai (
nim varchar(7),
kodemk varchar(7),
nilai char(1),
primary key (nim,kodemk)
) --membuat table baru
create trigger trTbNilai_Insert on tbNilai
for insert, update
as
declare @nilai char(1)
select @nilai=nilai from inserted
if @nilai not in ('A','B','C','D','E')
begin
raiserror ('nilai harus A-E', 1,1)
ROLLBACK TRANSACTION --jika nilai tdk sesuai persyaratan maka data akan dirollback
end
insert dbo.tbNilai values ('001','IF002','A')
select * from dbo.tbNilai
insert dbo.tbNilai values ('002','IF002','B')
select * from dbo.tbNilai
insert dbo.tbNilai values ('003','IF002','F')
select * from dbo.tbNilai