java php laravel linux mysql sql bootstrap html css query java php laravel linux mysql sql bootstrap html css query

Tuesday, April 7, 2026

mysql string function concat length upper lower substring

๐Ÿ  Beranda Tutorial MySQL Artikel 18
๐ŸŸก Menengah ๐Ÿ—„️ Fungsi String ⏱️ 8 Menit Baca ๐Ÿ“š Seri 18/28

Fungsi String MySQL:
CONCAT, LENGTH, UPPER,
LOWER & SUBSTRING

Kuasai manipulasi teks di MySQL — dari menggabungkan nama hingga memformat data pelanggan — dengan 5 fungsi string yang wajib kamu tahu.

5
Fungsi SQL
12+
Contoh Query
8'
Menit Baca

Pernah nggak kamu menerima kiriman data dari tim lain, dan isinya berantakan banget? Nama produk ada yang huruf kapital semua, ada yang huruf kecil semua, bahkan ada yang dicampur asal-asalan. Sebagai orang yang harus mengolah data itu di database, kamu mau nangis ๐Ÿ˜ญ. Nah, di sinilah fungsi string MySQL hadir jadi penyelamat hidupmu!

Di artikel ke-18 dari seri 28 artikel Belajar Query SQL MySQL ini, kita akan bahas 5 fungsi string MySQL yang paling sering dipakai: CONCAT, LENGTH, UPPER, LOWER, dan SUBSTRING. Kelima fungsi ini adalah senjata andalan untuk memanipulasi dan memformat data teks langsung di dalam query — tanpa perlu buka Excel, tanpa perlu tulis kode Python dulu.

Kita akan praktik langsung menggunakan database toko online dengan tabel produk, pelanggan, dan pesanan. Jadi setiap contoh terasa nyata dan langsung bisa kamu adaptasi ke project kamu sendiri. Siap? Let's go! ๐Ÿš€

๐Ÿ’ก
Fakta Menarik

Menurut survei Stack Overflow Developer Survey, MySQL adalah database paling populer di dunia selama beberapa tahun berturut-turut. Dan di antara semua tipe fungsi MySQL, fungsi string adalah yang paling sering digunakan oleh developer dalam query sehari-hari — bahkan lebih sering dari fungsi agregasi seperti SUM dan COUNT!

๐Ÿ›’ Setup: Data Toko Online Kita

Sebelum masuk ke fungsi-fungsinya, kita buat dulu tabel dan data sampelnya. Kita akan pakai tabel produk dan pelanggan dengan data yang sengaja dibuat "kotor" supaya kita bisa latihan membersihkannya.

-- Buat tabel produk
CREATE TABLE produk (
  id_produk   INT PRIMARY KEY,
  nama_produk VARCHAR(100),
  kategori    VARCHAR(50),
  harga       DECIMAL(10,2)
);

-- Isi data (nama sengaja campur huruf besar-kecil)
INSERT INTO produk VALUES
(1, 'sepatu running ADIDAS',  'olahraga', 450000),
(2, 'KAOS POLO ralph lauren', 'fashion',  320000),
(3, 'tas ransel eiger',       'outdoor',  580000),
(4, 'jam tangan casio',       'aksesori', 275000),
(5, 'SEPATU BOOT safety',     'industri', 390000);

-- Buat tabel pelanggan
CREATE TABLE pelanggan (
  id_pelanggan INT PRIMARY KEY,
  nama_depan   VARCHAR(50),
  nama_belakang VARCHAR(50),
  email        VARCHAR(100),
  kota         VARCHAR(50)
);

INSERT INTO pelanggan VALUES
(1, 'budi',    'santoso',  'budi.s@gmail.com',    'Surabaya'),
(2, 'DEWI',    'RAHAYU',   'dewi.r@yahoo.com',    'Jakarta'),
(3, 'Ahmad',   'Fauzi',    'ahmad.f@gmail.com',   'Bandung'),
(4, 'siti',    'NURHALIZA','siti.n@hotmail.com',  'Medan'),
(5, 'RIZKY',   'pratama',  'rizky.p@gmail.com',   'Yogyakarta');

๐Ÿ”— 1. CONCAT — Menggabungkan Teks

Bayangkan kamu punya dua lembar kertas, satu berisi nama depan, satu lagi nama belakang. Fungsi fungsi string MySQL CONCAT() ibarat lem kertas — ia menempelkan dua atau lebih string menjadi satu. Simpel tapi powerful banget!

-- Sintaks dasar CONCAT
CONCAT(string1, string2, string3, ...)

-- Contoh: gabungkan nama depan + spasi + nama belakang
SELECT
  id_pelanggan,
  CONCAT(nama_depan, ' ', nama_belakang) AS nama_lengkap,
  email,
  kota
FROM pelanggan;

๐Ÿ“Š Hasil Query:

id_pelanggan nama_lengkap email kota
1budi santosobudi.s@gmail.comSurabaya
2DEWI RAHAYUdewi.r@yahoo.comJakarta
3Ahmad Fauziahmad.f@gmail.comBandung
4siti NURHALIZAsiti.n@hotmail.comMedan
5RIZKY pratamarizky.p@gmail.comYogyakarta
๐Ÿ’Ž Tip Praktis

Kalau salah satu value-nya NULL, hasil CONCAT juga jadi NULL! Gunakan CONCAT_WS(separator, str1, str2) sebagai alternatif — fungsi ini secara otomatis mengabaikan nilai NULL dan lebih aman untuk production.

-- Membuat label produk: "Rp 450.000 | sepatu running ADIDAS"
SELECT
  nama_produk,
  CONCAT('Rp ', FORMAT(harga, 0, 'id_ID'), ' | ', kategori) AS label_produk
