ホームページ >データベース >mysql チュートリアル >再利用可能なコードにMySQLでストアドプロシージャと機能を使用するにはどうすればよいですか?
MySQLのストアドプロシージャと機能は、SQLコードをカプセル化および再利用するための強力なメカニズムを提供します。これにより、コードの保守性、読みやすさ、パフォーマンスが大幅に向上します。それらを作成して利用する方法を探りましょう。
ストアドプロシージャの作成:
ストアドプロシージャは、入力パラメーターを受け入れ、複雑な操作を実行し、結果を返すことができる事前にコンパイルされたSQLコードブロックです。それらは、 DELIMITER
コマンドを使用して定義され、ステートメントターミネーターをSemicolon(;)から他の何か(多くの場合//または$$)に変更し、手順定義内の早期終了を防ぎます。これが基本的な例です。
<code class="sql">DELIMITER // CREATE PROCEDURE GetCustomerByName(IN customerName VARCHAR(255)) BEGIN SELECT * FROM Customers WHERE name LIKE CONCAT('%', customerName, '%'); END // DELIMITER ;</code>
この手順は、顧客名を入力として受け取り、名前がその文字列に含まれているすべての顧客を取得します。それを呼ぶ:
<code class="sql">CALL GetCustomerByName('John');</code>
関数の作成:
ストアドプロシージャと同様の関数は、SQLコードをカプセル化します。ただし、関数は単一の値を返す必要があり、通常、より単純な操作に使用されます。それらは、 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>
この関数は、顧客の総数を返します。それを呼ぶ:
<code class="sql">SELECT GetCustomerCount();</code>
ストアドプロシージャと機能を使用すると、個々のクエリを書く上でいくつかの重要な利点があります。
ストアドプロシージャと機能のパフォーマンスを最適化するには、いくつかの戦略が含まれます。
SELECT *
避け、代わりに必要な列のみを指定します。適切な条件とインデックス作成を使用してWHERE
を最適化します。START TRANSACTION
、 COMMIT
、 ROLLBACK
)を使用して、データの一貫性を確保し、オーバーヘッドのロックを減らすことでパフォーマンスを改善する潜在的なパフォーマンスを改善します。はい、パラメーターをmySQLストアドプロシージャと関数に渡すことができます。上記の例はこれを示しました。パラメーター宣言名とデータ型の両方を指定します。 MySQLは、次のような幅広いデータ型をサポートしています。
INT
、 BIGINT
、 SMALLINT
、 TINYINT
:整数タイプ。DECIMAL
、 FLOAT
、 DOUBLE
:フローティングポイントタイプ。VARCHAR
、 CHAR
、 TEXT
:文字列タイプ。DATE
、 DATETIME
、 TIMESTAMP
:日付と時刻のタイプ。BOOLEAN
:ブールタイプ。パラメーター方向も指定されています。
IN
:パラメーターは手順または関数に渡されます。 (これは最も一般的なタイプです。)OUT
:パラメーターは、手順または関数から値を返します。INOUT
:パラメーターが渡され、変更された値が返されます。さまざまなデータ型とパラメーターの方向を示す例を示します。
<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>
この手順は、顧客の名前を更新し、成功または失敗を示すブール値を返します。それを呼ぶ:
<code class="sql">CALL UpdateCustomer(1, 'Jane Doe', @success); SELECT @success;</code>
手順を呼び出す前に、 @
プレフィックスを使用して出力パラメーターを宣言することを忘れないでください。データ型の適切な処理により、互換性が保証され、エラーが防止されます。手順コールのパラメーターのデータ型と、手順の宣言で定義されたデータ型と必ず一致してください。
以上が再利用可能なコードにMySQLでストアドプロシージャと機能を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。