MySQL Fungsi: String, Numerik, Buatan Pengguna, Tersimpan

⚡ Ringkasan Cerdas

MySQL Fungsi mengubah data sebelum disimpan atau diambil, dan mengembalikan satu hasil perhitungan. Artikel ini menjelaskan fungsi string, numerik, dan tanggal bawaan, kemudian menunjukkan bagaimana fungsi yang tersimpan dan yang didefinisikan pengguna memperluas mesin basis data itu sendiri.

  • 🔤 Fungsi String: UCASE, LCASE, dan CONCAT mengubah bentuk teks pada saat kueri; beri alias kolom komputasi dengan AS agar hasil kueri memiliki header yang mudah dibaca.
  • 🔢 Numeric Operatorsi: DIV melakukan pembagian bilangan bulat, / mengembalikan hasil bagi desimal, dan % (atau MOD) mengembalikan sisa pembagian.
  • 📅 Fungsi Tanggal: DATE_FORMAT mengkonversi nilai YYYY-MM-DD yang tersimpan menjadi pola tampilan apa pun, seperti %d-%m-%Y, tanpa mengubah satu baris pun kode aplikasi.
  • Fungsi Tersimpan: CREATE FUNCTION mendaftarkan logika yang dapat digunakan kembali di dalam server; deklarasikan NOT DETERMINISTIC setiap kali isi fungsi memanggil CURDATE() atau NOW().
  • ⚙️ Fungsi yang Ditentukan Pengguna: Rutinitas eksternal yang ditulis dalam bahasa C atau C++ dikompilasi ke dalam server dan kemudian berperilaku persis seperti fungsi asli.
  • 🚀 Dampak Kinerja: Mendorong perhitungan ke dalam basis data menghilangkan logika yang berduplikasi dari setiap aplikasi klien dan mengurangi perjalanan bolak-balik jaringan.

Apa MySQL Fungsi?

MySQL dapat melakukan lebih dari sekedar menyimpan dan mengambil data. Hal ini dapat juga melakukan manipulasi pada data sebelum mengambil atau menyimpannya. Di situlah MySQL Di sinilah fungsi berperan. Fungsi hanyalah bagian kode yang melakukan suatu operasi dan kemudian mengembalikan hasilnya. Beberapa fungsi menerima parameter, sementara fungsi lain tidak menerima parameter.

Mari kita lihat contohnya secara singkat. Secara default, MySQL menyimpan tipe data tanggal dalam format “YYYY-MM-DD”. Misalkan kita telah membuat aplikasi dan pengguna kita menginginkan tanggal yang dikembalikan dalam format “DD-MM-YYYY”. Kita dapat menggunakan MySQL fungsi bawaan DATE_FORMAT digunakan untuk mencapai hal ini. DATE_FORMAT adalah salah satu fungsi yang paling sering digunakan dalam MySQL, dan kita akan membahasnya secara detail nanti di pelajaran ini.

Apa pun jenisnya, sebuah fungsi selalu mengembalikan nilai tunggal, dapat menerima nol atau lebih parameter di dalam tanda kurung, dan dapat digunakan di mana saja ekspresi diperbolehkan. — dalam daftar SELECT, klausa WHERE, atau klausa ORDER BY.

Mengapa Menggunakan MySQL Fungsi?

Sekarang setelah kita mengetahui apa itu fungsi, pertanyaan selanjutnya adalah mengapa kita harus memasukkan pekerjaan ini ke dalam basis data sama sekali.

Mengapa menggunakan MySQL Fungsi

Seperti yang ditunjukkan diagram di atas, sebuah fungsi menerima nilai masukan, menerapkan logika sekali di dalam mesin basis data, dan mengembalikan satu hasil tunggal kepada setiap aplikasi yang memintanya.

Para programmer mungkin berpikir, “Untuk apa repot-repot dengan ini?” MySQL Fungsi? Efek yang sama dapat dicapai dengan bahasa skrip atau pemrograman.” Memang benar bahwa kita dapat mencapainya dengan menulis prosedur dalam program aplikasi.

Kembali ke contoh TANGGAL kita, agar pengguna mendapatkan data dalam format yang diinginkan, lapisan bisnis harus melakukan pemrosesan yang diperlukan sendiri.

