Anda di halaman 1dari 19

LAPORAN teknologi basis data

PERTEMUAN KE 3 dan 4



Disusun Oleh :
Nama : Mohamad Hanafi
Nim : 095410134
Jurusan : TEKNIK INFORMATIKA

LABOROTARIUM TERPADU
SEKOLAH TINGGI MANAJEMEN INFORMATIKA DAN KOMPUTER
AKAKOM
YOGYAKARTA
2011


PERTEMUAN KE-3
MANAJEMEN USER

A. PEMBAHASAN
Setiap obyek basis data (database object) selalu mempunyai user. User pada basis data tidak
sama dengan user sistem operasi sehingga meskipun anda mempunyai user sistem operasi,
anda tidak otomatis mempunyai hak akses terhadap basis data di MySQL. User ini bisa
dibuat oleh user lain yang mempunyai kewenangan (secara software). Pada saat membuat
user, bisa sekaligus ditentukan apakah user yang akan dibuat terebut mempunyai
kewenangan untuk membuat user lain serta berbagai kewenangan lain (misalnya membuat
basis data).
Pelaksanaan praktikum :
mysql> create database kepegawaian;
Query OK, 1 row affected (0.02 sec)
mysql> use kepegawaian;
Database changed
Perintah membuat akun baru dari MySQL dengan perintah create user. Untuk menggunakannya, anda
harus mempunyai privilege (hak) create user global atau hak insert pada basis data mysql tersebut.
Setiap akun baru yang dibuat akan disimpan kedalam tabel mysql. User yang belum diberikan hak.
Untuk use yaitu digunakan untuk penggunaan databases yang telah dibuat
mysql> create table pegawai(
-> nip int(12)primary key,
-> nama char(12),
-> alamat char(15),
-> kota char(14));
Query OK, 0 rows affected (0.06 sec)
mysql> create table jabatan(
-> nip int(10)primary key,
-> nama char(12),
-> jabatan char(13),
-> alamat char(12));
Query OK, 0 rows affected (0.05 sec)
mysql> create table golongan(
-> nim int(12)primary key,
-> golongan varchar(13),
-> nama varchar(12));
Query OK, 0 rows affected (0.03 sec)
Script diatas adalah untuk membuat tabel pegawai, jabatan dan golongan yang ada di databases
kepegawaian dimana dalam tabel tersebut apabila ditampilkan maka tabel tersebut tidak ada isinya
maka untuk mengsikan tabel tersebut menggunakan perintah insert untuk setiap tabel yang telah
dibuat.

mysql> insert into pegawai value(0987,'yunus','janti','yogyakarta');
Query OK, 1 row affected (0.02 sec)
mysql> insert into jabatan value(0987,'dadang','direktur','bantul');
Query OK, 1 row affected (0.00 sec)
mysql> insert into golongan value(0987,'direktur','dani');
Query OK, 1 row affected (0.00 sec)
Mengisikan tabel dari ketiga tabel tersebut menggunakan perintah insert untuk isi disesuaikan pada
tipenya kenapa dalam pengisian ada yang dikasih tanda petik diatas karena dalam tipenya biasanya
char dan varchar sehingga untuk memsukkan nilai dalam tabelnya menggunakan tanda petik lalu yang
tidak dikasih tanda petik itu bertipa integer, jangan lupa dikasih tanda ;(titik koma) karena dalam
mysql setiap titik koma dianggap akhir dari statemen.
Hasilnya adalah sebagaiberikut :
mysql> select * from pegawai;
+-----+-------+--------+------------+
| nip | nama | alamat | kota |
+-----+-------+--------+------------+
| 987 | yunus | janti | yogyakarta |
+-----+-------+--------+------------+
1 row in set (0.00 sec)

mysql> select * from jabatan;
+-----+--------+----------+--------+
| nip | nama | jabatan | alamat |
+-----+--------+----------+--------+
| 987 | dadang | direktur | bantul |
+-----+--------+----------+--------+
1 row in set (0.00 sec)

mysql> select * from golongan;
+-----+----------+------+
| nim | golongan | nama |
+-----+----------+------+
| 987 | direktur | dani |
+-----+----------+------+
1 row in set (0.00 sec)



Membuat user baru dengan nama hanafi
mysql> use mysql;
Database changed
mysql> select host, user, password from user;
+-----------+--------+-------------------------------------------+
| host | user | password |
+-----------+--------+-------------------------------------------+
| localhost | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| % | hanafi | |
+-----------+--------+-------------------------------------------+

Sebelum memangil isi password dari user kita gunakan dulu databases MySQL kerena password ang
telah dideklarasikan tadi disimpan dalam databases MySQL , setelah menggunakan databases MySQL
maka dipanggilah untuk memeriksa apakah user yang bernama hanafi tersebut sudah masuk atau
belum .
mysql> use kepegawaian;
Database changed
2 rows in set (0.02 sec)

