Rumah >pangkalan data >tutorial mysql >Bagaimanakah saya menggunakan prosedur dan fungsi yang disimpan di MySQL untuk kod yang boleh diguna semula?
Prosedur dan fungsi yang disimpan dalam MySQL menawarkan mekanisme yang kuat untuk merangkum dan menggunakan semula kod SQL. Ini meningkatkan daya tahan, kebolehbacaan, dan prestasi yang ketara. Mari kita meneroka cara membuat dan menggunakannya.
Membuat prosedur yang disimpan:
Prosedur yang disimpan adalah blok kod SQL yang telah disusun sebelum ini yang boleh menerima parameter input, melakukan operasi kompleks, dan hasil pulangan. Mereka ditakrifkan menggunakan perintah DELIMITER
untuk menukar terminator pernyataan dari titik koma (;) kepada sesuatu yang lain (sering // atau $$), menghalang penamatan pramatang dalam definisi prosedur. Inilah contoh asas:
<code class="sql">DELIMITER // CREATE PROCEDURE GetCustomerByName(IN customerName VARCHAR(255)) BEGIN SELECT * FROM Customers WHERE name LIKE CONCAT('%', customerName, '%'); END // DELIMITER ;</code>
Prosedur ini mengambil nama pelanggan sebagai input dan mengambil semua pelanggan yang namanya mengandungi rentetan itu. Untuk memanggilnya:
<code class="sql">CALL GetCustomerByName('John');</code>
Membuat Fungsi:
Fungsi, serupa dengan prosedur yang disimpan, merangkumi kod SQL. Walau bagaimanapun, fungsi mesti mengembalikan satu nilai dan biasanya digunakan untuk operasi yang lebih mudah. Mereka ditakrifkan menggunakan pernyataan CREATE FUNCTION
:
<code class="sql">DELIMITER // CREATE FUNCTION GetCustomerCount() RETURNS INT BEGIN DECLARE customerCount INT; SELECT COUNT(*) INTO customerCount FROM Customers; RETURN customerCount; END // DELIMITER ;</code>
Fungsi ini mengembalikan jumlah pelanggan. Untuk memanggilnya:
<code class="sql">SELECT GetCustomerCount();</code>
Menggunakan prosedur dan fungsi yang disimpan menawarkan beberapa kelebihan utama untuk menulis pertanyaan individu:
Mengoptimumkan prestasi prosedur dan fungsi yang disimpan melibatkan beberapa strategi:
SELECT *
dan sebaliknya tentukan hanya lajur yang diperlukan. Mengoptimumkan WHERE
klausa menggunakan keadaan dan pengindeksan yang sesuai.START TRANSACTION
, COMMIT
, ROLLBACK
) untuk memastikan konsistensi data dan berpotensi meningkatkan prestasi dengan mengurangkan penguncian overhead.Ya, anda boleh lulus parameter ke prosedur dan fungsi yang disimpan MySQL. Contoh -contoh di atas menunjukkan ini. Pengisytiharan parameter menentukan nama dan jenis data. MySQL menyokong pelbagai jenis data, termasuk:
INT
, BIGINT
, SMALLINT
, TINYINT
: Jenis Integer.DECIMAL
, FLOAT
, DOUBLE
: Jenis-jenis Terapung.VARCHAR
, CHAR
, TEXT
: Jenis String.DATE
, DATETIME
, TIMESTAMP
: Jenis Tarikh dan Masa.BOOLEAN
: Jenis Boolean.Arah parameter juga ditentukan:
IN
: Parameter diluluskan ke dalam prosedur atau fungsi. (Ini adalah jenis yang paling biasa.)OUT
: Parameter mengembalikan nilai dari prosedur atau fungsi.INOUT
: Parameter diluluskan dan nilai yang diubahsuai dikembalikan.Berikut adalah contoh yang menggambarkan pelbagai jenis data dan arahan parameter:
<code class="sql">DELIMITER // CREATE PROCEDURE UpdateCustomer(IN customerId INT, IN newName VARCHAR(255), OUT success BOOLEAN) BEGIN UPDATE Customers SET name = newName WHERE id = customerId; SELECT ROW_COUNT() > 0 INTO success; -- Check if any rows were updated. END // DELIMITER ;</code>
Prosedur ini mengemas kini nama pelanggan dan mengembalikan nilai boolean yang menunjukkan kejayaan atau kegagalan. Untuk memanggilnya:
<code class="sql">CALL UpdateCustomer(1, 'Jane Doe', @success); SELECT @success;</code>
Ingatlah untuk mengisytiharkan parameter output menggunakan @
awalan sebelum memanggil prosedur. Pengendalian jenis data yang betul memastikan keserasian dan menghalang kesilapan. Sentiasa sepadan dengan jenis data parameter dalam panggilan prosedur dengan jenis data yang ditakrifkan dalam perisytiharan prosedur.
Atas ialah kandungan terperinci Bagaimanakah saya menggunakan prosedur dan fungsi yang disimpan di MySQL untuk kod yang boleh diguna semula?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!