Hal ini menjadi masalah ketika aplikasi harus berintegrasi dengan sistem lain. Saat kita menggunakan MySQL Fungsi seperti DATE_FORMAT, fungsionalitas tersebut tertanam dalam basis data, dan aplikasi apa pun yang membutuhkan data tersebut akan mendapatkannya dalam format yang dibutuhkan. Ini Mengurangi pengerjaan ulang dalam logika bisnis dan mengurangi inkonsistensi data..

Alasan lain untuk dipertimbangkan MySQL Salah satu fungsinya adalah dapat membantu mengurangi lalu lintas jaringan pada aplikasi klien/server.Lapisan bisnis hanya perlu memanggil fungsi yang tersimpan, tanpa perlu mengambil data mentah melalui jaringan untuk memanipulasinya. Secara rata-rata, penggunaan fungsi dapat sangat meningkatkan kinerja sistem secara keseluruhan.

Jenis dari MySQL Fungsi

Setelah memahami "apa" dan "mengapa", kita sekarang dapat melihat tiga kelompok fungsi. MySQL Menawarkan: fungsi bawaan, fungsi tersimpan, dan fungsi yang ditentukan pengguna.

Fungsi bawaan

MySQL hadir dengan sejumlah fungsi bawaan — fungsi yang sudah diimplementasikan di MySQL server. Mereka memungkinkan kita untuk melakukan berbagai jenis manipulasi pada data, dan termasuk dalam kelompok-kelompok yang umum digunakan berikut ini.

  • Fungsi string – beroperasi pada tipe data string
  • Fungsi numerik – beroperasi pada tipe data numerik
  • Fungsi tanggal – beroperasi pada tipe data tanggal
  • Fungsi agregat – beroperasi pada semua tipe data di atas dan menghasilkan kumpulan hasil yang diringkas.
  • Fungsi lainnya - MySQL juga mendukung jenis fungsi bawaan lainnya, tetapi kami membatasi pelajaran ini pada kelompok-kelompok yang disebutkan di atas.

Sekarang mari kita lihat setiap grup yang disebutkan di atas secara detail. Kita akan menjelaskan fungsi-fungsi yang paling sering digunakan dengan menggunakan basis data sampel "Myflixdb" kita.

Fungsi string

Fungsi string beroperasi pada nilai teks. Dalam tabel film kita, judul disimpan menggunakan campuran huruf kecil dan huruf besar. Misalkan kita menginginkan kueri yang mengembalikan judul dalam huruf besar. Fungsi “UCASE” mengambil string sebagai parameter dan mengubah setiap huruf menjadi huruf besar, seperti yang ditunjukkan oleh skrip di bawah ini.

SELECT `movie_id`, `title`, UCASE(`title`) AS `upper_case_title` FROM `movies`;

SINI

  • UCASE(`judul`) adalah fungsi bawaan yang menerima judul sebagai parameter dan mengembalikannya dalam huruf kapital.
  • AS `judul_huruf_atas` memberikan alias pada kolom yang dihitung, sehingga hasil set membawa header yang mudah dibaca alih-alih ekspresi mentah.

Menjalankan skrip di atas dalam MySQL Hasil yang diperoleh dari Workbench terhadap Myflixdb ditunjukkan di bawah ini.

film_id judul judul_huruf_atas
16 67% Bersalah 67% BERSALAH
6 malaikat dan iblis MALAIKAT DAN IBLIS
4 Code Nama Hitam KODE NAMA HITAM
5 Gadis Kecil Ayah GADIS-GADIS KECIL AYAH
7 Da Vinci Code KODE DAVINCI
2 Melupakan Sarah Marshal MELUPAKAN SARAH MARSHAL
9 Honey mooners MADU MOONERS
19 film 3 FILM 3
1 Bajak Laut Karibia 4 Bajak Laut Karibia 4
18 contoh film CONTOH FILM
17 The Great Dictator DIKTATOR HEBAT
3 X-Men X-MEN

Ada dua mitra yang patut diingat selain UCASE: LCASE mengubah string menjadi huruf kecil, dan MENGHUBUNGKAN Menggabungkan dua string atau lebih menjadi satu. Untuk daftar lengkapnya, lihat MySQL referensi fungsi string.