FROM produk;

๐Ÿ“ 2. LENGTH & CHAR_LENGTH — Mengukur Panjang Teks

Analoginya gampang: kalau kamu mau tahu berapa meter panjang pita pembungkus hadiah, kamu butuh penggaris. Nah, LENGTH() adalah "penggaris" untuk string di MySQL — ia menghitung jumlah byte, sedangkan CHAR_LENGTH() menghitung jumlah karakter.

⚠️ Penting Diketahui

Untuk teks berbahasa Indonesia yang menggunakan karakter UTF-8, LENGTH() bisa memberi hasil berbeda dari CHAR_LENGTH(). Contoh: karakter "รฉ" adalah 1 karakter tapi 2 byte. Gunakan CHAR_LENGTH() untuk kebutuhan validasi panjang teks yang lebih akurat.

-- Hitung panjang nama produk + filter nama yang terlalu panjang
SELECT
  id_produk,
  nama_produk,
  CHAR_LENGTH(nama_produk)  AS jumlah_karakter,
  LENGTH(nama_produk)       AS jumlah_byte
FROM produk
ORDER BY jumlah_karakter DESC;

๐Ÿ“Š Hasil Query:

id_produk nama_produk jumlah_karakter jumlah_byte
2KAOS POLO ralph lauren2222
5SEPATU BOOT safety1919
1sepatu running ADIDAS2121
3tas ransel eiger1616
4jam tangan casio1616

๐Ÿ”ก 3. UPPER & LOWER — Standarisasi Huruf Besar/Kecil

Ini adalah fungsi string MySQL yang paling sering jadi "pemadam kebakaran" di dunia nyata. Coba bayangkan kamu punya tabel pelanggan yang data nama-nya campur aduk — ada yang nulis "BUDI", ada "budi", ada "Budi". Tanpa UPPER/LOWER, kamu akan punya masalah besar saat melakukan pencarian atau pencocokan data.

UPPER() mengubah semua karakter jadi HURUF KAPITAL, sementara LOWER() mengubah semuanya jadi huruf kecil. Sesederhana itu, tapi dampaknya luar biasa untuk konsistensi data.

-- Standarisasi nama produk: semua jadi huruf besar
SELECT
  id_produk,
  nama_produk                     AS nama_asli,
  UPPER(nama_produk)              AS nama_upper,
  LOWER(nama_produk)              AS nama_lower
FROM produk;

-- Kasus nyata: pencarian tidak peduli huruf besar/kecil
SELECT * FROM produk
WHERE LOWER(nama_produk) LIKE '%sepatu%';

๐Ÿ“Š Hasil Query (UPPER & LOWER):

id_produk nama_asli nama_upper nama_lower
1sepatu running ADIDASSEPATU RUNNING ADIDASsepatu running adidas
2KAOS POLO ralph laurenKAOS POLO RALPH LAURENkaos polo ralph lauren
3tas ransel eigerTAS RANSEL EIGERtas ransel eiger
4jam tangan casioJAM TANGAN CASIOjam tangan casio
5SEPATU BOOT safetySEPATU BOOT SAFETYsepatu boot safety
✅ Tips & Insight

Jangan langsung UPDATE data asli di tabel! Gunakan UPPER/LOWER di query SELECT dulu untuk preview hasilnya. Kalau sudah yakin, baru jalankan UPDATE produk SET nama_produk = UPPER(nama_produk) untuk mengubah data permanen. Selalu backup dulu sebelum mass update!

✂️ 4. SUBSTRING — Memotong Teks

Kalau CONCAT adalah "lem", maka SUBSTRING() adalah "gunting". Fungsi ini memotong dan mengambil sebagian teks dari posisi tertentu. Sangat berguna untuk mengekstrak kode produk, inisial nama, domain email, dan masih banyak lagi.

-- Sintaks SUBSTRING
SUBSTRING(string, posisi_awal, panjang)
--          ↑         ↑           ↑
--        teks    mulai di     ambil berapa
--                karakter ke- karakter

-- Contoh: ambil 3 huruf pertama nama kategori sebagai kode
SELECT
  id_produk,
  nama_produk,
  kategori,
  UPPER(SUBSTRING(kategori, 1, 3))   AS kode_kategori,
  SUBSTRING(nama_produk, 1, 10)      AS nama_singkat
FROM produk;

-- Ekstrak domain dari email pelanggan
SELECT
  nama_depan,
  email,
  SUBSTRING(email, LOCATE('@', email) + 1)  AS domain_email
FROM pelanggan;

๐Ÿ“Š Hasil Query (kode kategori + nama singkat):

id_produk nama_produk kategori kode_kategori nama_singkat
1sepatu running ADIDASolahragaOLAsepatu run
2KAOS POLO ralph laurenfashionFASKAOS POLO
3tas ransel eigeroutdoorOUTtas ransel
4jam tangan casioaksesoriAKSjam tangan
5SEPATU BOOT safetyindustriINDSEPATU BOO

๐Ÿงช Panduan Praktikum: Query Kombinasi Fungsi String MySQL

Sekarang kita gabungkan semua fungsi dalam satu skenario nyata: membuat laporan kartu pelanggan yang rapi dan terstandarisasi. Ikuti langkah-langkah berikut satu per satu.

1

Buat nama lengkap terstandar (Title Case)

Gabungkan nama depan dan belakang dengan CONCAT, lalu konversi ke UPPER untuk konsistensi.

-- Langkah 1: Nama lengkap dalam huruf kapital semua
SELECT
  id_pelanggan,
  UPPER(CONCAT(nama_depan, ' ', nama_belakang)) AS nama_lengkap
FROM pelanggan;
2

