Langsung ke konten
Belajar Database

Apa Fungsi REPLACE pada MySQL? Panduan Lengkap Penggantian Teks di Database

Foto TaufiqOleh Taufiq
belajar merancang database SQL

Pernahkah Anda mendengar fungsi REPLACE MySQL? Fungsi ini adalah penyelamat ketika harus mengganti ratusan teks lama di database, misalnya URL domain lama yang tersebar di ribuan posting WordPress. Tanpa fungsi REPLACE MySQL, Anda harus membuka setiap posting satu per satu dan menggantinya secara manual, yang tentu membuang waktu dan berisiko terjadi kesalahan. Pada panduan lengkap ini, Anda akan mempelajari fungsi REPLACE MySQL dari nol, mulai dari pengertian, sintaks, hingga contoh praktis update massal, kombinasi dengan CONCAT dan TRIM, serta cara mengamankannya dari SQL injection.

Pengertian Fungsi REPLACE MySQL dan Cara Kerjanya

Fungsi REPLACE MySQL adalah fungsi string bawaan MySQL yang bertugas mengganti semua kemunculan substring tertentu di dalam sebuah string dengan substring lain. Berbeda dengan UPDATE yang mengubah baris di tabel, REPLACE bekerja di level nilai teks dan mengembalikan string baru tanpa mengubah string asli secara langsung sampai Anda menyimpannya kembali dengan SET. Fungsi ini sangat berguna ketika Anda perlu normalisasi data, migrasi domain, atau pembersihan teks massal.

Cara kerja fungsi REPLACE MySQL cukup sederhana: MySQL memindai string sumber dari awal hingga akhir, mencari setiap kemunculan from_string, lalu menggantinya dengan to_string. Jika from_string tidak ditemukan, fungsi mengembalikan string asli tanpa perubahan. Hasilnya selalu berupa string baru sehingga Anda bisa menggunakannya di dalam SELECT untuk pratinjau atau di dalam UPDATE untuk perubahan permanen. Dokumentasi resmi tentang perilaku fungsi string MySQL tersedia di MySQL String Functions.

Satu hal penting adalah sifat case-sensitive fungsi REPLACE MySQL yang bergantung pada collation kolom Anda. Pada collation default seperti utf8mb4_general_ci, perbandingan mungkin tidak sensitif huruf besar-kecil, tetapi pada collation bin atau cs, ‘Old’ dan ‘old’ dianggap berbeda. Jika Anda membutuhkan penggantian tanpa memedulikan huruf besar-kecil, pertimbangkan untuk menormalkan dengan LOWER atau menyesuaikan collation. Memahami detail ini mencegah kebingungan ketika query terlihat benar tetapi tidak mengganti apa pun.

Sintaks Dasar Fungsi REPLACE MySQL

Sintaks dasar fungsi REPLACE MySQL sangat ringkas dan mudah diingat:

SQL Snippet SQL
REPLACE(string, from_string, to_string)
  • string – sumber teks atau nama kolom yang akan diproses, misalnya post_content atau ‘Hello World’.
  • from_string – substring yang ingin diganti. Jika tidak ditemukan, string asli dikembalikan utuh.
  • to_string – substring pengganti. Boleh berupa string kosong ” jika Anda ingin menghapus from_string.

Contoh paling sederhana adalah mengganti kata di dalam literal string:

SQL Snippet SQL
SELECT REPLACE('Hello World', 'World', 'MySQL') AS hasil;
-- hasil: Hello MySQL

SELECT REPLACE('banjir bandang', 'banjir', 'air');
-- hasil: air bandang

SELECT REPLACE('2023-2023-2023', '2023', '2024');
-- hasil: 2024-2024-2024 (semua kemunculan diganti)

Perhatikan contoh ketiga: REPLACE mengganti semua kemunculan, bukan hanya yang pertama. Sifat ini membuatnya ideal untuk pembersihan massal. Jika Anda hanya ingin mengganti kemunculan pertama, Anda perlu kombinasi SUBSTRING dan INSTR, tetapi untuk sebagian besar kasus migrasi data, perilaku ganti-semua adalah yang Anda butuhkan. Pelajari lebih lanjut variasi fungsi string lainnya di dokumentasi resmi MySQL.