Fungsi numerik

Seperti yang telah disebutkan sebelumnya, fungsi numerik beroperasi pada tipe data numerik. Kita juga dapat melakukan perhitungan matematika pada data numerik secara langsung dalam pernyataan SQL kita.

Operator aritmatika

MySQL Mendukung operator aritmatika berikut, yang dapat digunakan untuk melakukan perhitungan dalam pernyataan SQL.

Nama Deskripsi
DIV Divisi integer
/ Divisi
- Subtracproduksi
+ Tambahan
* Perkalian
% atau MOD Modulus

Berikut adalah contoh dari masing-masing operator.

Pembagian bilangan bulat (DIV) — DIV mengabaikan bagian pecahan dan hanya mengembalikan bilangan bulat.

SELECT 23 DIV 6;

Menjalankan skrip di atas akan memberi kita 3.

Operator pembagian (/) — tidak seperti DIV, operator pembagian mempertahankan bagian desimal dari hasilnya.

SELECT 23 / 6;

Menjalankan skrip di atas akan memberi kita 3.8333.

Subtracoperator tion (-)

SELECT 23 - 6;

Menjalankan skrip di atas akan memberi kita 17.

Operator penjumlahan (+)

SELECT 23 + 6;

Menjalankan skrip di atas akan memberi kita 29.

Operator perkalian (*)

SELECT 23 * 6 AS `multiplication_result`;

Hasil:

hasil_perkalian
138

Operator modulo (% atau MOD)

Operator modulo membagi N dengan M dan memberikan sisanya. Mari kita lihat contoh operator modulo, menggunakan nilai yang sama seperti pada contoh sebelumnya.

SELECT 23 % 6;
-- OR, equivalently:
SELECT 23 MOD 6;

Menjalankan salah satu skrip tersebut akan memberi kita 5.

Sekarang mari kita lihat beberapa fungsi numerik yang umum MySQL.

LANTAI – Fungsi ini menghilangkan angka desimal dari suatu bilangan dan membulatkannya ke bawah ke bilangan bulat terdekat. Skrip yang ditunjukkan di bawah ini mendemonstrasikan penggunaannya.

SELECT FLOOR(23 / 6) AS `floor_result`;

Hasil:

hasil_lantai
3

ROUND – Fungsi ini membulatkan angka ke bilangan bulat terdekat. Karena 23 / 6 hasilnya 3.8333, ROUND mengembalikan 4 sedangkan FLOOR mengembalikan 3 — keduanya tidak dapat saling menggantikan.

SELECT ROUND(23 / 6) AS `round_result`;

Hasil:

hasil_putaran
4

RAND – Fungsi ini menghasilkan angka acak. Nilainya berubah setiap kali fungsi dipanggil. Skrip yang ditunjukkan di bawah ini mendemonstrasikan penggunaannya.

SELECT RAND() AS `random_result`;

Fungsi tanggal

Fungsi tanggal beroperasi pada tipe data tanggal dan tanggal-waktu. DATE_FORMAT adalah fungsi yang memecahkan masalah “YYYY-MM-DD versus DD-MM-YYYY” yang dijelaskan di bagian pengantar.

FORMAT TANGGAL Skrip ini menerima dua parameter: nilai tanggal yang akan diformat, dan string format yang dibuat dari placeholder. Skrip di bawah ini mengembalikan setiap tanggal rilis dalam format hari-bulan-tahun seperti yang diminta pengguna kami.

SELECT `title`, DATE_FORMAT(`date_released`, '%d-%m-%Y') AS `formatted_date`
FROM `movies`;

Berikut adalah daftar placeholder format yang paling sering digunakan.

placeholder Arti Contoh keluaran
%d Tanggal dalam bulan, dua digit 04
%m Bulan, dua digit 08
%Y Tahun, empat digit 2012
%M Nama bulan selengkapnya Agustus
%Miliknya Hoursmenit, detik 14:35:09

Tiga fungsi tanggal lainnya selalu muncul dalam pekerjaan sehari-hari:

  • CURDATE() Mengembalikan tanggal saat ini dalam format YYYY-MM-DD.
  • SEKARANG() mengembalikan tanggal saat ini ke waktu.
  • PERBEDAAN TANGGAL(d1, d2) Mengembalikan jumlah hari antara dua tanggal — dasar dari setiap laporan tunggakan sewa.