Buat kode ID pelanggan dari inisial + ID

Kombinasi SUBSTRING dan CONCAT untuk membuat kode unik pelanggan.

-- Langkah 2: Kode pelanggan = "PLG-" + inisial + ID
SELECT
  id_pelanggan,
  CONCAT(
    'PLG-',
    UPPER(SUBSTRING(nama_depan, 1, 1)),
    UPPER(SUBSTRING(nama_belakang, 1, 1)),
    LPAD(id_pelanggan, 3, '0')
  ) AS kode_pelanggan,
  nama_depan, nama_belakang
FROM pelanggan;
3

Standarisasi email ke huruf kecil

Email selalu lowercase — cegah duplikasi data dengan LOWER().

-- Langkah 3: Email distandarkan ke lowercase
SELECT
  id_pelanggan,
  LOWER(email)               AS email_standar,
  CHAR_LENGTH(email)         AS panjang_email
FROM pelanggan
WHERE CHAR_LENGTH(email) BETWEEN 10 AND 50;
4

Gabungkan semua: Query Kartu Pelanggan Final

Ini dia query pamungkasnya — semua fungsi digabung dalam satu SELECT!

-- Langkah 4: Laporan kartu pelanggan lengkap
SELECT
  CONCAT(
    'PLG-',
    UPPER(SUBSTRING(nama_depan, 1, 1)),
    UPPER(SUBSTRING(nama_belakang, 1, 1)),
    LPAD(id_pelanggan, 3, '0')
  )                                             AS kode_pelanggan,
  UPPER(CONCAT(nama_depan, ' ', nama_belakang)) AS nama_lengkap,
  LOWER(email)                                  AS email,
  UPPER(kota)                                   AS kota,
  CHAR_LENGTH(
    CONCAT(nama_depan, ' ', nama_belakang)
  )                                             AS panjang_nama
FROM pelanggan
ORDER BY nama_depan ASC;

๐Ÿ“‹ Tabel Ringkasan: 5 Fungsi String MySQL

Berikut ringkasan lengkap kelima fungsi string MySQL yang sudah kita pelajari hari ini. Jadikan ini sebagai cheat sheet kamu!

Fungsi Kegunaan Contoh Penggunaan Return Value
CONCAT() Menggabungkan 2+ string CONCAT('A', ' ', 'B') 'A B'
LENGTH() Hitung jumlah byte LENGTH('Halo') 4
CHAR_LENGTH() Hitung jumlah karakter CHAR_LENGTH('Halo') 4
UPPER() Ubah ke huruf kapital UPPER('halo') 'HALO'
LOWER() Ubah ke huruf kecil LOWER('HALO') 'halo'
SUBSTRING() Potong/ambil sebagian teks SUBSTRING('Halo',1,2) 'Ha'
๐Ÿง  Tips dari Lapangan #1

Jangan takut nesting fungsi! Di MySQL, kamu bisa menaruh fungsi di dalam fungsi, seperti UPPER(SUBSTRING(nama, 1, 1)). Ini sangat powerful. Tapi jangan berlebihan — kalau sudah lebih dari 3 level nesting, pertimbangkan untuk memecah query jadi beberapa langkah atau pakai subquery agar tetap mudah dibaca.

๐Ÿ”ฅ Tips dari Lapangan #2

Fungsi string di WHERE clause bisa memperlambat query! Ketika kamu menggunakan WHERE LOWER(email) = 'budi@gmail.com', MySQL tidak bisa memanfaatkan index pada kolom email secara optimal. Solusinya: simpan data yang sudah distandarkan sejak awal, atau gunakan functional index di MySQL 8.0+. Performa database sama pentingnya dengan kebenaran hasil query!

๐ŸŽฏ Kesimpulan

Kita sudah menjelajahi 5 fungsi string MySQL yang wajib ada di toolkit kamu:

  • CONCAT() — menggabungkan string, cocok untuk membuat label, nama lengkap, atau kode unik
  • LENGTH() & CHAR_LENGTH() — mengukur panjang teks, penting untuk validasi input
  • UPPER() — standarisasi ke huruf kapital, ideal untuk kode dan header
  • LOWER() — standarisasi ke huruf kecil, wajib untuk email dan username
  • SUBSTRING() — mengambil potongan teks dari posisi tertentu, serbaguna untuk ekstraksi data

Ingat ya, data yang kotor dan tidak konsisten adalah musuh nyata seorang data engineer dan developer. Dengan menguasai fungsi string MySQL ini, kamu sudah punya "senjata" untuk membersihkan dan memformat data langsung di level database — lebih efisien, lebih cepat, dan lebih profesional! ๐Ÿ’ช

๐Ÿ‘‡ Yuk ikut diskusi!

Ada fungsi string MySQL favorit kamu yang belum kita bahas? Atau punya kasus unik saat membersihkan data di project kamu? Ceritakan di kolom komentar! Jangan lupa share artikel ini ke teman sekelas yang lagi belajar MySQL juga. Makin banyak yang belajar bareng, makin seru! ๐Ÿš€

๐Ÿ’ฌ Tinggalkan Komentar ๐Ÿ“Œ Bookmark Artikel Ini
๐Ÿ“š Artikel Selanjutnya dalam Seri

Artikel 19/28: Fungsi Date & Time MySQL — NOW, DATE_FORMAT, DATEDIFF

Setelah mahir memanipulasi teks, saatnya kuasai tanggal dan waktu! Di artikel berikutnya kita akan belajar cara menghitung umur data, memformat tanggal pesanan, dan mencari transaksi berdasarkan rentang waktu.

Baca Artikel Berikutnya →
Tags: MySQL SQL Database Query Tutorial fungsi string MySQL Toko Online Pemula

