DATABASE ENVIRONMENT


LINGKUNGAN DATABASE

CONCURRENCY (KONKURENSI)

Salah satu tujuan utama dalam mengembangkan sebuah database adalah membuat sumber informasi yang dapat digunakan oleh sejumlah user yang terkadang diakses secara terus-menerus.

  •  Jika semua user hanya membaca data, maka data yang satu tidak akan berbaur dengan data yang lain.
  • Akan tetapi jika dua orang user mencoba melakukan update data, maka ada kemungkinan terjadi “benturan” data.
  • Salah satu kriteria untuk melakukan klasifikasi sebuah sistem database adalah dengan menggabungkan sejumlah user yang dapat menggunakan sistem secara konkurensi, yaitu pada waktu yang sama.
 Contoh : Sistem Pemesanan Tiket Pesawat digunakan oleh ratusan agen perjalanan dan pemesanan tiket dilakukan secara konkuren.

Ada 3 masalah yang disebabkan oleh Concurrency :

1. Masalah kehilangan modifikasi (Lost Update Problem)

Masalah ini timbul jika dua transaksi mengakses item database yang sama yang mengakibatkan nilai dari database tersebut menjadi tidak benar.

tabel1_p13tabel2_p13

Nilai saldo menjadi tidak benar disebabkan transaksi Susi membaca nilai saldo sebelum transaksi Ika mengubah nilai tersebut dalam database, sehingga nilai yang sudah di update yang dihasilkancdari transaksi Ika menjadi hilang.

2. Masalah Modifikasi Sementara (uncommited Update Problem) Masalah ini timbul jika transaksi membaca suatu record yang sudah dimodifikasi oleh transaksi lain tetapi belum terselesaikan (uncommited), terdapat kemungkinan kalau transaksi tersebut dibatalkan (rollback).

tabel3_p13tabel4_p13

Nilai saldo menjadi tidak benar disebabkan terjadi RollBack pada T7 yang membatalkan transaksi sebelumnya (T6), sehingga saldo seharusnya tetap 2.000.000

3. Masalah Analisa yang tidak konsisten (Problem of inconsistency Analysis)

Masalah ini timbul jika sebuah transaksi membaca suatu nilai tetapi transaksi yang kedua mengupdate beberapa nilai tersebut selama eksekusi transaksi pertama

Contoh Problem of inconsistency Analysis Transaksi A menjumlahkan nilai 1, nilai 2 dan nilai 3 Transaksi Bnilai 1 + 10, nilai 3 –10

LOCKING adalah salah satu mekanisme pengontrol concurrency

KONSEP DASAR : Ketika sebuah transaksi memerlukan jaminan kalau record yang diinginkan tidak akan berubah secara mendadak, maka diperlukan kunci untuk record tersebut

FUNGSI Locking berfungsi untuk menjaga record tersebut agar tidak dimodifikasi oleh transaksi lain.

Jenis- Jenis Lock :

1. Share (S)

Kunci ini memungkinkan pengguna dan para pengguna konkuren yang lain dapat membaca record tetapi tidak mengubahnya.

2. Exclusive (X)

Kunci ini memungkinkan pengguna untuk membaca dan mengubah record.

Sedangkan pengguna konkuren lain tidak diperbolehkan membaca ataupun mengubah record tersebut.

tabel5_p13

 TIMESTAMPING Adalah salah satu alternatif mekanisme kontrol konkurensi yang dapat menghilangkan masalah dead lock Dua masalah yang timbul pada Timestamping :

  1. Suatu transaksi memerintahkan untuk membaca sebuah item yang sudah di update oleh transaksi yang belakangan.
  2. Suatu transaksi memerintahkan untuk menulis sebuah item yan nilainya sudah dibaca atau ditulis oleh transaksi yang belakangan

Sebuah Database pada suatu kasus bisa saja yang menggunakan tidak hanya satu aplikasi (misalkan aplikasi yang pertama berbentuk webbase, dan aplikasi yang lain berbentuk desktop aplikasi). Dan kedua aplikasi tersebut mengakses tabel yang sama secara bersaman, maka akan mungkin terjadi kesalahan data (misalkan kesalahan tentang stok barang, pada kasus ini aplikasi pertama sedang melakukan proses penambahan stok pada tabel_stok tiba-tiba aplikasi kedua melakukan penghitungan stok pada tabel_stok ketika proses penambahan stok belum selesai) .