Untuk daftar lengkapnya, lihat MySQL Referensi fungsi tanggal dan waktu.

Fungsi tersimpan

Fungsi bawaan mencakup kasus-kasus umum. Ketika aturan bisnis lebih spesifik, kita menulis sendiri — dan itulah fungsi tersimpan.

Fungsi tersimpan (stored function) berperilaku sama seperti fungsi bawaan (built-in function), kecuali bahwa Anda mendefinisikannya sendiri. Setelah dibuat, fungsi tersimpan dapat digunakan dalam pernyataan SQL persis seperti fungsi lainnya. Sintaks dasarnya ditunjukkan di bawah ini.

CREATE FUNCTION sf_name ([parameter(s)])
RETURNS data_type
[DETERMINISTIC | NOT DETERMINISTIC]
BEGIN
    -- procedural statements
END

SINI

  • “BUAT FUNGSI sf_name ([parameter(s)])” bersifat wajib dan memberitahukan MySQL Server akan membuat fungsi bernama `sf_name` dengan parameter opsional yang ditentukan di dalam tanda kurung.
  • “MENGEMBALIKAN tipe_data” Ini wajib dan menentukan tipe data yang dikembalikan oleh fungsi tersebut.
  • “DETERMINISTIK” menyatakan bahwa fungsi tersebut mengembalikan nilai yang sama setiap kali argumen yang sama diberikan. “TIDAK DETERMINISTIK” menyatakan sebaliknya.
  • “MULAI … SELESAI” membungkus kode prosedural yang dijalankan oleh fungsi tersebut.

Misalkan kita ingin mengetahui film-film sewaan mana yang sudah melewati tanggal pengembaliannya. Kita dapat membuat fungsi tersimpan yang menerima tanggal pengembalian sebagai parameter dan membandingkannya dengan tanggal saat ini di server. Jika tanggal saat ini lebih besar dari tanggal pengembalian, film tersebut sudah melewati batas waktu pengembalian dan kita mengembalikan "Ya"; jika tidak, kita mengembalikan "Tidak".

DELIMITER |
CREATE FUNCTION sf_past_movie_return_date (return_date DATE)
RETURNS VARCHAR(3)
NOT DETERMINISTIC
BEGIN
    DECLARE sf_value VARCHAR(3);
    IF CURDATE() > return_date THEN
        SET sf_value = 'Yes';
    ELSEIF CURDATE() <= return_date THEN
        SET sf_value = 'No';
    END IF;
    RETURN sf_value;
END|
DELIMITER ;

⚠️ Peringatan — jangan beri label fungsi ini sebagai DETERMINISTIK. Fungsi tersebut memanggil CURDATE(), sehingga argumen yang sama dapat mengembalikan "Tidak" hari ini dan "Ya" besok. Mendeklarasikan fungsi yang bergantung pada waktu sebagai DETERMINISTIC akan menyesatkan pengoptimal dan tidak aman untuk replikasi berbasis pernyataan. Gunakan BUKAN DETERMINISTIK setiap kali badan fungsi memanggil CURDATE(), NOW(), atau RAND().

Menjalankan skrip di atas akan membuat fungsi tersimpan `sf_past_movie_return_date`. Sekarang mari kita uji.

SELECT `movie_id`, `membership_number`, `return_date`, CURDATE(),
       sf_past_movie_return_date(`return_date`) AS `is_overdue`
FROM `movierentals`;

Menjalankan skrip di atas dalam MySQL Pengujian Workbench terhadap myflixdb memberikan hasil sebagai berikut.

film_id Nomor keanggotaan tanggal pengembalian CURDATE() sudah jatuh tempo
1 1 NULL 04-08-2012 NULL
2 1 25-06-2012 04-08-2012 Ya
2 3 25-06-2012 04-08-2012 Ya
2 2 25-06-2012 04-08-2012 Ya
3 3 NULL 04-08-2012 NULL