script delete truncate mysql


Beranda Tutorial MySQL Artikel 17
๐ŸŸก Menengah ๐Ÿ—„️ Data Manipulation ⏱ 8 Menit Baca ๐Ÿ“Œ Seri 17 dari 28

Menghapus Data: Perintah DELETE dan TRUNCATE

Panduan lengkap menguasai dua senjata ampuh untuk membersihkan data di MySQL — tahu kapan pakai yang mana bisa menyelamatkan database-mu!

2
Perintah SQL
12
Contoh Query
8
Menit Baca

Pernah nggak kamu nyimpan tumpukan data sampah di lemari, terus bingung mau bersihin dari mana? Nah, di dunia database MySQL, masalah yang sama bisa terjadi — tabel penuh data yang sudah tidak relevan, entri duplikat, atau sisa uji coba yang perlu disingkirkan. Di sinilah dua perintah legendaris hadir: DELETE dan TRUNCATE. Kalau kamu sudah sampai di artikel ke-17 dari seri 28 artikel Belajar Query SQL MySQL ini, berarti kamu sudah serius tuh!

Memahami DELETE TRUNCATE MySQL bukan sekadar hafalan sintaks — ini tentang keselamatan data-mu. Salah pilih perintah, bisa-bisa data yang harusnya dipertahankan malah ikut hilang. Di artikel ini, kita akan bedah keduanya sampai ke akar, lengkap dengan contoh studi kasus toko online, perbandingan head-to-head, dan tips praktis yang langsung bisa kamu terapkan. Let's go! ๐Ÿš€

⚡ Fakta Menarik

Menurut survei Stack Overflow Developer Survey, SQL masih menjadi salah satu bahasa yang paling banyak digunakan oleh developer di seluruh dunia — dan perintah DELETE adalah salah satu yang paling sering menyebabkan "oops moment" di production! Satu perintah DELETE tanpa klausa WHERE bisa menghapus ribuan baris data dalam hitungan detik. Itulah kenapa DBA (Database Administrator) profesional selalu bilang: "Think twice before you DELETE."

๐Ÿ—‘️ Perintah DELETE: Hapus Data dengan Presisi

Bayangkan kamu punya buku catatan pesanan toko online. Kamu ingin menghapus catatan pesanan tertentu yang sudah dibatalkan — bukan semua catatan, hanya yang spesifik. Itulah fungsi utama perintah DELETE di MySQL: menghapus baris tertentu dari tabel berdasarkan kondisi yang kamu tentukan.

๐Ÿ“‹ Sintaks DELETE
DELETE FROM nama_tabel
WHERE kondisi;

-- Keterangan:
-- DELETE FROM  → perintah untuk menghapus baris
-- nama_tabel   → tabel target yang datanya mau dihapus
-- WHERE        → filter kondisi (WAJIB ADA, kecuali mau hapus semua!)
-- kondisi      → kriteria baris yang akan dihapus

Misalkan kita punya tabel pesanan di toko online kita. Ada pesanan dengan status "dibatalkan" yang ingin dihapus dari sistem:

๐Ÿ“Š Data awal tabel pesanan:

id_pesanan id_pelanggan total status
1101Rp 250.000selesai
2102Rp 175.000dibatalkan
3103Rp 320.000diproses
4104Rp 90.000dibatalkan
๐Ÿ’ป Query SQL
DELETE FROM pesanan
WHERE status = 'dibatalkan';

-- Menghapus semua pesanan dengan status 'dibatalkan'
-- Output: Query OK, 2 rows affected

๐Ÿ“Š Hasil setelah DELETE:

id_pesanan id_pelanggan total status
1101Rp 250.000selesai
3103Rp 320.000diproses
๐Ÿ’ก Tip Praktis

Sebelum menjalankan DELETE, coba jalankan dulu SELECT * FROM pesanan WHERE status = 'dibatalkan' untuk memastikan baris yang akan terhapus sesuai ekspektasi. Anggap ini seperti "preview" sebelum kamu pencet tombol hapus. Kebiasaan kecil ini bisa menyelamatkan kamu dari banyak drama di masa depan!

DELETE dengan LIMIT — Kontrol Lebih Ketat

MySQL juga memungkinkan kamu menambahkan LIMIT pada DELETE, sehingga hanya sejumlah baris tertentu yang akan dihapus. Berguna saat kamu mau hapus data secara bertahap (batching) untuk menghindari lock tabel di production.

DELETE FROM pesanan
WHERE status = 'dibatalkan'
LIMIT 1;

-- Hanya menghapus 1 baris pertama yang memenuhi kondisi
-- Output: Query OK, 1 row affected

๐Ÿงน Perintah TRUNCATE: Reset Total Isi Tabel

Kalau DELETE itu ibarat menghapus halaman tertentu dari buku catatan, maka TRUNCATE itu seperti langsung merobek semua halaman isinya — tapi bukunya (struktur tabel) tetap ada. TRUNCATE menghapus semua baris dalam tabel sekaligus, cepat, dan efisien. Cocok untuk skenario seperti mengosongkan tabel log sementara, data testing, atau cache yang perlu di-reset total.

๐Ÿ“‹ Sintaks TRUNCATE
TRUNCATE TABLE nama_tabel;

-- Keterangan:
-- TRUNCATE TABLE → perintah untuk mengosongkan tabel
-- nama_tabel    → tabel yang ingin dikosongkan
-- Tidak ada WHERE — semua baris terhapus!
-- AUTO_INCREMENT akan di-reset ke 1

Contoh: kita punya tabel keranjang_temp yang menyimpan data keranjang belanja sementara (session). Setiap hari, data ini perlu dikosongkan:

๐Ÿ“Š Data tabel keranjang_temp sebelum TRUNCATE:

id id_produk jumlah session_id
1P0012abc123
2P0051def456
3P0025ghi789
TRUNCATE TABLE keranjang_temp;

-- Seluruh isi tabel terhapus seketika
-- Output: Query OK, 0 rows affected (eksekusi super cepat!)
-- AUTO_INCREMENT id akan kembali mulai dari 1

๐Ÿ“Š Hasil setelah TRUNCATE:

id id_produk jumlah session_id
Tidak ada data (Empty set)
⚠️ Peringatan Penting

TRUNCATE tidak bisa di-rollback jika kamu tidak menggunakan transaksi (dan pada banyak storage engine, bahkan transaksi pun tidak membantu). Selain itu, TRUNCATE juga tidak bisa digunakan pada tabel yang memiliki foreign key constraint yang aktif. Kalau kamu mencoba TRUNCATE tabel induk yang direferensikan tabel lain, MySQL akan melempar error. Selalu cek relasi tabel sebelum TRUNCATE!

⚔️ DELETE vs TRUNCATE MySQL: Kapan Pakai yang Mana?

Pertanyaan paling sering muncul ketika belajar DELETE TRUNCATE MySQL adalah: "Kapan sih aku harus pilih DELETE dan kapan pakai TRUNCATE?" Jawabannya tergantung skenario. Mari kita bedah perbedaan keduanya secara lengkap dalam tabel perbandingan berikut.

Aspek DELETE TRUNCATE
Jenis Perintah DML (Data Manipulation Language) DDL (Data Definition Language)
Filter Kondisi ✅ Bisa dengan WHERE ❌ Tidak ada WHERE
Kecepatan ๐Ÿข Lebih lambat (row by row) ๐Ÿš€ Sangat cepat (drop & recreate)
ROLLBACK ✅ Bisa di-rollback dalam transaksi ⚠️ Umumnya tidak bisa di-rollback
AUTO_INCREMENT Tidak di-reset (lanjut dari terakhir) Di-reset ke 1
Trigger ✅ Mengaktifkan DELETE trigger ❌ Tidak mengaktifkan trigger
Foreign Key Diperiksa per baris Error jika ada FK aktif
Penggunaan Ideal Hapus sebagian data spesifik Kosongkan tabel sepenuhnya
Log Transaksi Dicatat tiap baris Minimal (lebih hemat log)

๐Ÿ›’ Studi Kasus Toko Online: Praktik Nyata DELETE & TRUNCATE

Sekarang kita masuk ke skenario nyata. Bayangkan kamu adalah developer yang membangun sistem manajemen toko online. Ada beberapa situasi yang memerlukan operasi penghapusan data. Mari kita selesaikan satu per satu.

Skenario 1: Hapus produk yang sudah tidak dijual

-- Hapus produk dengan stok 0 dan status tidak aktif
DELETE FROM produk
WHERE stok = 0 AND status = 'nonaktif';

-- Output: Query OK, 3 rows affected

Skenario 2: Hapus pelanggan yang belum terverifikasi lebih dari 30 hari

-- Hapus akun pelanggan belum verifikasi lebih dari 30 hari
DELETE FROM pelanggan
WHERE is_verified = 0
  AND tgl_daftar < DATE_SUB(NOW(), INTERVAL 30 DAY);

-- Output: Query OK, 7 rows affected

Skenario 3: Reset tabel log aktivitas harian

-- Reset total tabel log harian (jalankan tiap tengah malam)
TRUNCATE TABLE log_aktivitas_harian;

-- Lebih cepat dari DELETE, ID mulai dari 1 lagi besok
-- Output: Query OK, 0 rows affected
⚠️ Jangan Lakukan Ini!

DELETE FROM pelanggan; tanpa WHERE akan menghapus semua pelanggan dalam satu perintah. Ini adalah salah satu kesalahan paling fatal yang bisa terjadi di production. Selalu pastikan klausa WHERE ada sebelum eksekusi, atau gunakan TRUNCATE jika memang niat mengosongkan tabel.

๐Ÿ“‹ Step-by-Step: Praktikum DELETE & TRUNCATE

1

Buat database dan tabel latihan

CREATE DATABASE toko_latihan;
USE toko_latihan;

CREATE TABLE produk (
  id INT AUTO_INCREMENT PRIMARY KEY,
  nama VARCHAR(100),
  stok INT,
  status ENUM('aktif','nonaktif')
);
2

Isi tabel dengan data contoh

INSERT INTO produk (nama, stok, status) VALUES
('Kaos Polos', 50, 'aktif'),
('Sepatu Lama', 0, 'nonaktif'),
('Topi Bucket', 30, 'aktif'),
('Tas Rusak', 0, 'nonaktif');
3

Preview dulu dengan SELECT

-- Selalu preview sebelum hapus!
SELECT * FROM produk
WHERE stok = 0 AND status = 'nonaktif';
4

Eksekusi DELETE dengan kondisi

DELETE FROM produk
WHERE stok = 0 AND status = 'nonaktif';

-- Verifikasi hasil
SELECT * FROM produk;
5

Coba TRUNCATE dan lihat perbedaan AUTO_INCREMENT

TRUNCATE TABLE produk;

-- Insert ulang dan lihat id mulai dari 1 lagi
INSERT INTO produk (nama, stok, status)
VALUES ('Produk Baru', 100, 'aktif');

SELECT * FROM produk;
-- id akan bernilai 1, bukan 5 atau 6!
✅ Tips dari Trainer Lapangan #1