mysql> grant all on kepegawaian.* to 'hanafi'@'%';
Query OK, 0 rows affected (0.02 sec)
Script ini untuk memberikan hak akses pada nama user tersebut untuk mengakses basisdata
kepegawaian dalam hal ini kita tidak bisa langsung mendeklarasikan untuk mengakses pada nama
user tapi kita harus pergunakan dahulu databases kepegawaian karena dalam deklarasi sebelumnya
kita telah menggunakn databases MySQL maka dari itu kita panggil lagi databases kepegawian.
mysql> describe pegawai;
mysql> create user hanafi;
Query OK, 0 rows affected (0.02 sec)
+--------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+----------+------+-----+---------+-------+
| nip | int(12) | NO | PRI | | |
| nama | char(12) | YES | | NULL | |
| alamat | char(15) | YES | | NULL | |
| kota | char(14) | YES | | NULL | |
+--------+----------+------+-----+---------+-------+
4 rows in set (0.01 sec)

mysql> grant select (nip), INSERT (nip,nama) on
kepegawaian.pegawai to hanafi;
Query OK, 0 rows affected (0.02 sec)
Dalam hal ini memerintahkan hak akses terbatas pada tabel pegawai pada user tersebut
dengan atribut NIP dan NAMA sebelum mendeklarasikan atau memebuat databases hak
akses lebih baiknya kita lihat tipe data masing-masing untuk mudah didekrasikannya.
mysql> drop user hanafi;
Query OK, 0 rows affected (0.03 sec)
mysql> select host, user, password from user;
+-----------+------+-------------------------------------------+
| host | user | password |
+-----------+------+-------------------------------------------+
| localhost | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
+-----------+------+-------------------------------------------+
1 row in set (0.00 sec)
Terakhir memerintahkan untuk menghapus hak akses yang telah diberikan sebagaimana
user dalam pembuatan hak akses baru tidak terlalu banyak untuk pasword dan nama
usernya.

B. TUGAS
a. mysql> create user namaku;
Query OK, 0 rows affected (0.02 sec)

mysql> use mysql;
Database changed
mysql> select host, user, password from user;
+-----------+--------+------------------+
| host | user | password |
+-----------+--------+------------------+
| localhost | root | 67457e226a1a15bd |
| % | hanafi | |
| % | namaku | |
+-----------+--------+------------------+
b. mysql> use akademik;
Database changed
mysql> grant all on akademik.* to 'namaku'@'%';
Query OK, 0 rows affected (0.01 sec)
c. mysql> use mysql;
Database changed
mysql> select host, user, password from user;
+-----------+--------+------------------+
| host | user | password |
+-----------+--------+------------------+
| localhost | root | 67457e226a1a15bd |
| % | hanafi | |
| % | namaku | |
+-----------+--------+------------------+
3 rows in set (0.00 sec)
d. mysql> use akademik;
Database changed
mysql> revoke all on akademik.* from 'namaku'@'%';
Query OK, 0 rows affected (0.28 sec)
e. mysql> create user pintar;
Query OK, 0 rows affected (0.00 sec)

mysql> use mysql;
Database changed
mysql> select host, user, password from user;
+-----------+--------+------------------+
| host | user | password |
+-----------+--------+------------------+
| localhost | root | 67457e226a1a15bd |
| % | hanafi | |
| % | namaku | |
| % | pintar | |
+-----------+--------+------------------+
4 rows in set (0.00 sec)
f. mysql> use akademik;
Database changed
mysql> grant all on akademik.* to 'pintar'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> describe mk;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| kdmk | varchar(4) | NO | PRI | | |
| namamk | varchar(10) | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
2 rows in set (0.09 sec)

mysql> select * from mk;
+------+--------+
| kdmk | namamk |
+------+--------+
| M1 | TBA |
| M2 | SBD |
| M3 | SO |
| M4 | PBO |
+------+--------+
4 rows in set (0.00 sec)

C. LISTING
1. Membuat basis data dengan nama kepegawaian;
mysql> create database kepegawaian;
Query OK, 1 row affected (0.02 sec)
mysql> use kepegawaian;
Database changed

2. Membuat tabel pegawai:
mysql> create table pegawai(
-> nip int(12)primary key,
-> nama char(12),
-> alamat char(15),
-> kota char(14));
Query OK, 0 rows affected (0.06 sec)

mysql> insert into pegawai value(0987,'yunus','janti','yogyakarta');
Query OK, 1 row affected (0.02 sec)

mysql> insert into pegawai value(0977,'siti','jogorogo','ngawi');
Query OK, 1 row affected (0.00 sec)