Perhatikan dua baris NULL. Ketika `return_date` adalah NULL, kedua perbandingan menghasilkan NULL dan bukan TRUE atau FALSE, sehingga tidak ada cabang IF yang berjalan dan fungsi mengembalikan NULL — hasil yang diharapkan, karena film yang tidak dikembalikan tidak memiliki tanggal pengembalian untuk dibandingkan.

Fungsi yang ditentukan pengguna

Ketika SQL saja tidak cukup cepat, MySQL memungkinkan opsi ketiga. Fungsi yang ditentukan pengguna (UDF) ditulis dalam bahasa yang dikompilasi seperti C or C++, dibangun ke dalam pustaka bersama, dan didaftarkan ke server. Setelah ditambahkan, UDF dipanggil seperti fungsi lainnya. Karena UDF berjalan sebagai kode asli di dalam proses server, UDF cocok untuk komputasi berat — tetapi bug di dalamnya dapat menyebabkan server crash, sehingga UDF digunakan jauh lebih jarang daripada fungsi tersimpan.

Fungsi Bawaan vs Fungsi Tersimpan vs Fungsi yang Didefinisikan Pengguna: Mana yang Harus Anda Gunakan?

Ketiga keluarga fungsi tersebut mengembalikan satu nilai tunggal dan dapat dipanggil dari pernyataan SQL apa pun, tetapi perbedaannya terletak pada siapa yang menulisnya, di mana fungsi tersebut dijalankan, dan seberapa besar risiko yang ditimbulkannya. Tabel di bawah ini merangkum perbedaan-perbedaan tersebut.

Kriterium Fungsi bawaan Fungsi tersimpan Fungsi yang ditentukan pengguna (UDF)
Siapa yang menulisnya? Dikirim dengan MySQL Anda, dalam SQL Anda, di C atau C++
Tempat tinggalnya Di dalam server Di dalam basis data, yang dibuat dengan CREATE FUNCTION Pustaka bersama yang telah dikompilasi dimuat oleh server.
Penggunaan khas Pemformatan, matematika, agregasi Aturan bisnis yang dapat digunakan kembali, seperti cek yang jatuh tempo. SQL tidak dapat mengekspresikan logika yang membutuhkan banyak daya CPU atau logika khusus.
Risiko utama None Lambat jika dipanggil baris demi baris pada tabel yang besar. Kerusakan pada sistem perpustakaan dapat menyebabkan server mati.

Sebagai aturan umum, mulailah dengan fungsi bawaan. Jika tidak ada yang sesuai, tulis fungsi tersimpan agar aturannya berada di satu tempat. Gunakan UDF hanya jika fungsi tersimpan terbukti terlalu lambat.

Pertanyaan Umum Demo Slot

Sebuah fungsi harus mengembalikan tepat satu nilai dan dapat digunakan di dalam ekspresi SELECT, WHERE, atau ORDER BY. Prosedur tersimpan mengembalikan nol atau banyak set hasil, tidak dapat disematkan dalam sebuah ekspresi, dan dipanggil dengan pernyataan CALL.

Jalankan perintah DROP FUNCTION IF EXISTS sf_name; lalu buat ulang fungsi tersebut. MySQL Tidak memiliki fungsi CREATE OR REPLACE, dan fungsi ALTER hanya mengubah karakteristik seperti komentar atau tipe keamanan, tidak pernah isi pesan.

Mereka bisa. Sebuah fungsi yang membungkus kolom yang diindeks dalam klausa WHERE mencegah hal tersebut. MySQL dengan menggunakan indeks tersebut, memaksa pemindaian penuh. Filter pada kolom mentah dan terapkan fungsi hanya pada daftar SELECT.

Ya. Asisten AI dapat membuat kode CREATE FUNCTION dari aturan dalam bahasa Inggris biasa. Selalu tinjau isi yang dihasilkan untuk karakteristik DETERMINISTIC yang benar, penanganan NULL, dan tipe data parameter sebelum menjalankannya di server produksi.

Tidak. Model AI dapat mengarang nama fungsi, melewatkan kasus NULL, atau mengabaikan perbedaan versi. Uji setiap fungsi yang dihasilkan pada salinan data, dan konfirmasikan hasilnya dengan kueri yang telah Anda tulis dan verifikasi sendiri.

Ringkaslah postingan ini dengan: