Dibangun dengan AI canggih di perangkat Anda dan akselerasi perangkat keras untuk performa profesional dengan privasi tanpa kompromi.AI di perangkat — profesional dan privat.
Ubah CSV ke SQL
CSV ke SQL dengan tipe kolom sungguhan, enam dialek, tanpa unggah.
- Berjalan di perangkat Anda
- 6 dialek · MySQL sampai Oracle
- Satu berkas gratis · Kelompok dengan Pro
Jatuhkan berkas CSV di sini
CSV, TSV atau TXT, hingga 25.0 MB
Tambahkan berkas CSV atau tempel teks CSV untuk melihat data terbaca dan SQL yang dihasilkannya.
Mengubah ini membaca ulang berkas. Sisanya hanya membentuk ulang keluaran.
Sel kosong menjadi NULL secara baku. Tambahkan penanda Anda bila ekspor Anda memakainya.
Versi gratis mengubah satu berkas sekaligus. Pro mengubah hingga 50 dan mengirim satu ZIP.
Cara mengubah CSV menjadi SQL
- 1
Tambahkan CSV Anda
Jatuhkan berkas .csv, .tsv atau .txt ke halaman, atau buka kotak tempel dan tempel teks CSV langsung.
- 2
Pilih basis data Anda
Pilih MySQL, PostgreSQL, SQLite, SQL Server, Oracle atau SQL standar. Pengutipan, pelolosan, nama tipe dan literal tanggal mengikuti pilihan Anda.
- 3
Pilih jenis pernyataan
Satu INSERT per baris, INSERT berkelompok, CREATE TABLE, UPDATE, DELETE atau MERGE. Untuk tiga yang terakhir, centang kolom kunci yang harus dipakai klausa WHERE.
- 4
Periksa kolomnya
Tab Kolom menampilkan tipe yang disimpulkan untuk tiap kolom dan tipe SQL persis yang akan dihasilkan. Anda dapat mengganti tipe mana pun dan melepas centang kolom yang tidak diinginkan.
- 5
Hasilkan dan unduh
Hasilkan skripnya, lalu unduh berkas .sql atau salin. Tidak ada yang diunggah kapan pun.
Apa yang ditawarkan alat CSV ke SQL ini
Hasilkan SQL yang rapi dari CSV dengan kendali pembatas dan pengodean, nama tabel khusus, pemetaan header dan ekspor cepat. Nilai diloloskan untuk basis data yang Anda pilih, kolom diberi tipe sungguhan alih-alih dikutip sebagai teks, dan seluruh konversi berjalan di perangkat Anda.
- Enam dialek basis data. MySQL dan MariaDB, PostgreSQL, SQLite, SQL Server, Oracle dan SQL standar, masing-masing dengan pengutipan, pelolosan, nama tipe dan literal tanggalnya sendiri.
- Tujuh jenis pernyataan. Satu INSERT per baris, INSERT berkelompok, CREATE TABLE, DROP plus CREATE plus INSERT, UPDATE, DELETE, serta MERGE atau UPSERT.
- Tipe kolom sungguhan. Bilangan bulat, bilangan bulat besar, desimal, titik mengambang, boolean, tanggal, stempel waktu, waktu dan teks berukuran, disimpulkan dari seluruh baris alih-alih dari cuplikan.
- Penggantian per kolom. Jika Anda tidak sepakat dengan hasil penyimpulan, tetapkan tipenya sendiri, atau lepas centang sebuah kolom agar tidak pernah sampai ke basis data.
- Penanganan NULL. Sel kosong menjadi NULL atau teks kosong, dan Anda dapat menamai penanda NULL sendiri seperti \N, NA atau NULL.
- Pengenal yang aman. Kata terpesan, nama berawalan angka, nama ganda dan nama yang terlalu panjang bagi basis data semuanya diselesaikan sebelum sempat merusak skrip.
- Dua pratinjau. Kisi data yang menunjukkan hasil pembacaan dan tipe tiap kolom, serta pratinjau SQL langsung dari pernyataan yang akan Anda unduh.
- Tidak ada yang diunggah. Berkas dibaca, diubah dan ditulis di perangkat Anda, jadi alat ini bekerja luring dan di ponsel setelah halaman termuat.
Memilih dialek SQL
Dialek adalah hal pertama yang layak diatur, karena ia mengubah jauh lebih banyak daripada sekadar nama tipe. Pengutipan, pelolosan teks, literal boolean dan tanggal, klausa identitas serta bentuk upsert semuanya berbeda, dan skrip yang ditulis untuk satu basis data sering tidak sah di basis data lain.
- MySQL dan MariaDB. Pengenal dalam tanda petik balik, garis miring terbalik diloloskan di dalam teks, boolean sebagai 1 dan 0, AUTO_INCREMENT, dan ON DUPLICATE KEY UPDATE untuk upsert.
- PostgreSQL. Pengenal dalam kutip ganda, garis miring terbalik dibiarkan apa adanya karena teks standar adalah bakunya, TRUE dan FALSE sungguhan, literal DATE dan TIMESTAMP, kolom identitas dan ON CONFLICT DO UPDATE.
- SQLite. Kutip ganda, afinitas tipe dihormati alih-alih dikarang, AUTOINCREMENT pada kunci utama bilangan bulat, dan ON CONFLICT DO UPDATE.
- SQL Server. Pengenal dalam kurung siku, awalan N pada setiap literal berisi teks non-ASCII agar aksen tetap utuh, kolom NVARCHAR yang sepadan, IDENTITY beserta pengaman INSERT-nya, dan MERGE untuk upsert.
- Oracle. Kutip ganda, batas 30 karakter untuk pengenal, TO_DATE dan TO_TIMESTAMP dengan topeng eksplisit agar format tanggal sesi tidak dapat mengubah makna, blok PL/SQL untuk penghapusan bersyarat, dan MERGE terhadap dual.
- SQL standar. Sintaks ANSI yang mudah dipindahkan untuk apa pun yang tidak ada di daftar, atau sebagai titik awal yang memang hendak Anda sesuaikan.
Berganti dialek tidak pernah membaca ulang berkasnya, jadi seketika bahkan pada ekspor besar. Ganti, lihat pratinjau SQL, lalu ganti lagi sampai skripnya terlihat seperti sesuatu yang akan diterima klien basis data Anda.
Jenis pernyataan dijelaskan
Pekerjaan yang berbeda memerlukan pernyataan yang berbeda. Mengisi tabel baru tidak sama dengan memperbaiki baris yang sudah ada, dan membuat INSERT untuk kasus kedua adalah cara orang berakhir dengan data ganda.
- INSERT. Satu pernyataan per baris. Keluaran paling mudah dibaca dan paling mudah disunting manual atau dipakai memuat beberapa ratus baris.
- INSERT berkelompok. Satu pernyataan per kelompok baris, dengan ukuran kelompok di tangan Anda. Jauh lebih cepat dijalankan pada pemuatan besar, dan kira-kira separuh ukuran berkasnya.
- CREATE TABLE. Definisi tabel saja, dengan tipe tersimpulkan, NOT NULL di tempat datanya tidak berlubang, dan kunci utama opsional.
- DROP, CREATE dan INSERT. Seluruh skrip dalam satu berkas: hapus tabel lama jika ada, buat tabelnya, lalu isi. Ini pilihan untuk pemuatan yang dapat diulang.
- UPDATE. Satu pernyataan per baris, yang menetapkan semua kolom non-kunci dan bersandar pada kolom kunci yang Anda centang.
- DELETE. Satu pernyataan per baris, berdasarkan kolom kunci. Berguna untuk menghapus daftar catatan yang persis.
- MERGE atau UPSERT. Menyisipkan baris jika baru, memperbaruinya jika sudah ada. Ditulis dalam bentuk yang benar-benar didukung basis data Anda.
Kolom kunci
UPDATE, DELETE dan MERGE perlu tahu kolom mana yang menandai sebuah baris. Centang di tab Kolom. Jika Anda tidak mencentang satu pun, kolom pertama dipakai dan alat ini menyatakannya, karena UPDATE tanpa klausa WHERE akan menulis ulang setiap baris di tabel. Bila kolom kunci tidak berisi nilai, pernyataan ditulis dengan IS NULL alih-alih = NULL, yang tidak akan pernah cocok dengan apa pun.
Tipe kolom, dan apa yang sengaja tidak ditebak
Setiap sel di setiap baris dibaca sebelum satu pun pernyataan ditulis, sehingga tipe yang dideklarasikan menggambarkan seluruh berkas, bukan beberapa ribu baris pertama. Sebuah kolom mengambil tipe tersempit yang memuat semuanya, dan setiap ketidakcocokan melebarkannya menjadi teks alih-alih membuang sebuah nilai.
- Bilangan bulat. Sampai sembilan digit menjadi bilangan bulat, sampai sembilan belas menjadi bilangan bulat besar, dan lebih panjang lagi menjadi desimal persis, sehingga nomor rekening dua puluh digit tidak pernah dibulatkan.
- Desimal dan titik mengambang. Presisi dan skala diambil dari bagian bulat terlebar dan bagian pecahan terlebar di seluruh kolom, sehingga kolom yang memuat 1234 dan 1.5 berukuran cukup untuk keduanya. Nilai bernotasi eksponen menghasilkan kolom titik mengambang.
- Boolean. Hanya kata true, false, yes dan no. Lihat di bawah mengapa 1 dan 0 tidak termasuk.
- Tanggal dan stempel waktu. Hanya ISO 8601, dan tanggalnya diperiksa terhadap kalender, sehingga 2026-02-30 tetap teks alih-alih menjadi tanggal tidak sah.
- Teks. Diukur pada nilai terpanjang di berkas dan dibulatkan ke tingkat berikutnya, agar impor berikutnya tidak gagal karena nilai yang lebih panjang satu karakter.
Apa yang sengaja tetap teks
Empat kasus tampak seperti sesuatu yang lain padahal bukan. Menebaknya adalah cara sebuah konverter diam-diam merusak data sambil menghasilkan keluaran yang tampak sempurna.
- Nol di depan. 007, 01730 dan 0044 adalah peringkat, kode pos dan awalan telepon. Sebagai bilangan bulat mereka menjadi 7, 1730 dan 44, dan nolnya hilang dari basis data selamanya.
- Tanda plus di depan. +15551234567 cocok sempurna sebagai bilangan bulat dan sebenarnya nomor telepon. Sebagai angka ia kehilangan tanda plus dan maknanya.
- Tanggal bermakna ganda. 03/04/2026 adalah 3 April di hampir seluruh dunia dan 4 Maret di Amerika Serikat, dan tidak ada apa pun di dalam CSV yang memutuskannya. Satu kolom penuh bisa konsisten di bawah kedua bacaan selama bertahun-tahun.
- Penanda satu huruf. Kolom berisi t, f, y dan n adalah kelaziman boolean sekaligus sebuah nilai, sebuah inisial dan sebuah kode kategori. Kata true, false, yes dan no tidak bermakna ganda; hurufnya bermakna ganda.
Tidak ada satu pun dari ini yang menjadi dinding. Semua kasus itu dapat ditetapkan manual di tab Kolom, dan penggantian eksplisit dipatuhi persis, termasuk huruf tunggalnya. Bedanya, tidak pernah ada tebakan yang dibuat atas nama Anda. Bila sebuah penggantian tidak dapat dipenuhi oleh sel tertentu, nilai itu ditulis NULL dan alat ini memberi tahu berapa banyak sel yang terdampak, alih-alih menggagalkan skrip ratusan pernyataan kemudian.
NULL, teks kosong dan nilai yang hilang
Pengukuran yang hilang dan pengukuran bernilai nol adalah dua fakta berbeda, dan begitu keduanya menjadi teks kosong di basis data tidak ada lagi yang bisa membedakannya. Versi sebelumnya alat ini menulis setiap sel kosong sebagai teks kosong tanpa cara apa pun untuk mengubahnya.
- Sel kosong sebagai NULL. Pilihan baku, dan yang diinginkan hampir setiap impor. Kolomnya juga ditandai menerima NULL pada CREATE TABLE.
- Sel kosong sebagai teks kosong. Untuk memuat ke tabel yang sudah ada dan kolomnya dideklarasikan NOT NULL.
- Penanda NULL sendiri. Ekspor yang ditulis mysqldump memakai \N, dan banyak lembar yang dikelola manual memakai NA, N/A atau kata NULL. Sebutkan yang dipakai berkas Anda, dipisahkan koma, dan semuanya menjadi NULL sungguhan.
- NULL di kolom kunci. Ditulis IS NULL pada klausa WHERE, tidak pernah = NULL, yang di SQL tidak pernah benar dan diam-diam tidak akan cocok dengan satu baris pun.
- Karakter yang tak bisa disimpan basis data mana pun. Bita nol dihapus dan dihitung, karena PostgreSQL menolaknya mentah-mentah sementara MySQL memotong nilainya di titik itu. Anda diberi tahu berapa yang terdampak alih-alih diberi tiga jawaban salah yang berbeda.
Nama tabel dan kolom
Header lembar kerja bukanlah pengenal SQL, dan mengubah yang satu menjadi yang lain persis di situlah versi sebelumnya alat ini menghasilkan skrip yang tidak diterima basis data mana pun. Ada empat masalah yang harus diselesaikan sebelum sebuah nama aman ditulis.
- Kata terpesan. order, group, key, desc, from dan table adalah header kolom biasa dan semuanya terpesan. Semuanya dikutip secara otomatis.
- Nama berawalan angka. 1st dan 2nd tidak dapat ditulis tanpa kutip di dialek mana pun. Semuanya dikutip alih-alih dirusak.
- Nama ganda. col-1 dan col.1 keduanya melipat menjadi col_1. Yang kedua menjadi col_1_2, dan pemeriksaannya mengabaikan besar-kecil huruf karena MySQL di Windows dan SQL Server memperlakukan Total dan total sebagai kolom yang sama.
- Nama terlalu panjang bagi basis data. Oracle mengizinkan tiga puluh karakter, PostgreSQL enam puluh tiga, MySQL enam puluh empat. Nama panjang dipotong agar muat, dan setiap tabrakan yang muncul dari pemotongan itu diselesaikan sesudahnya.
Dua gaya penamaan
Nama rapi melipat header menjadi huruf kecil, angka dan garis bawah, sehingga First Name menjadi first_name dan Café Total menjadi cafe_total. Pertahankan asli menyimpan header persis seperti yang Anda tulis dan mengutipnya di tempat basis data mensyaratkannya. Sengaja tidak ada pilihan ketiga yang melewatkan pengutipan sama sekali, karena kata terpesan atau spasi tidak punya ejaan tanpa kutip dan pengaturan itu hanya bisa menghasilkan skrip yang rusak.
Mengapa mengubah CSV menjadi SQL?
CSV adalah cara data keluar dari lembar kerja dan skrip SQL adalah cara data masuk ke basis data. Mengubah yang satu menjadi yang lain secara manual itu lambat dan rawan salah, dan kesalahannya adalah jenis yang senyap.
- Mengisi basis data. Data acuan, tabel pencarian dan data uji hidup di lembar kerja dan harus tiba di basis data sebagai pernyataan yang dapat diulang dan ditinjau.
- Data uji. Skrip yang dihasilkan dapat diversikan bersama kode dan dijalankan ulang di setiap lingkungan baru.
- Migrasi dan pemuatan sekali jalan. Skrip dapat dibaca, disunting dan diterapkan lewat proses tinjauan yang sudah dimiliki basis data, hal yang tidak dimungkinkan impor massal lewat antarmuka.
- Bekerja tanpa wisaya impor. Banyak basis data produksi hanya dapat dijangkau lewat klien SQL, dan berkas .sql adalah satu-satunya format yang diterima semua klien.
- Memperbaiki baris yang sudah ada. UPDATE dan MERGE mengubah lembar kerja yang sudah dikoreksi menjadi pernyataan persis yang diperlukan untuk menyelaraskan tabel yang sedang berjalan dengannya.
Pilihan pembacaan dijelaskan
Pengaturan ini mengendalikan cara berkas dibaca, sebelum SQL apa pun ditulis. Mengubah salah satunya membaca ulang berkas; sisanya hanya membentuk ulang keluaran.
- Pembatas. Otomatis, koma, titik koma, tab atau garis tegak. Mode otomatis membaca cuplikan dengan tiap kandidat dan memilih yang menghasilkan lebar baris paling konsisten, sehingga koma di dalam alamat berkutip tidak dapat menipunya.
- Karakter kutip. Otomatis, kutip ganda, kutip tunggal, atau tanpa kutip. Berkas yang dikutip dengan apostrof memang ada, dan membacanya dengan karakter yang salah akan menyatukan baris.
- Pengodean. Otomatis, UTF-8, UTF-16LE, UTF-16BE, Windows-1252 atau ISO-8859-1. Penanda urutan bita di dalam berkas selalu mengalahkan daftar pilihan, karena berkas yang menyatakan pengodeannya sendiri mengalahkan tebakan.
- Baris pertama adalah header. Aktif secara baku. Matikan dan kolom dinamai berdasarkan posisi, sedangkan baris pertama diperlakukan sebagai data.
- Lewati baris. Untuk ekspor yang diawali judul, stempel tanggal atau baris kosong sebelum header sebenarnya.
- Simpulkan tipe kolom. Aktif secara baku. Matikan dan setiap kolom ditulis sebagai teks berukuran, yang justru Anda inginkan saat memuat ke tabel singgah yang sudah ada.
Kapan memakai tiap pembatas
Biarkan pembatas pada Otomatis dulu. Tetapkan manual hanya bila pratinjau menunjukkan berkas terbaca keliru.
- Koma. Pilihan baku, dan asal nama format ini. Sebagian besar ekspor dari perangkat lunak berbahasa Inggris.
- Titik koma. Yang ditulis Excel di sebagian besar Eropa, tempat koma menjadi pemisah desimal.
- Tab. Berkas TSV, dan apa pun yang disalin langsung dari lembar kerja ke berkas teks.
- Garis tegak. Lazim di jalur pengolahan data dan ekstraksi mainframe, tempat datanya sendiri dapat memuat koma dan titik koma.
Berkas yang didukung dan batasnya
Daftarnya tertutup. Apa pun yang tidak ada di dalamnya ditolak di kotak pilih berkas dengan satu kalimat yang menyebutkan apa itu dan ke mana membawanya, alih-alih diterima lalu gagal kemudian.
Apa yang dapat Anda ubah
- .csv dengan salah satu dari empat pembatas dan salah satu dari lima pengodean.
- .tsv ekspor yang dipisahkan tab.
- .txt teks berpembatas dengan ekstensi apa pun yang kebetulan ditulis lembar kerja.
- Teks tempelan. Tempel CSV langsung ke halaman tanpa menyimpan berkas terlebih dahulu.
Apa yang ditolak, dan ke mana sebaiknya
- Buku kerja Excel. Berkas .xlsx atau .xls adalah arsip terkompresi, bukan teks berpembatas. Ubah dulu menjadi CSV.
- JSON. Gunakan dulu alat JSON ke CSV, lalu bawa hasilnya ke sini.
- Berkas berisi gambar atau arsip dengan nama .csv. Dikenali dari isinya alih-alih ekstensinya, dan ditolak sebelum apa pun dibaca.
- Berkas kosong. Ditolak dengan pesan alih-alih menghasilkan skrip kosong.
Batas ukuran dan kelompok
Versi gratis mengubah satu berkas sekaligus, hingga 25 MB, dengan seluruh dialek, jenis pernyataan, penggantian tipe dan pengaturan NULL tersedia. Pro mengubah hingga 50 berkas dalam satu jalan dan mengirimkannya sebagai satu ZIP, dan dibatasi oleh kemampuan perangkat Anda alih-alih oleh angka tetap. Tidak ada satu pun hal yang membuat SQL-nya benar berada di balik pembayaran, karena skrip yang tidak berjalan bukanlah hasil akhir premium.
Bagaimana pembuatan CSV ke SQL bekerja
Berkas didekode, pembatas dan karakter kutip dideteksi dengan membaca cuplikan dan menilai seberapa persegi hasil tiap bacaan, dan barisnya dibaca oleh pemindai yang memahami bidang berkutip berisi pembatas dan pergantian baris. Setelah itu tiap sel diklasifikasikan, dan tiap kolom mengambil tipe tersempit yang cocok untuk seluruh nilainya.
Skrip ditulis sepotong demi sepotong dan dialirkan langsung ke berkas alih-alih dirangkai menjadi satu blok teks raksasa, dan itulah yang memungkinkan skrip 23 MB dihasilkan tanpa halaman berhenti merespons. Pratinjau menampilkan pernyataan pertama seketika, agar Anda melihat apa yang akan diunduh sebelum mengunduhnya.
Tidak ada yang meninggalkan perangkat Anda
Tidak ada langkah pengunggahan dan tidak ada peladen yang terlibat dalam konversi. Berkas dibaca dari cakram ke halaman, diubah di sana, dan ditulis kembali sebagai unduhan. Setelah halaman termuat Anda dapat memutus jaringan dan alat ini tetap bekerja, dan itulah satu-satunya bentuk janji privasi yang dapat Anda periksa sendiri.
Ekspor 10 MB berisi 104.000 baris dibaca, ditipekan dan ditulis sebagai skrip SQL 23 MB dalam waktu sekitar satu detik, tanpa halaman pernah berhenti.
Pertanyaan yang sering diajukan
SQL seperti apa yang dihasilkan alat ini, dan bagaimana caranya?
Alat ini membaca CSV Anda, menentukan isi tiap kolom, dan menulis pernyataan yang Anda pilih: satu INSERT per baris, INSERT berkelompok untuk beberapa baris, CREATE TABLE dengan tipe kolom sungguhan, UPDATE atau DELETE berdasarkan kolom kunci, atau MERGE / UPSERT. Pengenal hanya dikutip di tempat basis data memerlukannya, nilai diloloskan sesuai dialek yang dipilih, dan angka ditulis sebagai angka, bukan sebagai teks berkutip.
Apakah data CSV saya tetap pribadi?
Ya. Seluruh konversi berjalan di perangkat Anda, bukan di server kami, dan tidak ada yang diunggah — aman untuk data awal basis data, ekspor pelanggan, dan catatan rahasia. Itu juga berarti alat ini tetap bekerja tanpa jaringan setelah halaman termuat.
Basis data dan jenis pernyataan apa saja yang didukung?
Enam dialek: MySQL dan MariaDB, PostgreSQL, SQLite, SQL Server, Oracle dan SQL standar. Tujuh jenis pernyataan: INSERT, INSERT berkelompok, CREATE TABLE, DROP plus CREATE plus INSERT, UPDATE, DELETE dan MERGE / UPSERT. Semua dialek dan semua jenis pernyataan gratis.
Bagaimana tipe kolom ditentukan, dan bisakah saya mengubahnya?
Setiap sel di setiap baris dibaca, dan sebuah kolom menjadi bilangan bulat, desimal, boolean, tanggal, stempel waktu atau teks sesuai isi sebenarnya. Apa pun yang bermakna ganda tetap menjadi teks dengan sengaja: nilai dengan nol di depan seperti 007 mempertahankan nolnya, dan tanggal seperti 03/04/2026 tidak pernah ditebak sebagai hari-dulu atau bulan-dulu. Tab Kolom menampilkan hasil penyimpulan dan memungkinkan Anda mengganti kolom mana pun.
Apa yang terjadi pada sel kosong, tanda kutip dan garis miring terbalik?
Sel kosong menjadi NULL secara baku, dan Anda dapat mengubahnya menjadi teks kosong atau menambahkan penanda NULL sendiri seperti \N atau NA. Tanda kutip tunggal di dalam nilai digandakan, dan garis miring terbalik hanya diloloskan untuk MySQL, karena MySQL memperlakukan garis miring terbalik sebagai karakter pelolos di dalam teks sedangkan PostgreSQL, SQLite, SQL Server dan Oracle tidak. Nilai non-ASCII mendapat awalan N di SQL Server agar teks beraksen tetap utuh.
Pembatas, tanda kutip dan pengodean apa saja yang didukung?
Pembatas dan karakter kutip dideteksi dengan membaca sebuah cuplikan dan menilai seberapa konsisten hasilnya, sehingga koma di dalam alamat berkutip tidak menipunya. Anda juga dapat memilih koma, titik koma, tab atau garis tegak secara manual. Berkas dibaca sebagai UTF-8, UTF-16LE, UTF-16BE, Windows-1252 atau ISO-8859-1, dan penanda urutan bita di dalam berkas selalu mengalahkan pilihan pada daftar.
Apakah gratis, dan seberapa besar berkas yang bisa saya ubah?
Semua dialek, jenis pernyataan, penggantian tipe dan pengaturan NULL gratis. Versi gratis mengubah satu berkas sekaligus hingga 25 MB; Pro menambahkan kelompok hingga 50 berkas yang dikirim sebagai satu ZIP, dan dibatasi oleh kemampuan perangkat Anda alih-alih oleh angka tetap.
dari 128 penilaian
Beri nilai alat ini
Ketuk bintang — hanya sebentar