Di production, selalu bungkus operasi DELETE dengan transaksi (BEGIN / COMMIT / ROLLBACK). Jika sesuatu berjalan tidak sesuai harapan, kamu bisa rollback sebelum COMMIT. Ini adalah jaring pengaman yang akan kamu syukuri suatu hari nanti. Contoh: BEGIN; DELETE FROM ... WHERE ...; SELECT ROW_COUNT(); ROLLBACK; — jalankan SELECT dulu untuk cek jumlah baris yang terdampak, baru COMMIT kalau sudah yakin.

๐Ÿ’œ Tips dari Trainer Lapangan #2

Untuk tabel besar (jutaan baris), hindari DELETE atau TRUNCATE langsung di jam sibuk. Gunakan strategi "soft delete" — tambahkan kolom is_deleted TINYINT DEFAULT 0 dan tandai baris sebagai dihapus tanpa benar-benar menghapusnya. Penghapusan fisik bisa dijadwalkan via cron job di luar jam operasional. Pendekatan ini banyak dipakai di sistem e-commerce skala besar.

๐ŸŽฏ Kesimpulan

  • DELETE menghapus baris spesifik menggunakan klausa WHERE — cocok untuk penghapusan selektif dan bisa di-rollback.
  • TRUNCATE mengosongkan seluruh isi tabel sekaligus, sangat cepat, dan me-reset AUTO_INCREMENT.
  • DELETE adalah perintah DML, sedangkan TRUNCATE adalah DDL — perbedaan ini penting untuk memahami perilaku transaksi keduanya.
  • Selalu preview dengan SELECT sebelum DELETE untuk memastikan data yang akan dihapus sudah benar.
  • TRUNCATE tidak bisa digunakan pada tabel dengan foreign key constraint yang aktif.
  • Gunakan transaksi sebagai jaring pengaman pada operasi DELETE di environment production.

Menguasai DELETE TRUNCATE MySQL adalah bagian penting dari menjadi developer yang tidak hanya bisa menulis data, tapi juga tahu cara mengelola "kebersihan" database. Ingat, data yang tidak dikelola dengan baik adalah utang teknis yang akan menyusahkan masa depan. Jadi, hapuslah dengan bijak! ๐Ÿ’ช

๐Ÿ“– Artikel Selanjutnya dalam Seri

Artikel 18/28: Transaksi MySQL — BEGIN, COMMIT, dan ROLLBACK

Pelajari bagaimana MySQL mengelompokkan beberapa operasi SQL menjadi satu unit kerja yang aman — dan bagaimana membatalkannya jika terjadi kesalahan di tengah jalan.

Baca Artikel 18 →
#MySQL #SQL #Database #Query #Tutorial #DELETE TRUNCATE MySQL

script update mysql

Beranda Tutorial MySQL Artikel 16

Memperbarui Data:
Perintah UPDATE dan SET

๐ŸŸก Level Menengah ๐Ÿ—„️ MySQL / SQL ⏱️ 8 Menit Baca ๐Ÿ“˜ Seri 16 dari 28
7
Perintah SQL
10+
Contoh Query
8
Menit Baca

Bayangkan kamu punya buku catatan harga produk di toko online-mu, dan tiba-tiba ada diskon besar-besaran. Masa kamu harus hapus semua data lama terus isi ulang dari awal? Tentu tidak! Di sinilah keajaiban UPDATE SET MySQL bekerja — perintah yang memungkinkan kamu mengubah data yang sudah ada tanpa perlu menghapus dan mengisi ulang satu per satu.

Selamat datang di Artikel ke-16 dari 28 Seri Belajar Query SQL MySQL! Di sini kita akan bahas tuntas cara pakai perintah UPDATE dan SET — dua sahabat karib yang jadi andalan setiap developer database.

Di artikel ini kamu akan belajar: sintaks dasar UPDATE SET, cara update satu atau banyak kolom sekaligus, update dengan kondisi WHERE, teknik update banyak baris, dan jebakan-jebakan berbahaya yang wajib dihindari. Studi kasus menggunakan database toko online — produk, pelanggan, dan pesanan — supaya lebih relate dengan dunia nyata. Langsung gas!

Fakta Menarik tentang Perintah UPDATE!

Menurut survei Stack Overflow Developer Survey, operasi UPDATE adalah salah satu dari 3 perintah SQL yang paling sering digunakan dalam aplikasi produksi. Di platform e-commerce besar, ribuan query UPDATE dieksekusi setiap detik — mulai dari update stok produk, status pesanan, hingga poin reward pelanggan. Bayangkan: satu bug pada perintah UPDATE tanpa WHERE bisa mengubah seluruh data dalam tabel sekaligus!

1. Mengenal Sintaks Dasar UPDATE SET MySQL

Kalau INSERT itu seperti menulis entri baru di buku catatan, maka UPDATE SET MySQL adalah seperti menghapus tulisan dengan penghapus dan menulis ulang di tempat yang sama. Data lamanya pergi, digantikan data baru — tapi baris-nya tetap ada di tempat yang sama.

๐Ÿ“‹ Sintaks Lengkap UPDATE SET

UPDATE nama_tabel
SET    kolom1 = nilai_baru1,  -- kolom yang ingin diubah
       kolom2 = nilai_baru2,  -- bisa update banyak kolom sekaligus
       kolom3 = nilai_baru3
WHERE  kondisi;               -- ⚠️ WAJIB! tanpa ini semua baris berubah!

Mari langsung praktik. Misalkan kita punya tabel produk di toko online kita seperti ini:

id_produk nama_produk harga stok kategori
1 Sepatu Lari Nike 850000 50 Olahraga
2 Kaos Polos Hitam 120000 200 Fashion
3 Laptop Asus VivoBook 7500000 15 Elektronik
4 Tas Ransel Canvas 275000 80 Aksesoris