mysql> insert into pegawai
value(0967,'saiful','sumberrejo','lamongan');
Query OK, 1 row affected (0.00 sec)

mysql> insert into pegawai
value(0957,'heni','banyuwangi','bojonegoro');
Query OK, 1 row affected (0.00 sec)
3. Membuat tabel jabatan:
mysql> create table jabatan(
-> nip int(10)primary key,
-> nama char(12),
-> jabatan char(13),
-> alamat char(12));
Query OK, 0 rows affected (0.05 sec)

mysql> insert into jabatan value(0987,'dadang','direktur','bantul');
Query OK, 1 row affected (0.00 sec)

mysql> insert into jabatan
value(0977,'maesaroh','sekretaris','sleman');
Query OK, 1 row affected (0.00 sec)

mysql> insert into jabatan value(0967,'irawan','bendahara','sragen');
Query OK, 1 row affected (0.00 sec)

mysql> insert into jabatan
value(0957,'yuliati','oficebuoy','klaten');
Query OK, 1 row affected (0.00 sec)
4. Membuat tabel golongan :
mysql> create table golongan(
-> nim int(12)primary key,
-> golongan varchar(13),
-> nama varchar(12));
Query OK, 0 rows affected (0.03 sec)

mysql> insert into golongan value(0987,'direktur','dani');
5. menampilkan dari 3 tabel tersebut :
Query OK, 1 row affected (0.00 sec)
mysql> select * from pegawai;
+-----+--------+------------+------------+
| nip | nama | alamat | kota |
+-----+--------+------------+------------+
| 987 | yunus | janti | yogyakarta |
| 977 | siti | jogorogo | ngawi |
| 967 | saiful | sumberrejo | lamongan |
| 957 | heni | banyuwangi | bojonegoro |
+-----+--------+------------+------------+
4 rows in set (0.03 sec)

mysql> select * from jabatan;
+-----+----------+------------+--------+
| nip | nama | jabatan | alamat |
+-----+----------+------------+--------+
| 987 | dadang | direktur | bantul |
| 977 | maesaroh | sekretaris | sleman |
| 967 | irawan | bendahara | sragen |
| 957 | yuliati | oficebuoy | klaten |
+-----+----------+------------+--------+
4 rows in set (0.00 sec)

mysql> select * from golongan;
+-----+----------+------+
| nim | golongan | nama |
+-----+----------+------+
| 987 | direktur | dani |
+-----+----------+------+
1 row in set (0.00 sec)
6. Membuat user baru :
mysql> create user hanafi;
Query OK, 0 rows affected (0.02 sec)

mysql> use mysql;
Database changed
mysql> select host, user, password from user;
+-----------+--------+-------------------------------------------+
| host | user | password |
+-----------+--------+-------------------------------------------+
| localhost | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| % | hanafi | |
+-----------+--------+-------------------------------------------+
7. Mengakses basis data kepegawaian :
mysql> use kepegawaian;
Database changed

2 rows in set (0.02 sec)
mysql> grant all on kepegawaian.* to 'hanafi'@'%';
Query OK, 0 rows affected (0.02 sec)
8. memberikan hak akses terbatas pada tabel pegawai dengan atribut NIP dan NAMA :
mysql> describe pegawai;
+--------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+----------+------+-----+---------+-------+
| nip | int(12) | NO | PRI | | |
| nama | char(12) | YES | | NULL | |
| alamat | char(15) | YES | | NULL | |
| kota | char(14) | YES | | NULL | |
+--------+----------+------+-----+---------+-------+
4 rows in set (0.01 sec)

mysql> grant select (nip), INSERT (nip,nama) on kepegawaian.pegawai
to hanafi;
Query OK, 0 rows affected (0.02 sec)
9. menghapus hak akses :
mysql> drop user hanafi;
Query OK, 0 rows affected (0.03 sec)
mysql> select host, user, password from user;
+-----------+------+-------------------------------------------+
| host | user | password |
+-----------+------+-------------------------------------------+
| localhost | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
+-----------+------+-------------------------------------------+
1 row in set (0.00 sec)
mysql> show tables;
+-----------------------+
| Tables_in_kepegawaian |
+-----------------------+
| golongan |
| jabatan |
| pegawai |
+-----------------------+
3 rows in set (0.02 sec)

PERTEMUAN KE- 4
MANAJEMEN TRANSAKSI


A. PEMBAHASAN

Transaksi Basis Data
Transaksi dalam basis data merupakan kegiatan yang melibatkan satu atau lebih table
yang bekerja secara simultan untuk melakukan suatu operasi yang akan dinyatakan
dengan pernyataan sukses (commit) atau gagal (rollback) dikenal dengan istilah all or
nothing.