Kejadian ini dapat dihindari dengan menerapkan LOCK TABLES.
LOCK TABLES melakukan penguncian tabel [LOCK TABLES] ketika proses sedang berlangsung, kemudian akan membebaskan table [UNLOCK TABLES] ketika proses telah berakhir.

Pada Database MySQL 5.x.x telah tersedia feature Lock Tabels, pada posting ini Locks Tables yang di lakukan adalah penguncing pada level tabel.

Rule Locks Tables yang tersedia ada dua macam :

1. Read Lock, adalah penguncian tabel yang menjadikan tabel tersebut hanya dapat dilakukan manipulai proses read saja yang di terapkan pada semua session termasuk session nya sendiri. Jadi bila ada manipulasi tabel seperti insert, update, delete, truncate status nya akan selalu waiting hingga dilakukan UNLOCK TABLES.

Contoh Skrip:

  1. mysql> LOCK TABLES tabel_telepon READ;
  2. Query OK, 0 rows affected (0.00 sec)

Bila manipulasi insert/update/delete/truncate pada session sendiri, maka akan menampilkan pesan error. Dibawah ini adalah contohnya:

  1. mysql> insert into tabel_telepon values (null, ‘DENDIE’,’081394345678′);
  2. ERROR 1099 (HY000): Table ‘tabel_telepon’ was locked with a READ lock and can’t be updated
  3. mysql>

Bila manipulasi insert/update/delete/truncate pada session yang lainmaka akan menampilkan proses selalu waiting. Dibawah ini adalah contohnya:

mysql> insert into tabel_telepon values (null, 'ULIE','08133453455');

proses insert diatas akan dieksekusi bila telah di lakukan UNLOCK TABLES pada session yang bersangkutan (session yang melakukanLOCK TABLES), Dibawah ini skrip untuk melakukan unlock tables;

  1. mysql> UNLOCK TABLES;
  2. Query OK, 0 rows affected (0.00 sec)

2. Write Lock, adalah penguncian tabel yang menjadikan tabel tersebut hanya dapat dilakukan manipulai proses read,insert, update, delete, truncate pada session nya sendiri. Dan yang terjadi padasession lain hanya dapat melakukan proses read tabel saja, dan untuk proses yang lain seperti insert, update, delete, truncate status nya akan selalu waiting hingga dilakukan UNLOCK TABLES.

Contoh Skrip:

  1. mysql> LOCK TABLES tabel_telepon WRITE;
  2. Query OK, 0 rows affected (0.00 sec)

Bila manipulasi select/insert/update/delete/truncate pada session sendiri akan mendapatkan hasil sukses, tetapi bila proses select/insert/update/delete/truncate di lakukan pada session yang lain maka akan menampilkan proses yang selalu waiting. Dibawah ini adalah contohnya:

  1. mysql> insert into tabel_telepon values (null, ‘DAZ’,’081334534345′);

proses insert diatas akan dieksekusi bila telah di lakukan UNLOCK TABLES pada session yang bersangkutan (session yang melakukanLOCK TABLES), Dibawah ini skrip untuk melakukan unlock tables;

  1. mysql> UNLOCK TABLES;
  2. Query OK, 0 rows affected (0.00 sec)

Tambahan:

  • Database Mysql yang digunakan versi 5.1.37
  • StoreEngine Tabel yang digunakan MyIsam
  • Operasi System Yang digunakan Ubuntu Karmic Koala

SQL tabel_telepon yang digunakan pada contoh diatas:

  1. CREATE TABLE `tabel_telepon` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `nama` varchar(255) DEFAULT NULL,
  4. `telepon` varchar(255) DEFAULT NULL,
  5. PRIMARY KEY (`id`)
  6. ) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8

Contoh
Transakasi Menggunakan SET AUTOCOMMIT dalam Procedure

CREATE PROCEDURE tfer_funds
(from_account int, to_account int,tfer_amount numeric(10,2))
BEGIN
SET autocommit=0;

UPDATE account_balance
SET balance=balance-tfer_amount
WHERE account_id=from_account;

UPDATE account_balance
SET balance=balance+tfer_amount
WHERE account_id=to_account;

COMMIT;
END;

Transaksi menggunakan START TRANSACTION, dalam Procedure

CREATE PROCEDURE tfer_funds
(from_account int, to_account int,tfer_amount numeric(10,2))
BEGIN
START TRANSACTION;

UPDATE account_balance
SET balance=balance-tfer_amount
WHERE account_id=from_account;

UPDATE account_balance
SET balance=balance+tfer_amount
WHERE account_id=to_account;

COMMIT;
END;

Seperti kita ketahui transaksi secara normal melengkapi, menjalankan perintah COMMIT maupun ROLLBACK statemen dieksekusi. Bagaimanapun, kita sadar bahwa beberapa statemen Data Definition Language ( DDL) mencari perintah menyebabkan COMMIT. Statemen yang secara implisit dilakukan, dan oleh karena itu dihindarkan ketika suatu transaksi barjalan, jika sedang menjalankan perintah berikut :

ALTER FUNCTION
ALTER PROCEDURE
ALTER TABLE
BEGIN
CREATE DATABASE
CREATE FUNCTION
CREATE INDEX
CREATE PROCEDURE
CREATE TABLE
DROP DATABASE
DROP FUNCTION
DROP INDEX
DROP PROCEDURE
DROP TABLE
UNLOCK TABLES
LOAD MASTER DATA
LOCK TABLES
RENAME TABLE
TRUNCATE TABLE
SET AUTOCOMMIT=1
START TRANSACTION

PRAKTIK

CREATE TABLE mhs (
no_mhs char(4) DEFAULT NULL,
nama char(25) DEFAULT NULL,
alamat char(25) DEFAULT NULL
) ENGINE=InnoDB;

CREATE TABLE `jurusan` (
`no_mhs` char(4) DEFAULT NULL,
`kode` char(2) DEFAULT NULL
) ENGINE=InnoDB;

Transaksi penambahan reakaman menggunakan START TRANSACTION dan ROLLBACK; satu rekaman

– Jalankan perintah transakasi

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

– Penambahan rekama tabel mhs

mysql> INSERT INTO mhs VALUES(’0005′,’Untung Raharja’,’Bandung’);
Query OK, 1 row affected (0.00 sec)

– Lihat hasil penambahan

mysql> select * from mhs;
+——–+—————-

+———+
| no_mhs | nama | alamat |
+——–+—————-+———+
| 0001 | Agus | Solo |
| 0002 | Budi | jogja |
| 0003 | Bejo | Bantul |
| 0004 | Ani | jogja |
| 0005 | Untung Raharja | Bandung |
+——–+—————-+———+
5 rows in set (0.00 sec)
– penjalesan
– Mahasiswa untuk sumentara sudah direkam
– Mambatalkan rekaman dengan perintah ROLLBACK;mysql> ROLLBACK;
Query OK, 0 rows affected (0.05 sec)mysql> select * from mhs;
+——–+——+——–+
| no_mhs | nama | alamat |
+——–+——+——–+
| 0001 | Agus | Solo |
| 0002 | Budi | jogja |
| 0003 | Bejo | Bantul |
| 0004 | Ani | jogja |
+——–+——+——–+
4 rows in set (0.00 sec)– Cek kembali mahasiswa bernama Untung tidak jadi direkamMari kita coba lagi penambahan lebih dari 1 rekamanan dengan blok transakasi

Penambahan rekaman dengan START TRANSACTION dan ROLLBACK dua rekaman

mysql> START TRANSACTION;
mysql> INSERT INTO mhs VALUES(’0005′,’Untung Raharja’,’Bandung’);
mysql> INSERT INTO mhs VALUES(’0006′,’Diah Ayu Subekti’,’Semarang’);

mysql> select * from mhs;
+——–+——————+———-+
| no_mhs | nama | alamat |
+——–+——————+———-+
| 0001 | Agus | Solo |
| 0002 | Budi | jogja |
| 0003 | Bejo | Bantul |
| 0004 | Ani | jogja |
| 0005 | Untung Raharja | Bandung |
| 0006 | Diah Ayu Subekti | Semarang |
+——–+——————+———-+
6 rows in set (0.00 sec)

mysql> ROLLBACK;
Query OK, 0 rows affected (0.05 sec)

// lihat hasilnya

mysql> select * from mhs;
+——–+——+——–+
| no_mhs | nama | alamat |
+——–+——+——–+
| 0001 | Agus | Solo |
| 0002 | Budi | jogja |
| 0003 | Bejo | Bantul |
| 0004 | Ani | jogja |
+——–+——+——–+
4 rows in set (0.00 sec)

mysql>

Penjelasan :

Telah ditambahkan 2 rekaman

| 0005 | Untung Raharja | Bandung |
| 0006 | Diah Ayu Subekti | Semarang |

Kemudian pada saat menjalan perintah ROLLBACK
2 Rekaman tersebut dibatalkankan semua

Penambahan rekaman dengan START TRANSACTION dan COMMIT dua rekaman atau lebih

Perintah COMMIT, lihat contoh berikut :

mysql> START TRANSACTION;
mysql> INSERT INTO mhs VALUES(’0005′,’Untung Raharja’,’Bandung’);
mysql> INSERT INTO mhs VALUES(’0006′,’Diah Ayu Subekti’,’Semarang’)
mysql> COMMIT;
Query OK, 0 rows affected (0.06 sec)

mysql> select * from mhs;
+——–+——————+———-+
| no_mhs | nama | alamat |
+——–+——————+———-+
| 0001 | Agus | Solo |
| 0002 | Budi | jogja |
| 0003 | Bejo | Bantul |
| 0004 | Ani | jogja |
| 0005 | Untung Raharja | Bandung |
| 0006 | Diah Ayu Subekti | Semarang |
+——–+——————+———-+
6 rows in set (0.00 sec)

Penjelasan :
START TRANSACTION; : blok awal melakukan perintah transakasi
Perintah : ISNERT, UPDATE, DELETE
COMMIT; : perintah betul-betul dilakukan secara fisik ke penyimpan

Pengubahan dengan rekaman START TRANSACTION dan ROLLBACK

mysql> START TRANSACTION;
mysql> UPDATE mhs SET nama=’Agus Nefo’,alamat=’Pati’ WHERE no_mhs=’000

– lihat perubhan Agus namanya di ubah Agus Nefo, alamat Pati

mysql> select * from mhs;
+——–+——————+———-+
| no_mhs | nama | alamat |
+——–+——————+———-+
| 0001 | Agus Nefo | Pati |
| 0002 | Budi | jogja |
| 0003 | Bejo | Bantul |
| 0004 | Ani | jogja |
| 0005 | Untung Raharja | Bandung |
| 0006 | Diah Ayu Subekti | Semarang |
+——–+——————+———-+
6 rows in set (0.00 sec)

– batalkan perubahan

mysql> ROLLBACK;

– lihat kembali hasilnya, setelah dibatalkan kembali nama dan alamat semula.

mysql> select * from mhs;
+——–+——————+———-+
| no_mhs | nama | alamat |
+——–+——————+———-+
| 0001 | Agus | Solo |
| 0002 | Budi | jogja |
| 0003 | Bejo | Bantul |
| 0004 | Ani | jogja |
| 0005 | Untung Raharja | Bandung |
| 0006 | Diah Ayu Subekti | Semarang |
+——–+——————+———-+
6 rows in set (0.00 sec)

Contoh berikutnya :

Pengubahan dengan START TRANSACTION dan COMMIT

mysql> START TRANSACTION;
mysql> UPDATE mhs SET nama=’Agus Nefo’,alamat=’Pati’ WHERE no_mhs=’0001′;
mysql> COMMIT;