Sekarang kita mau update harga Sepatu Lari Nike dari 850.000 menjadi 799.000 (lagi diskon!):

UPDATE produk
SET    harga = 799000
WHERE  id_produk = 1;

Output MySQL: Query OK, 1 row affected

๐Ÿ’ก Tip Praktis

Sebelum eksekusi UPDATE, coba jalankan dulu query SELECT * FROM produk WHERE id_produk = 1 untuk memastikan kamu menyasar baris yang tepat. Ini kebiasaan developer pro yang sering diabaikan pemula!

2. UPDATE SET MySQL untuk Banyak Kolom Sekaligus

Analoginya begini: kalau kamu mau renovasi kamar, lebih efisien ganti cat tembok, ganti karpet, DAN ganti lampu sekaligus dalam satu hari kerja — bukan tiga hari kerja terpisah. Begitu juga di MySQL, kamu bisa update beberapa kolom sekaligus dalam satu perintah UPDATE SET dengan memisahkan setiap pasangan kolom-nilai menggunakan tanda koma.

๐Ÿ“ Update Harga + Stok Laptop Sekaligus

UPDATE produk
SET    harga    = 6999000,   -- turunkan harga
       stok     = 20,        -- tambah stok
       kategori = 'Komputer' -- ubah kategori
WHERE  id_produk = 3;

Hasil setelah query dieksekusi:

id_produk nama_produk harga stok kategori
3 Laptop Asus VivoBook 6999000 ✓ 20 ✓ Komputer ✓

Bonus keren: di kolom SET, kamu bisa pakai ekspresi matematika! Misalnya, kamu mau kurangi stok Kaos Polos saat ada order masuk:

-- Kurangi stok 5 unit saat ada pesanan
UPDATE produk
SET    stok = stok - 5  -- nilai lama dikurangi 5
WHERE  id_produk = 2;

-- Naikkan harga semua produk Fashion 10%
UPDATE produk
SET    harga = harga * 1.10
WHERE  kategori = 'Fashion';

⚠️ Peringatan Penting!

Saat update menggunakan ekspresi seperti stok = stok - 5, pastikan nilai stok tidak akan menjadi negatif! Tambahkan kondisi AND stok >= 5 di klausa WHERE untuk mencegah stok minus.

3. UPDATE SET dengan Kondisi WHERE yang Lebih Kompleks

Klausa WHERE di perintah UPDATE SET MySQL bisa sekompleks kondisi pada query SELECT — bisa pakai AND, OR, IN, BETWEEN, bahkan subquery! Anggap aja WHERE itu seperti filter di aplikasi e-commerce — kamu bisa makin spesifik milih produk yang mau diubah.

Beberapa contoh kondisi WHERE yang sering dipakai di kasus toko online:

-- 1. Update status pesanan dengan IN
UPDATE pesanan
SET    status = 'Dikirim'
WHERE  id_pesanan IN (101, 102, 105, 110);

-- 2. Update poin pelanggan yang belanja bulan ini
UPDATE pelanggan
SET    poin = poin + 100
WHERE  tanggal_daftar BETWEEN '2024-01-01' AND '2024-01-31';

-- 3. Update stok yang hampir habis (< 10) dan mahal (> 1jt)
UPDATE produk
SET    stok = stok + 50
WHERE  stok < 10
  AND  harga > 1000000;

-- 4. Update menggunakan LIKE untuk nama produk tertentu
UPDATE produk
SET    kategori = 'Sport & Lifestyle'
WHERE  nama_produk LIKE '%Nike%'
   OR  nama_produk LIKE '%Adidas%';

Contoh: Update status pesanan tabel pesanan:

id_pesanan id_pelanggan total status (sebelum) status (sesudah)
101 C001 850.000 Diproses Dikirim ✓
102 C003 120.000 Diproses Dikirim ✓
103 C002 275.000 Pending Pending (tidak berubah)

๐Ÿ’ก Tip Praktis — Safe Update Mode

MySQL punya fitur safe update mode. Kalau kamu dapat error "Error Code: 1175", itu tandanya MySQL memproteksi kamu dari UPDATE tanpa primary key di WHERE. Bisa dinonaktifkan sementara dengan: SET SQL_SAFE_UPDATES = 0; — tapi gunakan dengan bijak ya!

4. Jebakan Berbahaya: UPDATE Tanpa WHERE dan Cara Mitigasinya

Ini bagian yang wajib dihapal sampai mimpi. Coba bayangkan kamu bekerja di tim dev startup, jam 11 malam, lagi buru-buru deploy hotfix — terus tanpa sadar kamu eksekusi:

๐Ÿšจ QUERY MEMATIKAN — JANGAN DIJALANKAN DI PRODUCTION!

UPDATE produk
SET    harga = 0;
-- ☠️ Tanpa WHERE = SEMUA produk harganya jadi 0!
-- Toko online kamu barusan rugi miliaran rupiah.

Untuk mencegah skenario horor itu, ada beberapa strategi yang bisa kamu terapkan:

-- STRATEGI 1: Selalu gunakan transaction
START TRANSACTION;
  UPDATE produk SET harga = 0;  -- oh tidak!
ROLLBACK;  -- data kembali seperti semula, selamat!

-- STRATEGI 2: SELECT dulu sebelum UPDATE
-- Pastikan WHERE-mu sudah benar
SELECT * FROM produk WHERE kategori = 'Elektronik';
-- Baru setelah yakin, jalankan UPDATE
UPDATE produk
SET    harga = harga * 0.9
WHERE  kategori = 'Elektronik';