Properti Transaksi Basis Data
Dalam transaksi basis data, terdapat property-properti yang menjamin bahwa transaksi
dilaksanakan dengan baik. Properti-properti ini dikenal sebagai ACID(Atomicity,
Consistency, Isolation, Durability). Properti ACID untuk memastikan perilaku yang dapat
diprediksi dan menguatkan peran transaksi sebagai konsep all or nothing, yang
dirancang untuk mengurangi manajemen load ketika banyak variabel.

Pelaksanaan Praktikum:
mysql> show variables like 'have_innodb';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_innodb | YES |
+---------------+-------+
1 row in set (0.00 sec)
Dalam pemanggilan innodb ini kita tidak sembarangan untuk semua MySQL bisa digunakan untuk
menggunakan Innodb sebelum menginstal MySQL apabla anda akan menginstalnya maka pada
pengisian pasworrd ada kotak yang harus dicentang pada kotak Innodb, setelah dicetak maka
pemanggilan Innodb akan bisa dideklarasikan dalam MySQL berarti dukungan transaksi basis
data telah aktif, idealnya Innodb akan menjadi engine default di MySQL.
Apabila dalam MySQL pada tabel Valuenya menunjukkan DISABLED maka penggunaan innodb
tidak bisa digunakan alias MySQLnya harus diinstal ulang.


mysql> create database transaksi;
Query OK, 1 row affected (0.05 sec)

mysql> use transaksi;
Database changed
setelah memanggil Innodb maka untuk memebuat tabel yang kita lakukan adalah membauat
database terlebih dahulu untuk pendeklarasiannya dalam tabel dan yang lainnya.

mysql> use transaksi;
Database changed
mysql> create table coba_transak(
-> pelatihan varchar(10) not null,
-> instruktur char(15) not null,
-> primary key(pelatihan)) engine=innodb;
Query OK, 0 rows affected (0.03 sec)
Pada deklarasi ini adalah pembuatan tabel dan tipe data sesuai dengan tabel yang dibuat pada
pembuatan tabel disini pada akhir statemen akan diberi engine=Innodb karena pada tabel
coba_transak akan dibuat transaksi.
mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into coba_transak values ('MySQL','Totok');
Query OK, 1 row affected (0.05 sec)
mysql> insert into coba_transak values ('Oracle','Enny');
Query OK, 1 row affected (0.00 sec)
mysql> select * from coba_transak;
+-----------+------------+
| pelatihan | instruktur |
+-----------+------------+
| MySQL | Totok |
| Oracle | Enny |
+-----------+------------+
2 rows in set (0.00 sec)
Untuk melakukan transaksi secara manual dibiasakan untuk memulai start, pada statemen diatas
adalah memulai transaksi, pengisian tabel dan yang terkahir menampilkan isi dari tabel pada hal
ini kita akan melakukan transaksi dan setelah melakukan mengisi tabel pada MySQL ini akan
dikeluarkan secara manual apakah isi dari tabel coba_transaksi akan hilang atau tidak...??
Setelah dilakukan pengeluaran pada MySQL dan masuk lagi ke database Transaksi untuk melihat
tabel coba_transak seperti pada hasil berikut ini :
mysql> use transaksi;
Database changed
mysql> select * from coba_transak;
Empty set (0.00 sec)
Kenapa dalam tabel coba_transak hilang datanya seharusnya data tersebut masih ada sebelum
dilakukan penghapusan secara manual, dalam kasus ini kita kan menggunakan transaksi pada
transaksi kita harus menggunakan perintah COMMIT pada akhir transaksi agar transaksi tersebut
dapat menyimpan datanya tidak pada MySQL biasanya.

mysql> commit;
Query OK, 0 rows affected (0.00 sec)

mysql> use transaksi;
Database changed
mysql> select * from coba_transak;
+-----------+------------+
| pelatihan | instruktur |
+-----------+------------+
| MySQL | Totok |
| Oracle | Enny |
+-----------+------------+
2 rows in set (0.00 sec)
Setelah melakukan perintah COMMIT apabila MySQL dikeluarkan pada isi tabel coba_transak
data tersebut tidaklah hilang karena perintah COMMIT sendiri melakukan penyimpanan ini
dilakukan untuk menjaga apabila seorang user melakukan transaksi uang dibank mengalami
kendala listrik padam maka mesin ATM(transaksi) akan mendefault sendiri untuk menyimpan
data yang sedang ditransaksi atau membatalkan transaksi seorang user untuk dipergunakan user
tidak merasa dirugikan oleh pihak bank itu sendiri.

mysql> select @@autocommit;
+--------------+
| @@autocommit |
+--------------+
| 1 |
+--------------+
1 row in set (0.00 sec)