Contoh Penggunaan REPLACE untuk Update Massal di WordPress

Skenario paling umum fungsi REPLACE MySQL adalah migrasi domain WordPress. Semua konten posting WordPress tersimpan di tabel wp_posts kolom post_content, termasuk URL gambar, link internal, dan shortcode yang masih merujuk ke domain lama.

SQL Snippet SQL
UPDATE wp_posts 
SET post_content = REPLACE(post_content, 'domainlama.com', 'domainbaru.com') 
WHERE post_content LIKE '%domainlama.com%';
  1. UPDATE wp_posts – memberi tahu MySQL tabel mana yang akan diperbarui. Tanpa ini, query tidak tahu harus menyentuh data mana.
  2. SET post_content = REPLACE(post_content, ‘domainlama.com’, ‘domainbaru.com’) – kolom post_content diisi ulang dengan hasil REPLACE. Setiap kemunculan domain lama di dalam konten diganti menjadi domain baru, sementara teks lain tetap utuh.
  3. REPLACE(post_content, ‘domainlama.com’, ‘domainbaru.com’) – inti penggantian. Anda bisa menyesuaikan pasangan lama-baru sesuai kebutuhan, misalnya http://lama.com ke https://baru.com.
  4. WHERE post_content LIKE ‘%domainlama.com%’ – filter agar hanya baris yang mengandung domain lama yang diproses. Tanpa WHERE, MySQL akan memindai dan menulis ulang semua baris di tabel, yang membuang resource dan memperlambat server, terutama pada situs dengan puluhan ribu posting.

Tips tambahan: sebelum menjalankan UPDATE, jalankan SELECT pratinjau untuk memastikan hasilnya sesuai harapan:

SQL Snippet SQL
SELECT ID, post_title,
 REPLACE(post_content, 'domainlama.com', 'domainbaru.com') AS pratinjau
FROM wp_posts
WHERE post_content LIKE '%domainlama.com%'
LIMIT 5;

Jika pratinjau sudah benar, barulah jalankan UPDATE. Pendekatan ini mencegah kesalahan yang sulit di-undo. Untuk pemahaman konteks WordPress, lihat juga tutorial di kategori Programming Infanthree yang membahas optimasi database WordPress.

Contoh REPLACE di Tabel Lain: Postmeta, Produk, dan Data Custom

Fungsi REPLACE MySQL tidak terbatas pada wp_posts. Anda bisa menggunakannya di kolom mana pun di database. Berikut tiga contoh praktis yang sering ditemui:

SQL Snippet SQL
-- 1. Mengganti URL CDN lama ke CDN baru di wp_postmeta
UPDATE wp_postmeta 
SET meta_value = REPLACE(meta_value, 'old-cdn.com', 'new-cdn.com') 
WHERE meta_value LIKE '%old-cdn.com%';

-- 2. Mengganti nama brand di judul produk WooCommerce
UPDATE wp_posts 
SET post_title = REPLACE(post_title, 'Old Brand', 'New Brand') 
WHERE post_type = 'product' AND post_title LIKE '%Old Brand%';

-- 3. Menambahkan prefix NIM untuk tabel mahasiswa
UPDATE mahasiswa 
SET nim = CONCAT('MHS-', nim) 
WHERE nim NOT LIKE 'MHS-%';

Contoh pertama berguna ketika Anda memindahkan aset gambar dari CDN lama ke CDN baru. Kolom meta_value di wp_postmeta sering menyimpan URL gambar, file, atau konfigurasi. Contoh kedua membantu rebranding produk WooCommerce tanpa harus mengedit satu per satu dari dashboard. Contoh ketiga menunjukkan bahwa untuk penambahan prefix, CONCAT lebih tepat daripada REPLACE, karena Anda tidak mengganti teks melainkan menambahkan di awal. Pemilihan fungsi yang tepat membuat query lebih jelas dan efisien.