-- STRATEGI 3: Gunakan LIMIT untuk batasi jumlah baris
UPDATE produk
SET    stok = 0
WHERE  kategori = 'Elektronik'
LIMIT  1;  -- hanya 1 baris yang berubah, aman!

๐Ÿ”ฅ Insight dari Lapangan

Senior developer biasanya punya SOP ketat: setiap query UPDATE di production harus dibungkus dalam transaction, dan wajib ada peer review sebelum dieksekusi. Kebiasaan ini menghemat ribuan jam kerja perbaikan data yang corrupt. Mulai terapkan dari sekarang, meski untuk project kecil!

๐Ÿ› ️ Step-by-Step: Praktikum UPDATE di Toko Online

1

Buat tabel dan isi data awal

Siapkan tabel produk dengan beberapa baris data sample menggunakan INSERT.

CREATE TABLE produk (
  id_produk    INT PRIMARY KEY AUTO_INCREMENT,
  nama_produk  VARCHAR(100),
  harga        DECIMAL(12,2),
  stok         INT,
  kategori     VARCHAR(50)
);
2

Verifikasi data dengan SELECT sebelum UPDATE

Kebiasaan terpenting: lihat data dulu dengan SELECT menggunakan WHERE yang sama yang akan kamu pakai di UPDATE.

SELECT * FROM produk WHERE id_produk = 1;
3

Bungkus dalam Transaction

Mulai transaction, eksekusi UPDATE, verifikasi hasilnya — baru COMMIT jika sudah yakin.

START TRANSACTION;

UPDATE produk
SET    harga = 799000, stok = 45
WHERE  id_produk = 1;

-- Cek hasilnya dulu
SELECT * FROM produk WHERE id_produk = 1;

-- Kalau sudah benar, commit!
COMMIT;
4

Update banyak baris sekaligus dengan CASE WHEN

Untuk update dengan nilai berbeda di tiap baris tanpa looping, gunakan ekspresi CASE WHEN dalam SET.

-- Update diskon berbeda per kategori
UPDATE produk
SET harga = CASE
  WHEN kategori = 'Elektronik' THEN harga * 0.85
  WHEN kategori = 'Fashion'    THEN harga * 0.90
  WHEN kategori = 'Olahraga'  THEN harga * 0.95
  ELSE harga
END;

Verifikasi akhir dan dokumentasi

Jalankan SELECT akhir untuk memastikan semua perubahan sesuai harapan. Catat query yang berhasil untuk referensi tim. Kamu berhasil! ๐ŸŽ‰

๐Ÿ“Š Ringkasan: Variasi Perintah UPDATE SET MySQL

Jenis UPDATE Sintaks Kunci Use Case Risiko
Update 1 Kolom SET kolom = nilai Ubah satu field spesifik ๐ŸŸข Rendah
Update Banyak Kolom SET k1=v1, k2=v2 Update profil pelanggan ๐ŸŸข Rendah
Update dengan Ekspresi SET stok = stok - 1 Kurangi/tambah stok, poin ๐ŸŸก Menengah
Update Banyak Baris WHERE kategori = 'X' Flash sale per kategori ๐ŸŸก Menengah
Update dengan CASE SET k = CASE WHEN Diskon berbeda tiap kategori ๐ŸŸก Menengah
Update Tanpa WHERE UPDATE t SET k=v ⚠️ Hampir tidak pernah diperlukan ๐Ÿ”ด Sangat Tinggi!

๐Ÿ’ก Tip #1: ROW_COUNT() untuk Audit

Setelah eksekusi UPDATE, panggil SELECT ROW_COUNT(); untuk tahu berapa baris yang benar-benar berubah. Kalau hasilnya 0 padahal kamu expect banyak baris — berarti ada yang salah di WHERE-mu!

๐Ÿ”ฅ Insight #2: UPDATE vs DELETE+INSERT

Pemula sering salah kaprah: hapus dulu lalu insert ulang. Itu 2x lebih lambat dan berbahaya (bisa kehilangan data jika INSERT gagal). Gunakan UPDATE — itu cara yang benar, lebih cepat, dan lebih aman karena bisa di-rollback.

๐ŸŽฏ Kesimpulan

  • UPDATE SET MySQL adalah perintah untuk memperbarui data yang sudah ada di tabel tanpa menghapus barisnya.
  • Klausa WHERE adalah WAJIB — tanpanya semua baris di tabel akan ikut berubah.
  • Bisa update banyak kolom sekaligus dengan memisahkan pasangan kolom-nilai menggunakan koma di klausa SET.
  • Gunakan ekspresi matematika di SET (seperti stok = stok - 1) untuk update dinamis.
  • CASE WHEN dalam SET memungkinkan update nilai berbeda untuk baris yang berbeda dalam satu query.
  • Selalu gunakan TRANSACTION + ROLLBACK sebagai safety net, dan SELECT dulu sebelum UPDATE di production.

"Setiap developer handal pernah panik karena UPDATE tanpa WHERE. Bedanya, developer yang baik belajar dari kepanikan itu — dan kamu sudah selangkah lebih maju karena tahu risikonya sebelum mengalaminya."

Artikel Berikutnya — #17 dari 28

Menghapus Data: Perintah DELETE dan TRUNCATE

Setelah bisa update, saatnya belajar cara hapus data dengan aman dan kapan harus pilih DELETE vs TRUNCATE.

Baca Selanjutnya →
#MySQL #SQL #Database #Query #Tutorial #UPDATE SET MySQL

saifiahmada.com adalah blog belajar programming Indonesia, membahas lengkap materi bahasa pemrograman: code HTML, CSS, Bootstrap, Desain, PHP, MySQL, coding Java, Query, SQL, dan dunia linux