mysql> set @@autocommit=0;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into coba_transak value('sybase','Hartono');
Query OK, 1 row affected (0.00 sec)

mysql> select * from coba_transak;
+-----------+------------+
| pelatihan | instruktur |
+-----------+------------+
| MySQL | Totok |
| Oracle | Enny |
| sybase | Hartono |
+-----------+------------+
3 rows in set (0.00 sec)
Untuk selanjutnya yaitu menggunakan perintah autocommit untuk autocommit yang nilainya 1
berarti mode transaksi dalam keadaan of untuk mengaktifkan yaitu dengan cara merubah
menjadi 0 maka transaksi bisa dijalankan untuk membuktikan yaitu pada tabel coba_transak
dimasukkan 1 baris lagi, setelah itu MySQL akan dikeluarkan secara manual oleh user maka akan
tampil seperti berikut :
mysql> use transaksi;
Database changed
mysql> select * from coba_transak;
+-----------+------------+
| pelatihan | instruktur |
+-----------+------------+
| MySQL | Totok |
| Oracle | Enny |
+-----------+------------+
2 rows in set (0.00 sec)
Selama mode autocommit belum dikembalikan ke-1, maka mode transaksi basis data akan tetap
aktif. Jadi tidak lagi diperlukan pemanggilan START TRANSACTION , nilai default commit adalah 1,
yang menyatakan bahwa transaksi basis data tidak aktif. Dengan kata lain perintah akan langsung
diterapkan secara permanen.

mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from coba_transak;
+-----------+------------+
| pelatihan | instruktur |
+-----------+------------+
| MySQL | Totok |
| Oracle | Enny |
+-----------+------------+
2 rows in set (0.00 sec)

mysql> insert into coba_transak value('sybase','Emmy');
Query OK, 1 row affected (0.00 sec)

mysql> select * from coba_transak;
+-----------+------------+
| pelatihan | instruktur |
+-----------+------------+
| MySQL | Totok |
| Oracle | Enny |
| sybase | Emmy |
+-----------+------------+
3 rows in set (0.00 sec)
Pada statemen ini menggunakan ROLLBACK, pernyataan rollback digunakan untuk mengugurkan
rangkaian perintah, yang tergantung pada kondisi transaksinya. ROLLBACK akan dilakukan bila
ada satu atau lebih perintah gagal dilaksanakan disamping itu rollback juga bisa dilaksanakan
secara eksplisit dengan memanggil pernyataan ROLLBACK. Setelah menggunakan perintah
rollback maka data yang asli sebelum dimasukkan data yang baru akan kembali seperti semula
seperti pada tampilan berikut ini :
mysql> rollback;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from coba_transak;
+-----------+------------+
| pelatihan | instruktur |
+-----------+------------+
| MySQL | Totok |
| Oracle | Enny |
+-----------+------------+
2 rows in set (0.00 sec)
Pemanggilan start transaction pada akhir transaksi yang tidak ditutup, misalnya menggunakan
commit, akan mengakibat-kan dipanggilnya commitsecara implisit, sehingga kita tidak bisa
memaksa pembatalan menggunakan perintah rollback



B. TUGAS
mysql> show variables like 'have_innodb';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_innodb | YES |
+---------------+-------+
1 row in set (0.00 sec)
Pada saat pertama mengimplemantasikan MySQL kita memanggil innerdb

mysql> create database bank;
Query OK, 1 row affected (0.05 sec)

mysql> use bank;
Database changed

mysql> create table nasabah(
-> kd_nasabah int(10) primary key,
-> nama char(10) not null,
-> alamat char(10)) engine=innodb;
Query OK, 0 rows affected (0.05 sec)

mysql> create table saldo(
-> kd_saldo int(10) primary key,
-> saldo int(10) not null,
-> nama char(12)) engine=innodb;
Query OK, 0 rows affected (0.01 sec)

mysql> create table transaksi(
-> kd_transaksi int(12) primary key,
-> instruktur char(10) not null,
-> nama_barang char(13)) engine=innodb;
Query OK, 0 rows affected (0.30 sec)
Setelah mengimplementasikan kita membuat databeses dan membuat tabel dan
atributnya.

Perintah dibawah tanpa menggunakan COMMIT.
mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)
Deklarasi diatas yaitu untuk menagaktifkan pada transaksi basis data.

