Dalam tutorial belajar MySQL kali ini saya akan membahas query untuk menduplikasi tabel MySQL. Kita akan mempelajari cara mengcopy struktur tabel MySQL berserta isi tabel MySQL.
Cara Mengcopy Struktur Tabel MySQL
Terdapat beberapa cara untuk menduplikasi tabel di dalam MySQL, salah satunya menggunakan perintah mysqldump. Namun kali ini saya akan membahas cara mencopy tabel MySQL menggunakan query dari dalam MySQL.
Untuk membuat struktur tabel baru yang sama persis dengan tabel yang sudah ada, bisa menggunakan format query sebagai berikut:
CREATE TABLE nama_tabel_baru LIKE nama_tabel_lama;
Sebagai contoh, saya akan menduplikasi tabel daftar_dosen menggunakan perintah berikut ini:
mysql> CREATE TABLE daftar_dosen_baru LIKE daftar_dosen; Query OK, 0 rows affected (0.09 sec) mysql> DESCRIBE daftar_dosen_baru; +------------+--------------+------+-----+---------+-------+ | Field     | Type        | Null | Key | Default | Extra | +------------+--------------+------+-----+---------+-------+ | NIP       | char(10)    | NO  | PRI | NULL   |      | | nama_dosen | varchar(50) | NO  |    | NULL   |      | | no_hp     | char(13)    | YES |    | NULL   |      | | alamat    | varchar(100) | YES |    | NULL   |      | +------------+--------------+------+-----+---------+-------+ 4 rows in set (0.06 sec)  mysql> SELECT * FROM daftar_dosen_baru; Empty set (0.00 sec)
Pada query pertama, saya menggunakan perintah CREATE TABLE daftar_dosen_baru LIKE daftar_dosen untuk membuat tabel daftar_dosen_baru yang akan menggunakan struktur yang sama dengan tabel daftar_dosen.
Perintah DESCRIBE daftar_dosen_baru memperlihatkan bahwa strukur tabel daftar_dosen_baru sama persis dengan struktur tabel aslinya: daftar_dosen.
Bagaimana dengan isi dari tabel ini? Dari query SELECT * FROM daftar_dosen_baru, terlihat bahwa tabel ini tidak berisi data apapun.
Cara Mengcopy Isi Tabel MySQL
Untuk mengcopy isi sebuah tabel ke tabel lain di dalam MySQL kita bisa memanfaatkan gabungan query INSERT dengan query SELECT. Sebagai contoh, untuk menduplikasi isi tabel daftar_dosen ke tabel daftar_dosen_baru, saya bisa menggunakan query berikut:
mysql> INSERT INTO daftar_dosen_baru SELECT * FROM daftar_dosen; Query OK, 8 rows affected (0.06 sec) Records: 8 Duplicates: 0 Warnings: 0  mysql> SELECT * FROM daftar_dosen_baru; +------------+------------------+------------+-----------+ | NIP       | nama_dosen      | no_hp     | alamat   | +------------+------------------+------------+-----------+ | 0160436012 | Sabrina Sari    | 0812349900 | Pekanbaru | | 0260432002 | Maya Ari Putri  | 0812345234 | Palembang | | 0275430005 | Susi Indriani   | 0812656532 | Palembang | | 0480432066 | Tia SariSantrini | 0812451177 | Padang   | | 0576431001 | M. Siddiq       | 0812979005 | Jakarta  | | 0770435006 | Rubin Hadi      | 0812567678 | Papua    | | 0869437003 | Arif Mustalifah | 0812338877 | Aceh     | | 1080432007 | Arif Budiman    | 0812456345 | Jakarta  | +------------+------------------+------------+-----------+ 8 rows in set (0.00 sec)
Dengan menggunakan query diatas, seluruh isi tabel daftar_dosen akan dicopy kedalam tabel daftar_dosen_baru.
Bagaimana jika saya hanya butuh sebagian data saja?
Jika kita cuma butuh mengcopy sebagian data dari tabel lama (tidak semua data), cukup memberikan tambahan perintah kondisi seperti WHERE pada query SELECT. Sebagai contoh, jika saya ingin mengcopy hanya dosen yang beralamat di Palembang, saya bisa menggunakan query berikut:
mysql> TRUNCATE daftar_dosen_baru; Query OK, 0 rows affected (0.14 sec)  mysql> SELECT * FROM daftar_dosen_baru; Empty set (0.00 sec)  mysql> INSERT INTO daftar_dosen_baru SELECT * FROM daftar_dosen WHERE alamat = 'Palembang'; Query OK, 2 rows affected (0.04 sec) Records: 2 Duplicates: 0 Warnings: 0  mysql> SELECT * FROM daftar_dosen_baru; +------------+----------------+------------+-----------+ | NIP       | nama_dosen    | no_hp     | alamat   | +------------+----------------+------------+-----------+ | 0260432002 | Maya Ari Putri | 0812345234 | Palembang | | 0275430005 | Susi Indriani | 0812656532 | Palembang | +------------+----------------+------------+-----------+ 2 rows in set (0.00 sec)
Query TRUNCATE daftar_dosen_baru digunakan untuk mengosongkan isi tabel daftar_dosen_baru.
Selanjutnya saya memastikan tabel daftar_dosen_baru sudah kosong dari perintah SELECT * FROM daftar_dosen_baru. Terkahir, saya mengcopy data dari tabel daftar_dosen, namun hanya dosen yang beralamat di Palembang menggunakan kondisi WHERE alamat = ‘Palembang’.
Tutorial cara mengcopy atau menduplikasi tabel MySQL ini kadang diperlukan dalam kasus dimana kita butuh membuat tabel yang sama persis. Tabel ini bisa digunakan sebagai tabel ‘percobaan’ untuk mengamankan tabel asli dari perubahan.
apakah ini berlaku juga untuk create temporary table?
Scriptnya ga bisa dijalankan dengan mysql_query punya PHP ya mas…???
Seharusnya bisa kok gan, karena ini cuma pertintah MySQL. Jadi selama MySQLnya mendukung perintah ini, tidak ada masalah. Atau mungkin bisa coba menggunakan koneksi mysqli_query yang lebih baru.
kok di MySQL saya nggak bisa ya mas?
Ada pesan errornya?
Terima kasih share nya
Salam kenal
Ajib 19
Silahkan gan… :)
Salam kenal juga…
Pak maaf saya ingin tanya jika perintah ini digunakan di php misal tabel srrvis hp untuk memindah data barang yang sudah diservis ke bagian menu list logistik gimna ya,thx
Waah, sangat panjang kalau dijelaskan disini gan, saran saya coba pelajari HTML, PHP dan MySQL lagi.
Kalaupun ada yang bisa bantu agan, dia harus pelajari semua struktur tabel MySQL yang agan buat, kode HTML untuk menu list logistik, serta kode PHP yang sudah ada.
"Memindahkan data barang" seharusnya juga bukan dipindahkan, tapi cukup diupdate statusnya dari "dalam tahap service" menjadi "sudah selesai". Data tersebut tetap ada di database.
iya pak makasih sebelumnya atas jawabannya,iya pak tadinya saya sudah buat fungsi update tapi hanya update jadi barang belum pindah ke logistic masih di halaman yg sama karena ga tau perintah pindahnya hehe.tapi langkah seperti itu sebenarnya bisa di terapin di php ga pak,
Yup bisa saja. Intinya di proses perancangan query MySQL. Kalau datanya pengen dipindah: ambil data di tabel lama, simpan sementara ke variabel PHP, lalu input ke tabel baru. Data di tabel lama kemudian dihapus.
Harus ada beberapa query yang dijalankan, tidak bisa hanya 1 query saja.
Makasih banyak ya gan..
gan mau nanya misalnya bikin databse perpustakaan dengan tabel :
pendaftaran ( nomorpendaftaran, nama, tempatlahir, tgllahir, alamat, status)
anggota (kd_anggota, nama, tempatlahir, tgllahir, alamat,status)
saat memindahkan record tbl pendaftaran ke tbl anggota, kd_anggota & status berubah. untuk kd_anggota saya sudah membuat kode otomatis nya, dan untuk status=nonaktif di pendaftaran ketika pindah ke anggota berubah menjadi status=aktif.
script saya seperti ini tapi blm bisa berpindah dan kd_anggota & status tidak berubah. mohon bantuan nya, terimakasih:)
$kodebaru=buatKode("anggota","A");
$statusbaru=("Aktif");
$id=$_GET['id'];
$sql="INSERT INTO anggota (kd_anggota='$kodebaru', nama, tempatlahir, tgllahir, alamat,status='$statusbaru) SELECT nama, tempatlahir, tgllahir, alamat FROM pendaftaran WHERE kd_daftar='$id'";
$qry = mysql_query($sql, $koneksidb) or die ("Query salah : ".mysql_error());}
if($qry)
//setelah record berpindah ke tbl anggota, kemudian hapus di tbl pendaftaran
$query=mysql_query("DELETE FROM daftar WHERE kd_daftar='$id'");
echo "<script> alert('Berhasil diKonfirmasi') </script>";
echo "<meta http-equiv='refresh' content='0; url=?open=Anggota-CalonData'>";
Pertanyaannya di tampung dulu ya, soalnya butuh waktu cukup lama menganalisis salahnya dimana dan saya harus membuat database yang sama dulu agar bisa mencoba kode program ini. Mudah2an ada rekan2 lain yang bisa membantu.
permisi mau tanya bagaimana kalau mau copy datanya hanya khusus untuk satu row data saja, perintah untuk "where alamat = palembang" akan di ganti jadi apa ya ?
makasih
mungkin untuk where bisa diganti dengan id atau klau contoh diatas NIP (data yang tidak sama dengan lainnya) :D
permisi mau tanya bagaimana kalau mau copy datanya hanya khusus untuk satu row data saja, perintah untuk "where alamat = palembang" akan di ganti jadi apa ya ?
makasih
Kalau langsung dari query MySQL menurut saya jadi terlalu rumit. Sebaiknya pakai 2 kali proses saja di sisi PHP. Ambil data dari tabel lama, simpan ke variabel atau array di PHP, kemudian input ke tabel baru.
setelah aku coba bisa kok lngsung pkai query jdi saya menggunakan where=id (id tiap data berbeda)
btw makasih turorialnya
pk, saya mau mindah sprti itu, tp dngn WHERE `id`
nah yg mw sy tanyakan, apa harus manual isi 1 1, apa ngeloop aja?
mngkin bisa kasih codenya sekalian
maaf ni bntu jawab aja
menurutku enak pakai looping aj dan itu udah aku praktekkan berjalan dengan lancar :D
Siip, terimakasih sudah bantu jawab gan.. Betul, kalau querynya bisa di looping, akan jauh lebih praktis daripada buat satu2.
Mau tanya mas.. Kalau saya mau insert data ke2 tabel di oracle dalam satu eksekusi gimana ya?
Kalau programmingnya menggunakan PHP, insert ke dua tabel ini bisa dengan cara memanggil 2 kali perintah query tapi dalam 1 kali klik tombol. Tp kalau langsung dari query, saya juga kurang paham gimana caranya di database oracle… mungkin bisa disambung saja 2 query tersebut ke dalam 1 perintah, menggunakan tanda pemisah titik koma ';'
Kak gimana cara copy data mysql nya ke komputer lain,soalnya kemarin copy pas buka isinya error
Salam kak
Saya ingin tanya gimana caranya ketika data yang berada di tabel pertama(tabel "daftar_dosen") dirubah/diupdate maka tabel kedua(tabel "daftar_dosen_baru") juga akan terubah secara otomatis
Yang seperti ini bisa memakai fitur TRIGGER kalau di MySQL. Untuk saat ini tutorialnya baru tersedia di eBook MySQL Uncover Duniailkom…
bagaimana jika databasenya antar 2 komputer, jadi tabel daftar_dosen ada di ip 31 dan daftar_dosen_baru ada di ip 32, bagaimana perintah query'a ?
terimakasih
Kalau seperti ini tidak bisa ditulis dalam 1 query. Tabelnya nanti di-export dulu ke dalam bentuk file (misalnya menggunakan perintah mysqldump), lalu baru diimport ke dalam database yang baru di komputer lain.