Kombinasi REPLACE dengan CONCAT dan TRIM yang Powerful

Terkadang kebutuhan tidak sesederhana mengganti satu kata dengan kata lain. Anda mungkin perlu menambah prefix, menghapus spasi ganda, atau merapikan format. Kombinasikan fungsi REPLACE MySQL dengan CONCAT dan TRIM:

SQL Snippet SQL
-- Menambahkan kode negara ke nomor telepon yang belum berprefix 62
UPDATE kontak 
SET telepon = CONCAT('62', telepon) 
WHERE telepon NOT LIKE '62%';

-- Menghapus spasi ganda pada kolom nama
UPDATE users 
SET nama = TRIM(REPLACE(nama, ' ', ' ')) 
WHERE nama LIKE '% %';

-- Menggabungkan REPLACE bertingkat untuk normalisasi
SELECT TRIM(REPLACE(REPLACE(telepon, '-', ''), ' ', '')) AS telepon_bersih
FROM kontak;

Pada contoh kedua, REPLACE(nama, ‘ ‘, ‘ ‘) mengganti dua spasi menjadi satu spasi, lalu TRIM menghapus spasi di awal dan akhir. Pada contoh ketiga, dua REPLACE bersarang menghapus tanda hubung dan spasi sekaligus. Teknik bertingkat ini sangat berguna untuk pembersihan data impor dari Excel atau CSV yang sering mengandung format tidak konsisten. Dengan memahami komposisi fungsi, Anda bisa merapikan ribuan baris data hanya dengan satu query.

Perbedaan REPLACE, REPLACE INTO, dan INSERT ON DUPLICATE KEY UPDATE

Banyak pemula mengira REPLACE dan REPLACE INTO adalah hal yang sama. Padahal keduanya berbeda secara fundamental. Fungsi REPLACE(string, from_string, to_string) adalah fungsi string untuk manipulasi teks di dalam SELECT atau UPDATE, sedangkan REPLACE INTO adalah pernyataan DML yang menggabungkan DELETE dan INSERT.

SQL Snippet SQL
-- Fungsi string REPLACE: manipulasi teks
UPDATE wp_posts SET post_content = REPLACE(post_content, 'lama', 'baru') WHERE ID = 10;

-- Pernyataan REPLACE INTO: hapus lalu sisipkan
REPLACE INTO settings (key_name, value) 
VALUES ('site_name', 'Infanthree Digital');

-- Alternatif yang lebih aman: INSERT... ON DUPLICATE KEY UPDATE
INSERT INTO settings (key_name, value) 
VALUES ('site_name', 'Infanthree')
ON DUPLICATE KEY UPDATE value = VALUES(value);

REPLACE INTO bekerja dengan cara: jika ada baris dengan primary key atau unique key yang sama, baris lama dihapus terlebih dahulu, lalu baris baru disisipkan. Akibatnya, nilai auto-increment bisa berubah, trigger DELETE akan terpancing, dan foreign key bisa terpengaruh. Sebaliknya, INSERT… ON DUPLICATE KEY UPDATE hanya memperbarui kolom yang ditentukan tanpa menghapus baris, sehingga lebih aman untuk tabel dengan relasi. Tabel perbandingan:

AspekREPLACE (fungsi string)REPLACE INTOINSERT ON DUPLICATE KEY UPDATE
TujuanGanti substring di teksSisipkan atau ganti barisSisipkan atau update baris
MekanismeMengembalikan string baruDELETE lalu INSERTINSERT lalu UPDATE jika duplikat
Efek auto-incrementTidak adaID bisa berubahID tetap
TriggerTidak memicuMemicu DELETE+INSERTMemicu INSERT/UPDATE saja

Rekomendasi: gunakan fungsi REPLACE untuk pembersihan teks, dan gunakan INSERT… ON DUPLICATE KEY UPDATE untuk sinkronisasi data yang butuh insert-or-update. Hindari REPLACE INTO kecuali Anda benar-benar paham risikonya terhadap integritas data.

Keamanan: Mencegah SQL Injection dengan Prepared Statements

Ketika fungsi REPLACE MySQL dipanggil dari aplikasi PHP, jangan pernah menggabungkan input pengguna langsung ke dalam string query. Itu adalah celah SQL injection yang bisa membahayakan seluruh database. Selalu gunakan prepared statements dengan PDO:

PHP Snippet PHP
<?php
// Koneksi PDO
$pdo = new PDO('mysql:host=localhost;dbname=mydb;charset=utf8mb4', $user, $pass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$sql = "UPDATE wp_posts SET post_content = REPLACE(post_content, :old, :new) WHERE post_content LIKE :pattern";
$stmt = $pdo->prepare($sql);

$old_domain = 'domainlama.com';
$new_domain = 'domainbaru.com';

$stmt->execute([
 ':old' => $old_domain,
 ':new' => $new_domain,
 ':pattern' => '%'. $old_domain. '%'
]);

echo $stmt->rowCount(). " baris diperbarui.";
?>

Metode ini memisahkan data dari struktur SQL, sehingga input pengguna tidak bisa mengubah logika query. rowCount() berguna untuk memastikan berapa baris yang benar-benar berubah, yang bisa Anda tampilkan sebagai feedback di admin. Jangan menulis query dengan interpolasi seperti “REPLACE(post_content, ‘$old’, ‘$new’)” karena variabel $old bisa berisi karakter berbahaya. Pelajari cara kerja prepared statement di dokumentasi MySQL Prepared Statements dan praktik terbaik PDO di MySQL String Functions.

Tips Praktis dan Optimasi Fungsi REPLACE MySQL

  • Backup database dulu. Jalankan mysqldump atau Export dari phpMyAdmin sebelum UPDATE massal. Contoh: mysqldump -u user -p nama_database > backup.sql. Backup adalah jaring pengaman jika query menghasilkan data yang tidak diinginkan dan Anda perlu rollback cepat.
  • Uji dengan SELECT sebelum UPDATE. Jalankan SELECT ID, post_title, REPLACE(post_content, 'lama', 'baru') AS pratinjau FROM wp_posts WHERE post_content LIKE '%lama%' LIMIT 5; untuk melihat pratinjau tanpa mengubah data.
  • Perhatikan collation dan huruf besar/kecil. REPLACE bersifat case-sensitive tergantung collation kolom. ‘Old’ dan ‘old’ tidak dianggap sama pada collation bin. Periksa SHOW FULL COLUMNS FROM wp_posts jika hasilnya tidak sesuai harapan.
  • Gunakan LIMIT untuk tabel besar. Untuk tabel dengan jutaan baris, pecah proses menjadi batch seperti UPDATE wp_posts SET post_content = REPLACE(post_content, 'lama', 'baru') WHERE post_content LIKE '%lama%' LIMIT 1000; untuk menghindari lock lama dan timeout.
  • Hati-hati dengan trigger. Jika tabel memiliki trigger AFTER UPDATE, setiap baris yang diperbarui akan memicu trigger tersebut. Pastikan trigger tidak melakukan aksi yang tidak diinginkan, seperti mengirim email atau memperbarui tabel lain secara massal.

Latihan Praktik Fungsi REPLACE MySQL

  1. Soal: Buatlah query untuk mengganti semua URL gambar dari http:// ke https:// di tabel wp_posts kolom post_content.
    Jawaban: UPDATE wp_posts SET post_content = REPLACE(post_content, 'http://', 'https://') WHERE post_content LIKE '%http://%'; Tambahkan pratinjau SELECT terlebih dahulu untuk memastikan tidak ada URL yang salah ganti, terutama jika ada URL eksternal yang memang masih http.
  2. Soal: Tuliskan query untuk menambahkan prefix ‘ART-‘ ke semua judul postingan di tabel wp_posts yang belum memiliki prefix tersebut.
    Jawaban: UPDATE wp_posts SET post_title = CONCAT('ART-', post_title) WHERE post_title NOT LIKE 'ART-%'; Gunakan CONCAT bukan REPLACE karena Anda menambahkan di awal, bukan mengganti substring di tengah.
  3. Soal: Buat script PHP yang menerima input domain lama dan domain baru dari form HTML, lalu menjalankan query REPLACE dengan prepared statement dan menampilkan jumlah baris terpengaruh.
    Jawaban: Buat form dengan dua input text (old_domain, new_domain), validasi dengan filter_var atau regex domain, lalu gunakan PDO prepare seperti contoh di bagian keamanan. Tampilkan rowCount sebagai feedback dan catat ke log jika diperlukan.

Rangkuman Fungsi REPLACE MySQL

  1. Fungsi REPLACE MySQL mengganti semua kemunculan substring tertentu di dalam string dengan substring lain dan mengembalikan string baru tanpa mengubah data asli sampai disimpan dengan UPDATE.
  2. Sintaksnya adalah REPLACE(string, from_string, to_string) dengan tiga parameter wajib; jika from_string tidak ditemukan, string asli dikembalikan utuh.
  3. REPLACE sangat ideal untuk migrasi domain, pembersihan CDN, rebranding produk, dan normalisasi data massal, selalu gunakan WHERE LIKE untuk membatasi baris yang diproses agar hemat resource.
  4. Jangan samakan fungsi string REPLACE dengan pernyataan REPLACE INTO; REPLACE INTO menghapus lalu menyisipkan baris baru sehingga bisa mengubah auto-increment dan memicu trigger, sedangkan INSERT… ON DUPLICATE KEY UPDATE lebih aman.
  5. Selalu amankan pemanggilan REPLACE dari aplikasi dengan prepared statements PDO, lakukan backup dengan mysqldump, uji dengan SELECT pratinjau, perhatikan collation, dan gunakan LIMIT untuk tabel besar.

Dengan memahami fungsi REPLACE MySQL secara menyeluruh, Anda memiliki senjata ampuh untuk mengelola data dalam skala besar tanpa harus mengedit satu per satu melalui antarmuka admin. Mulai dari migrasi domain hingga pembersihan format, semua bisa dilakukan dalam hitungan detik dengan query yang tepat dan aman.

Hal yang sering ditanyakan seputar Apa Fungsi REPLACE pada MySQL Panduan Lengkap Penggantian Teks di Database

Apa itu fungsi REPLACE dalam MySQL dan bagaimana cara kerjanya?

Fungsi REPLACE MySQL adalah fungsi string bawaan yang menggantikan semua kemunculan substring tertentu dengan substring lain. Cara kerjanya adalah memindai string sumber dari awal hingga akhir, mencari setiap from_string, lalu menggantinya dengan to_string. Jika from_string tidak ditemukan, fungsi mengembalikan string asli tanpa perubahan.

Bagaimana cara menggunakan fungsi REPLACE untuk update massal data di MySQL?

Gunakan fungsi REPLACE dalam pernyataan UPDATE untuk mengganti teks secara massal, seperti: UPDATE tabel SET kolom = REPLACE(kolom, ‘teks_lama’, ‘teks_baru’); Ini memungkinkan penggantian banyak data sekaligus tanpa edit manual, menghemat waktu dan mengurangi risiko kesalahan.

Apakah fungsi REPLACE dalam MySQL bersifat case-sensitive?

Case-sensitivity fungsi REPLACE bergantung pada collation kolom yang digunakan. Pada collation default seperti utf8mb4_general_ci, perbandingan bersifat case-insensitive, sehingga REPLACE tidak membedakan huruf besar dan kecil dalam pencarian dan penggantian teks.

Bisakah fungsi REPLACE dikombinasikan dengan fungsi lain seperti CONCAT atau TRIM?

Ya, fungsi REPLACE bisa dikombinasikan dengan fungsi string lain untuk manipulasi data yang lebih kompleks. Contohnya, menggunakan CONCAT untuk menggabungkan string setelah replacement, atau TRIM untuk menghapus spasi ekstra sebelum atau sesudah penggantian teks.

Komentar

Memuat komentar…

Tinggalkan Komentar

Alamat email Anda tidak akan dipublikasikan.