mysql> insert into nasabah
value(123,'siti','semarang'),(124,'wahyu','jogjakarta
');
Query OK, 2 rows affected (0.03 sec)
Records: 2 Duplicates: 0 Warnings: 0

mysql> insert into saldo
value(123,1500000,'hanafi'),(124,1400000,'paemin');
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0

mysql> insert into transaksi
value(123,'paejo','komputer'),(124,'sukimin','renta
l_vcd');
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0

mysql> select * from nasabah;
+------------+-------+------------+
| kd_nasabah | nama | alamat |
+------------+-------+------------+
| 123 | siti | semarang |
| 124 | wahyu | jogjakarta |
+------------+-------+------------+
2 rows in set (0.02 sec)

mysql> select * from saldo;
+----------+---------+--------+
| kd_saldo | saldo | nama |
+----------+---------+--------+
| 123 | 1500000 | hanafi |
| 124 | 1400000 | paemin |
+----------+---------+--------+
2 rows in set (0.00 sec)

mysql> select * from transaksi;
+--------------+------------+-------------+
| kd_transaksi | instruktur | nama_barang |
+--------------+------------+-------------+
| 123 | paejo | komputer |
| 124 | sukimin | rental_vcd |
+--------------+------------+-------------+
2 rows in set (0.00 sec)

mysql> use bank;
Database changed
mysql> select * from nasabah;
Empty set (0.00 sec)

mysql> select * from saldo;
Empty set (0.00 sec)

mysql> select * from transaksi;
Empty set (0.00 sec)
Kenapa pada waktu kita keluar di MySQL lalu kita masuk lagi tiba-tiba data yang ada
pada tabel hilang soalnya MySQL disini menggunakan transaksi dan transaksi sendiri
apabila akan menyimpan data pada MySQL ada perintahnya tersendiri beda pada
MySQL yang melakukan transaksi atau menggunakan transaksi perintahnya yaitu
COMMIT.

Kalau yang dibawah ini menggunakan perintah COMMIT.
mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into nasabah
value(123,'siti','semarang'),(124,'wahyu','jogjakarta
');
Query OK, 2 rows affected (0.03 sec)
Records: 2 Duplicates: 0 Warnings: 0

mysql> insert into saldo
value(123,1500000,'hanafi'),(124,1400000,'paemin');
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0

mysql> insert into transaksi
value(123,'paejo','komputer'),(124,'sukimin','renta
l_vcd');
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0

mysql> select * from nasabah;
+------------+-------+------------+
| kd_nasabah | nama | alamat |
+------------+-------+------------+
| 123 | siti | semarang |
| 124 | wahyu | jogjakarta |
+------------+-------+------------+
2 rows in set (0.02 sec)

mysql> select * from saldo;
+----------+---------+--------+
| kd_saldo | saldo | nama |
+----------+---------+--------+
| 123 | 1500000 | hanafi |
| 124 | 1400000 | paemin |
+----------+---------+--------+
2 rows in set (0.00 sec)

mysql> select * from transaksi;
+--------------+------------+-------------+
| kd_transaksi | instruktur | nama_barang |
+--------------+------------+-------------+
| 123 | paejo | komputer |
| 124 | sukimin | rental_vcd |
+--------------+------------+-------------+
2 rows in set (0.00 sec)

mysql> commit;
Query OK, 0 rows affected (0.00 sec)

mysql> use bank;
Database changed
mysql> select * from nasabah;
+------------+-------+------------+
| kd_nasabah | nama | alamat |
+------------+-------+------------+
| 123 | siti | semarang |
| 124 | wahyu | jogjakarta |
+------------+-------+------------+
2 rows in set (0.02 sec)

mysql> select * from saldo;
+----------+---------+--------+
| kd_saldo | saldo | nama |
+----------+---------+--------+
| 123 | 1500000 | hanafi |
| 124 | 1400000 | paemin |
+----------+---------+--------+
2 rows in set (0.00 sec)

mysql> select * from transaksi;
+--------------+------------+-------------+
| kd_transaksi | instruktur | nama_barang |
+--------------+------------+-------------+
| 123 | paejo | komputer |
| 124 | sukimin | rental_vcd |
+--------------+------------+-------------+
2 rows in set (0.00 sec)
Setelah kita menggunakan COMMIT terbukti bahwa data yang ada di MySQL belum
hilang atau tidak disimpan MySQL setelah keluar lalu masuk lagi ke databasesnya.
Kerena COMMIT berfungsi untuk menyimpan data pada MySQL.

Menggunakan perintah Mode Autocommit .
mysql> select @@autocommit;
+--------------+
| @@autocommit |
+--------------+
| 1 |
+--------------+
1 row in set (0.00 sec)

mysql> set @@autocommit=0;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into nasabah value(125,'maemunah','ngawi');
Query OK, 1 row affected (0.00 sec)

mysql> insert into saldo value(125,12000000,'karyo');
Query OK, 1 row affected (0.00 sec)

mysql> insert into transaksi value(125,'nanang','tembakau');
Query OK, 1 row affected (0.00 sec)

mysql> select * from nasabah;
+------------+----------+------------+
| kd_nasabah | nama | alamat |
+------------+----------+------------+
| 123 | siti | semarang |
| 124 | wahyu | jogjakarta |
| 125 | maemunah | ngawi |
+------------+----------+------------+
3 rows in set (0.00 sec)

mysql> select * from saldo;
+----------+----------+--------+
| kd_saldo | saldo | nama |
+----------+----------+--------+
| 123 | 1500000 | hanafi |
| 124 | 1400000 | paemin |
| 125 | 12000000 | karyo |
+----------+----------+--------+
3 rows in set (0.00 sec)

mysql> select * from transaksi;
+--------------+------------+-------------+
| kd_transaksi | instruktur | nama_barang |
+--------------+------------+-------------+
| 123 | paejo | komputer |
| 124 | sukimin | rental_vcd |
| 125 | nanang | tembakau |
+--------------+------------+-------------+
3 rows in set (0.00 sec)

mysql> use bank;
Database changed
mysql> select * from nasabah;
+------------+-------+------------+
| kd_nasabah | nama | alamat |
+------------+-------+------------+
| 123 | siti | semarang |
| 124 | wahyu | jogjakarta |
+------------+-------+------------+
2 rows in set (0.00 sec)

mysql> select * from saldo;
+----------+---------+--------+
| kd_saldo | saldo | nama |
+----------+---------+--------+
| 123 | 1500000 | hanafi |
| 124 | 1400000 | paemin |
+----------+---------+--------+
2 rows in set (0.00 sec)

mysql> select * from transaksi;
+--------------+------------+-------------+
| kd_transaksi | instruktur | nama_barang |
+--------------+------------+-------------+
| 123 | paejo | komputer |
| 124 | sukimin | rental_vcd |
+--------------+------------+-------------+
2 rows in set (0.00 sec)
Beda pada Autocommit kalau pada autocommit kita merubah menjadi 0 berarti
transaksi yang dilakukan aktif (ON) pada dasarnya sebelum disetting defaulnya bernilai 1
berarti transaksi mati(OFF). Setelah kita aktifkan maka transaksi akan aktif apabila
didatabase ditambahkan data setelah itu tiba-tiba listrik mati atau kendala lain terjadi
maka secara otomatis data langsung kembali kesemula disinilah fungsinya databases
digunakan.

Menggunakan perintah Rollback.
mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from nasabah;
+------------+-------+------------+
| kd_nasabah | nama | alamat |
+------------+-------+------------+
| 123 | siti | semarang |
| 124 | wahyu | jogjakarta |
+------------+-------+------------+
2 rows in set (0.00 sec)

mysql> select * from saldo;
+----------+---------+--------+
| kd_saldo | saldo | nama |
+----------+---------+--------+
| 123 | 1500000 | hanafi |
| 124 | 1400000 | paemin |
+----------+---------+--------+
2 rows in set (0.00 sec)

mysql> select * from transaksi;
+--------------+------------+-------------+
| kd_transaksi | instruktur | nama_barang |
+--------------+------------+-------------+
| 123 | paejo | komputer |
| 124 | sukimin | rental_vcd |
+--------------+------------+-------------+
2 rows in set (0.00 sec)

mysql> insert into nasabah value(126,'handoko','kediri');
Query OK, 1 row affected (0.00 sec)

mysql> insert into saldo value(126,6500000,'sukamto');
Query OK, 1 row affected (0.00 sec)

mysql> insert into transaksi
value(126,'sukimin','pembayaran_spp');
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> select * from nasabah;
+------------+---------+------------+
| kd_nasabah | nama | alamat |
+------------+---------+------------+
| 123 | siti | semarang |
| 124 | wahyu | jogjakarta |
| 126 | handoko | kediri |
+------------+---------+------------+
3 rows in set (0.00 sec)

mysql> select * from saldo;
+----------+---------+---------+
| kd_saldo | saldo | nama |
+----------+---------+---------+
| 123 | 1500000 | hanafi |
| 124 | 1400000 | paemin |
| 126 | 6500000 | sukamto |
+----------+---------+---------+
3 rows in set (0.00 sec)

mysql> select * from transaksi;
+--------------+------------+---------------+
| kd_transaksi | instruktur | nama_barang |
+--------------+------------+---------------+
| 123 | paejo | komputer |
| 124 | sukimin | rental_vcd |
| 126 | sukimin | pembayaran_sp |
+--------------+------------+---------------+
3 rows in set (0.00 sec)

mysql> rollback;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from nasabah;
+------------+-------+------------+
| kd_nasabah | nama | alamat |
+------------+-------+------------+
| 123 | siti | semarang |
| 124 | wahyu | jogjakarta |
+------------+-------+------------+
2 rows in set (0.00 sec)

mysql> select * from saldo;
+----------+---------+--------+
| kd_saldo | saldo | nama |
+----------+---------+--------+
| 123 | 1500000 | hanafi |
| 124 | 1400000 | paemin |
+----------+---------+--------+
2 rows in set (0.00 sec)

mysql> select * from transaksi;
+--------------+------------+-------------+
| kd_transaksi | instruktur | nama_barang |
+--------------+------------+-------------+
| 123 | paejo | komputer |
| 124 | sukimin | rental_vcd |
+--------------+------------+-------------+
2 rows in set (0.00 sec)
Untuk perintah Rollback berarti artinya mengembalikan kesemula hampir sama
kerjanya dengan Autocommit tapi disini bedannya tidak perlu untuk mengeluarkan
MySQL maka data tersebut akan secara otomatis langsung kembali kesemula.


C. LISTING

Transaksi :
mysql> create table transak_jual(
-> no_transak int(10) primary key,
-> pembeli char(10) not null,
-> penjual char(10) not null,
-> nama_toko char(11)) engine=innodb;
Query OK, 0 rows affected (0.01 sec)

mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into transak_jual
value(101,'ayu','saifudin','majujaya');
Query OK, 1 row affected (0.00 sec)
mysql> insert into transak_jual
value(102,'siti','toha','langgengjaya');
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> select * from transak_jual;
+------------+---------+----------+-------------+
| no_transak | pembeli | penjual | nama_toko |
+------------+---------+----------+-------------+
| 101 | ayu | saifudin | majujaya |
| 102 | siti | toha | langgengjay |
+------------+---------+----------+-------------+
2 rows in set (0.00 sec)

//setelah dilakukan pengeluaran dari Mysql:

mysql> use transaksi;
Database changed
mysql> select * from transak_jual;
Empty set (0.00 sec)

Mode Commit :
mysql> commit;
Query OK, 0 rows affected (0.00 sec)

mysql> use transaksi;
Database changed
mysql> select * from transak_jual;
+------------+---------+----------+-------------+
| no_transak | pembeli | penjual | nama_toko |
+------------+---------+----------+-------------+
| 101 | ayu | saifudin | majujaya |
| 102 | siti | toha | langgengjay |
+------------+---------+----------+-------------+
2 rows in set (0.00 sec)

Mode Autocommit :
mysql> select @@autocommit;
+--------------+
| @@autocommit |
+--------------+
| 1 |
+--------------+
1 row in set (0.00 sec)

mysql> set @@autocommit=0;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into transak_jual
value(103,'dinda','hanafi','matahari');
Query OK, 1 row affected (0.00 sec)

mysql> select * from transak_jual;
+------------+---------+----------+-------------+
| no_transak | pembeli | penjual | nama_toko |
+------------+---------+----------+-------------+
| 101 | ayu | saifudin | majujaya |
| 102 | siti | toha | langgengjay |
| 103 | dinda | hanafi | matahari |
+------------+---------+----------+-------------+
3 rows in set (0.00 sec)

//setelah dikeluarkan dari MySQL secara Manual :

mysql> use transaksi;
Database changed
mysql> select * from transak_jual;
+------------+---------+----------+-------------+
| no_transak | pembeli | penjual | nama_toko |
+------------+---------+----------+-------------+
| 101 | ayu | saifudin | majujaya |
| 102 | siti | toha | langgengjay |
+------------+---------+----------+-------------+
2 rows in set (0.00 sec)

Rollback Transaction :
mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from transak_jual;
+------------+---------+----------+-------------+
| no_transak | pembeli | penjual | nama_toko |
+------------+---------+----------+-------------+
| 101 | ayu | saifudin | majujaya |
| 102 | siti | toha | langgengjay |
+------------+---------+----------+-------------+
2 rows in set (0.00 sec)

mysql> insert into transak_jual
value(104,'dewi','mundopar','dinarraya');
Query OK, 1 row affected (0.00 sec)

mysql> select * from transak_jual;
+------------+---------+----------+-------------+
| no_transak | pembeli | penjual | nama_toko |
+------------+---------+----------+-------------+
| 101 | ayu | saifudin | majujaya |
| 102 | siti | toha | langgengjay |
| 104 | dewi | mundopar | dinarraya |
+------------+---------+----------+-------------+
3 rows in set (0.00 sec)

mysql> rollback;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from transak_jual;
+------------+---------+----------+-------------+
| no_transak | pembeli | penjual | nama_toko |
+------------+---------+----------+-------------+
| 101 | ayu | saifudin | majujaya |
| 102 | siti | toha | langgengjay |
+------------+---------+----------+-------------+
2 rows in set (0.00 sec)