mysql> select * from mhs;
+——–+——————+———-+
| no_mhs | nama | alamat |
+——–+——————+———-+
| 0001 | Agus Nefo | Pati |
| 0002 | Budi | jogja |
| 0003 | Bejo | Bantul |
| 0004 | Ani | jogja |
| 0005 | Untung Raharja | Bandung |
| 0006 | Diah Ayu Subekti | Semarang |
+——–+——————+———-+
6 rows in set (0.00 sec)

mysql>
Perintah COMMIT akan benar-benar mengubah rekaman mhs.

Transaksi Penghapusan START TRANSACTION dan ROLLBACK

mysql> START TRANSACTION;
mysql> DELETE FROM mhs WHERE no_mhs=’0002′;
mysql> DELETE FROM mhs WHERE no_mhs=’0003′;

mysql> select * from mhs;
+——–+——————+———-+
| no_mhs | nama | alamat |
+——–+——————+———-+
| 0001 | Agus Nefo | Pati |
| 0004 | Ani | jogja |
| 0005 | Untung Raharja | Bandung |
| 0006 | Diah Ayu Subekti | Semarang |
+——–+——————+———-+
4 rows in set (0.00 sec)

mysql> ROLLBACK;

mysql> select * from mhs;
+——–+——————+———-+
| no_mhs | nama | alamat |
+——–+——————+———-+
| 0001 | Agus Nefo | Pati |
| 0002 | Budi | jogja |
| 0003 | Bejo | Bantul |
| 0004 | Ani | jogja |
| 0005 | Untung Raharja | Bandung |
| 0006 | Diah Ayu Subekti | Semarang |
+——–+——————+———-+
6 rows in set (0.00 sec)

Perintah ROLLBACK membatalkan penghapusan

Melakukan penghapusan START TRANSACTION dan COMMIT

mysql> START TRANSACTION;
mysql> DELETE FROM mhs WHERE no_mhs=’0002′;
mysql> DELETE FROM mhs WHERE no_mhs=’0003′;
mysql> COMMIT;
Query OK, 0 rows affected (0.06 sec)

// lihat penghapusan beer-benar dilakukan

mysql> select * from mhs;
+——–+——————+———-+
| no_mhs | nama | alamat |
+——–+——————+———-+
| 0001 | Agus Nefo | Pati |
| 0004 | Ani | jogja |
| 0005 | Untung Raharja | Bandung |
| 0006 | Diah Ayu Subekti | Semarang |
+——–+——————+———-+
4 rows in set (0.00 sec)

mysql>

Transaksi dari satu tabel

mysql> START TRANSACTION;
mysql> INSERT INTO mhs VALUES(’0002′,’Badiyanto’,’Yogyakarta’);

mysql> INSERT INTO jurusan(’0002′,’TI’);
mysql> INSERT INTO jurusan VALUES(’0002′,’TI’);

mysql> select * from mhs,jurusan WHERE mhs.no_mhs=jurusan.no_mhs;
+——–+———–+————+——–+——+
| no_mhs | nama | alamat | no_mhs | kode |
+——–+———–+————+——–+——+
| 0001 | Agus Nefo | Pati | 0001 | TI |
| 0004 | Ani | jogja | 0004 | KA |
| 0002 | Badiyanto | Yogyakarta | 0002 | TI |
+——–+———–+————+——–+——+
3 rows in set (0.00 sec)

mysql> ROLLBACK;

mysql> select * from mhs,jurusan WHERE mhs.no_mhs=jurusan.no_mhs;
+——–+———–+——–+——–+——+
| no_mhs | nama | alamat | no_mhs | kode |
+——–+———–+——–+——–+——+
| 0001 | Agus Nefo | Pati | 0001 | TI |
| 0004 | Ani | jogja | 0004 | KA |
+——–+———–+——–+——–+——+
2 rows in set (0.00 sec)

Secara garis besar, Tabel MySQL dibedakan menjadi dua jenis, yaitu Transaction Safe dan Non-Transaction Safe.

  • Transaction Safe merupakan tabel yang mendukung transaksi. Dalam proses transaksi kita dapat memperkecil terjadinya kesalahan dalam pemrosesan data. Jenis tabel ini yang ane pake dalam penerapan aktifitas koding. Namun sayang, tabel jenis ini performa dalam hal kecepatan lebih lambat daripada jenis tabel non-transaction safe karena membutuhkan resource yang lebih banyak. Mungkin tabel jenis ini lebih memprioritaskan kapasitas/data daripada kecepatan.
  • Non Transaction Safe merupakan tabel yang tidak mendukung adanya transaksi. Garis besarnya jenis tabel ini kebalikan dari Transaction Safe. Tabel jenis ini mempunyai kelebihan dalam hal kecepatan. Namun tidak ada toleransi dalam kesalahan pemrosesan data. Misalkan ada kesalahan dalam update data, maka data tersebut tidak dapat dikembalikan. Tabel berjenis MyISAM, MEMORY, ARCHIVE termasuk dalam jenis ini.

Jenis-jenis tabel yang terdapat pada MySQL. Baik itu Transaction Safe maupun Non-Transaction Safe :

  1. EXAMPLE : Tabel jenis ini disediakan oleh MySQL tanpa didukung feature apapun. tabel jenis ini hanya digunakan sebagai contoh untuk memulai membuat sebuah tabel. Ketika kita membuat tabel dengan jenis ini, filenya tetap akan disimpan pada database direktori dengan ekstensi .frm. Tidak ada data yang akan disimpan dalam direktori database. Kita juga tidak dapat melakukan penyimpanan data dalam tabel jenis ini.
  2. CSV : Tabel jenis ini menyimpan data pada text file dengan pemisah koma. Ketika kita membuat tabel dengan jenis ini, filenya akan disimpan pada database direktori dengan ekstensi frm, dan data akan disimpan dengan ekstensi .CVS berdasarkan nama tabel yang dibuat.
  3. MyISAM : Tabel jenis ini diperuntukkan bagi junker2 yang membutuhkan kecepatan yang tinggi, namun dengan kelemahan tidak ada toleransi kesalahan dalam pemrosesan data. Adapun kelebihan dari jenis ini adalah mendukung fasilitas pencarian dengan fungsi full-text dan kemudahan dalam perbaikan tabel. Data-data MyISAM disimpan dalam direktori database terdiri atas 3 jenis, yaitu nama_tabel.frm, nama_tabel.myd, nama_tabel.myi. FRM menyimpan schema tabel, MYD menyimpan data-data, MYI menyimpan data-data index. Tabel jenis ini mendukung jumlah index sampai dengan 64 buah index.
  4. BLACKHOLE : Inilah salah satu jenis tabel yang paling unik, karena sewaktu kita membuat tabel dengan jenis ini dan kita menambahkan data, maka tabel blackhole tidak akan menyimpannya namun melemparkannya. Pada prakteknya tabel blackhole sering dipakai pada seseorang yang tidak menginginkan menyimpan sebuah data pada tabel namun file log. File Log sangat bermanfaat untuk proses replikasi replikasi. Kita dapat mengatur agar master tidak menerima data apapun, namun berguna untuk meneruskan data pada Slave sehingga hanya Slave yang memiliki data.
  5. MRG_MYISAM : Tabel jenis ini juga merupakan jenis tabel yang unik. Jenis ini merupakan gabungan dari beberapa tabel MyISAM. Penggabungan ini dimaksudkan untuk mempermudah pencarian dan manajemen data terhadap beberapa tabel MyISAM karena hanya menggunakan sebuah tabel MRG_ISAM saja. Yang perlu diperhatikan ketika membuat jenis tabel ini adalah, diantara tabel MRG_MyISAM dan tabel Merge yang merupakan gabungan harus mepunyai kolom2 yang identik. Tabel ini tidak mempunyai batasan penyimpanan, namun tabel2 MyISAM yang merupakan gabungannya mempunyai batasan berdasarkan Sistem Operasinya. Tabel jenis ini seperti InnoDD dalam hal penyimpanan data.
  6. Sebetulnya tabel jenis ini tidak mempunyai data apapun, ia hanya memiliki link atau lokasi kedalam kedua tabel MyISAM yang telah digabung. Ketika kita menghapus data dalam tabel MRG_MyISAM, maka data pada lokasi aslinya turut terhapus. Perlu diperhatikan, kita tidak diperkenankan untuk menggunakan perintah ALTER TABLE pada jenis tabel ini karena jika demikian, maka link atau lokasi pada tabel penggabungan akan hilang.
  7. InnoDB : Cocok digunakan sebagai komputer server yang memproses data yang sangat besar. Untuk kecepatan, InnoDB memang kalah dibanding MyISAM namun dalam hal pemrosesan data tabel ini jauh lebih baik. Tabel ini menyimpan data2 yang sedang diproses dalam memori komputer untuk mempercepat proses MySQL. InnoDB tidak mempunyai batasan penyimpanan data meskipun file system OS mempunyai batasan penyimpanan. InnoDB juga mempunyai kriteria Row level Locking yang memungkinkan penguncian tabel hanya untuk data-data tertentu saja. Penguncian ini hanya akan dilakukan ketika data tersebut sedang digunakan sehingga tidak tersedia bagi user yang lain.Tabel InnoDB mempunyai file Log tersendiri dan terdiri dari beberapa buah. Kita dapat mementukan jumlah file log yang digunakan melalui konfigurasi innodb_log_files_in_group. InnoDB mendukung penggunaan Constraint FOREIGN KEY sehingga memudahkan pendeklarasian foreign key. Selain itu juga mendukung penggunaan keyword ON DELETE dan ON UPDATE. Operasi yang dapat digunakan terhadap tabel foreign key antara lain :

    – CASCADE

    Jika ada perubahan maupun penghapusan pada tabel Primary Key, maka MySQL juga akan turut menghapus atau mengubah data pada tabel Foreign Key.

    – RESTRICT

    Jika ada perubahan maupun penghapusan pada tabel Primary Key, maka MySQL tidak akan menghapus atau mengubah data yang sama pada tabel Foreign Key.

    – SET NULL

    Jika ada perubahan maupun penghapusan pada tabel Primary Key, maka MySQL mengosongkan data yang sama pada tabel Foreign Key.

    – NO ACTION

    Keyword ini berguna untuk menolak perubahan atau penghapusan data pada tabel Primary Key jika terdapat data yang sama pada tabel Foreign Key. Bila pada tabel Foreign Key tidak sudah tidak ada yang sama, maka akan diijinkan untuk melakukan penghapusan atau perubahan data pada tabel Primary.

  8. ARCHIVE : Tabel jenis ini adalah jenis tabel yang dipadatkan. Tabel ini diperuntukkan bagi yang menyimpan data-data yang besar karena penyimpanan dari tabel ini sangat kecil. Kita dapat menggunakan perintahSELECT dan INSERT namun kita tidak dapat menggunakan perintah DELETE,UPDATE maupun REPLACE karena tabel ini hanya digunakan untuk memasukkan dan membaca saja. Tabel ini juga tidak mendukung klausa ORDER BY dalam perintah SELECT.
  9. MEMORY : Pemyimpan data pada jenis tabel ini tersimpan secara sementara dalam memory komputer. Ketika Server komputer dimatikan, secara otomatis data akan dihapus dari memori komputer. Tabel jenis ini cocok digunakan untuk pembuatan tabel sebelum membuat tabel aslinya. Sudah pasti tabel ini bekerja lebih cepat daripada tabel lainnya karena bekerja dalam memori komputer. Besar penyimpanan tabel ini pun dialokasikan dengan ukuran yang lebih kecil mengingat penyimpanannya ada pada memori dan bersifat statik.
  10. FEDERATED : Tabel ini digunakan untuk mengakses data pada tabel lainnya. Tabel jenis ini tidak mempunyai data apapun seperti halnya tabel MRG_MyISAM. Tabel ini biasanya digunakan untuk mengakses tabel MySQL Remote. Tabel jenis ini juga tidak mendukung transaksi dan perintah DDL(Data Definition Language) dan tidak bisa mengetahui apabila telah terjadi perubahan skema tabel pada tabel remote yang diakses.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s