Mengubah Tabel Tipe MyISAM ke InnoDB

Sharing is caring!

Pada artikel sebelumnya, tentang tabel bertipe InnoDB dalam MySQL, saya sudah paparkan bagaimana cara membuat tabel bertipe InnoDB, mensetting field untuk foreign key-nya, serta menerapkan referential integrity.

Nah… bagaimana seandainya jika pada awalnya Anda telah memiliki tabel bertipe MyISAM, dan di dalamnya juga sudah ada recordnya? Kira-kira bisa tidak ya diconvert menjadi tipe InnoDB? Trus bisa tidak kita set field-field sebagai foreign key, serta menerapkan referential integrity? Jawabnya adalah sangat bisa.

Sebagai catatan, MyISAM adalah tipe tabel default dalam MySQL

Nah… pada artikel ini akan dibahas bagaimana caranya melakukan pengubahan tipe tabel dari MyISAM ke InnoDB, serta bagaimana cara setting field menjadi foreign key dan menerapkan referential integrity.

Untuk memudahkan pembahasan, ada baiknya kita sediakan contoh tabel dan datanya. Berikut ini contoh SQL untuk membuat tabel nya.

CREATE TABLE `mhs` (
  `nim` varchar(5) NOT NULL,
  `nama` varchar(20) NOT NULL,
  PRIMARY KEY  (`nim`)
);
CREATE TABLE `mk` (
  `kodeMK` varchar(5) NOT NULL,
  `namaMK` varchar(20) NOT NULL,
  `sks` int(11) NOT NULL,
  PRIMARY KEY  (`kodeMK`)
);
CREATE TABLE `ambilmk` (
  `nim` varchar(5) NOT NULL,
  `kodeMK` varchar(5) NOT NULL,
  `nilai` float NOT NULL,
  PRIMARY KEY  (`nim`,`kodeMK`),
 );

Perintah SQL di atas akan membuat tabel-tabel bertipe MyISAM (default). Nah… sedangkan record untuk masing-masing tabel diberikan berikut ini

insert  into mhs values 
('M002', 'DWI AMALIA FITRIANI'), 
('M003', 'FAZA FAUZAN'), 
('M004', 'NADA HASANAH'), 
('M005', 'MUH. AHSANI TAQWIM'), 
('M006', 'ROSIHAN ARI Y');
insert  into mk values 
('MK01', 'DATABASE', 3), 
('MK02', 'PEMROGRAMAN DASAR', 2);
insert  into ambilmk values 
('M002', 'MK01', '3'), 
('M003', 'MK01', '3'), 
('M002', 'MK02', '3'), 
('M003', 'MK02', '4');

OK… untuk mengubah tipe tabel-tabel di atas menjadi InnoDB, cukup Anda gunakan perintah SQL ALTER. Secara umum perintah untuk mengubah tipe tabel ke InnoDB menggunakan sintaks berikut:

ALTER TABLE namatabel ENGINE = InnoDB;

Contoh:

Mengubah tipe tabel ‘mhs’ ke InnoDB perintahnya:

ALTER TABLE mhs ENGINE = InnoDB;

Mengubah tipe tabel ‘mk’ ke InnoDB, perintahnya:

ALTER TABLE mk ENGINE = InnoDB;

dan mengubah tipe tabel ‘ambilmk’ ke InnoDB, perintahnya:

ALTER TABLE ambilmk ENGINE = InnoDB;

Sampai sini kita sudah tahu caranya mengubah tipe tabel ke InnoDB. Selanjutnya akan kita coba untuk melakukan setting ke beberapa field yang bertindak sebagai foreign key. Dalam hal ini field foreign key adalah NIM dan KODEMK yang ada dalam tabel ‘ambilmk’. Field NIM ini akan direferensikan ke field NIM yang ada di tabel ‘mhs’ sebagai field induknya. Sedangkan field KODEMK akan direferensikan ke field KODEMK yang ada di tabel ‘mk’.

Perintah SQL untuk melakukan setting foreign key untuk field NIM yang ada di tabel ‘ambilmk’ adalah:

ALTER TABLE ambilmk
   ADD CONSTRAINT FOREIGN KEY (nim) REFERENCES mhs (nim)
   ON DELETE CASCADE
   ON UPDATE CASCADE;

Sedangkan perintah SQL untuk setting foreign key untuk field KODEMK di tabel ‘ambilmk’ adalah:

ALTER TABLE ambilmk
   ADD CONSTRAINT FOREIGN KEY (kodemk) REFERENCES mk (kodemk)
   ON DELETE CASCADE
   ON UPDATE CASCADE;

Dalam contoh ini, data (record) yang kebetulan diberikan pada contoh ini tidak ada masalah, maksudnya data untuk field NIM yang ada di tabel ambilmk mengacu ke NIM pada tabel mhs. Begitu pula untuk field KODEMK yang ada di tabel mk. Nah… seandainya ada data yang bermasalah, misalnya ada nim ‘M009’ dalam record di tabel ambilmk, dimana nim tersebut tidak ada di tabel mhs, maka proses ALTER di atas akan menyebabkan ERROR.

Tinggalkan Komentar