search
HomeDatabaseMysql TutorialDetailed introduction to mysql stored procedures (code example)

This article brings you a detailed introduction (code example) about mysql stored procedures. It has certain reference value. Friends in need can refer to it. I hope it will be helpful to you.

1. What is a stored procedure?

A collection of one or more MySQL statements saved for later use.

The concept of stored procedures is code encapsulation and reuse at the SQL language level of the database.

(Related recommendations: MySQL Tutorial)

2. Why use stored procedures

  1. Encapsulate processing in easy-to-use units, simplifying complex operations

  2. Prevent errors and ensure data consistency

  3. Simplify the response to changes manage. (Modify the corresponding table name, column name, etc. to modify the code of the corresponding stored procedure. People who use it do not need to know the changes)

  4. Improve performance

  5. flexible

In general, it is simple, safe and high-performance
Disadvantages:

  1. It is more complicated to write than SQL statements

  2. Permission problem (may not have permission, generally use stored procedures, do not have permission to create stored procedures)

3. Create stored procedures

CREATE  PROCEDURE productpricing()
BEGIN
SELECT Avg(prod_price) AS priceaverage
FROM products;
END

Note: Problems entered in the command line

mysql> delimiter //
mysql> CREATE PROCEDURE productpricing()
    -> BEGIN
    -> SELECT Avg(prod_price) AS priceaverage
    -> FROM products;
    -> END //

4. Use stored procedures

The stored procedure is actually a function

CALL productpricing();

4. Delete the stored procedure

    drop procedure productpricing;
    drop procedure if EXISTS productpricing;

5. Use parameters

Generally, the stored procedure does not display the results, but returns the results to the variable you specify
Variable (variable) A specific location in memory used to temporarily store data.

CREATE PROCEDURE productpricing(
    OUT p1 DECIMAL(8,2),
    OUT ph DECIMAL(8,2),
    OUT pa DECIMAL(8,2)
)
BEGIN
SELECT MIN(prod_price)
INTO p1
FROM products;
SELECT MAX(prod_price)
INTO ph
FROM products;
SELECT avg(prod_price)
INTO pa
FROM products;
END;

The keyword OUT indicates that the corresponding parameter is used to pass a value from the stored procedure (returned to the caller).
MySQL supports IN (passed to stored procedures),
OUT (passed from stored procedures, as used here)
INOUT (passed in and out of stored procedures) type parameters.

Variable name All MySQL variables must start with @.
Call stored procedure

call productpricing(@pricelow,@pricehign,@priceaverage);

Query

SELECT @priceaverage;
SELECT @priceaverage,@pricehign,@pricelow;

Use in and out
Create

CREATE PROCEDURE ordertotal(
    IN onumber INT,
    OUT ototal DECIMAL(8,2)
)
BEGIN
SELECT sum(item_price*quantity)
FROM orderitems
WHERE order_num = onumber
INTO ototal;
END;

Calling

call ordertotal(20005,@total);

Query

select @total;

6. Establishing intelligent stored procedures

All stored procedures used so far are basically encapsulated MySQL simple SELECT statements. Although they are all valid examples of stored procedures, they can do what you can directly use these encapsulated statements (if they can bring anything more, it is to make things more complicated). The power of stored procedures truly becomes apparent only when they include business rules and intelligent processing within them.

   考虑这个场景。你需要获得与以前一样的订单合计,但需要对合计增加营业税,不过只针对某些顾客(或许是你所在州中那些顾客)。那么,你需要做下面几件事情:
   1、获得合计(和以前一样)
   2、把营业税有条件的添加到合计
   3、返回合计(带或不带税的)

We enter the following code:

-- Name: ordertotal        //   添加注释
-- Parameters: onumber = order number
--             taxable = 0 if not taxable, 1 if taxtable
--             ototal = order total variable

CREATE     PROCEDURE ordertotal (
IN onumber INT,
IN taxable BOOLEAN,
OUT ototal DECIMAL(8,2)
) COMMENT 'Obtain order total, optionally adding tax'
BEGIN
    
        -- Declare variable for total
        DECLARE total DECIMAL(8,2);     //   声明变量   
        -- Declare tax percentage
        DECLARE taxrate INT DEFAULT 6;
        
        -- Get the order total
        SELECT Sum(item_price*quantity)
        FROM orderitems
        WHERE order_num = onumber
        INTO total;
        
        -- Is this taxable?
        IF taxable THEN
            -- yes,so add taxrate to the total
            SELECT total+(total/100*taxrate) INTO total;
        END IF;
        --  And finally, save to out variable
        SELECT total INTO ototal;
END;
此存储过程有很大的变动。首先,增加了注释(前面放置 --)。在存储过程复杂性增加时,这样做特别重要。  
添加了另外一个参数 taxable,它是一个布尔值(如果要增加税则为真,否则为假)。  
在存储过程体中,用 DECLARE语句定义了两个局部变量。 DECLARE要求指定变量名和数据类型,
它也支持可选的默认值(这个例子中的 taxrate的默认被设置为 6%)。SELECT 语句变,因此其结果存储到 total(局部变量)而不是 ototal。  
IF 语句检查taxable是否为真,如果为真,则用另一SELECT语句增加营业税到局部变量 total。

最后,用另一SELECT语句将total(它增加或许不增加营业税)保存到 ototal。  
注意:COMMENT关键字 ,本例子中的存储过程在 CREATE PROCEDURE语句中包含了一个 COMMENT值。  
它不是必需的,但如果给出,将在SHOW PROCEDURE STATUS的结果中显示。

这显然是一个更高级,功能更强的存储过程。为试验它,请用以下两条语句:  
第一条:
call ordertotal(20005, 0, @total);
SELECT @total;
输出:
+--------+
| @total |
+--------+
|  38.47 |
+--------+
第二条:
call ordertotal(20009, 1,@total);
SELECT @total;
输出:
+--------+
| @total |
+--------+
|  36.21 |
+--------+
BOOLEAN值指定为1 表示真,指定为 0表示假(实际上,非零值都考虑为真,只有 0被视为假)。通过给中间的参数指定 0或1 ,可以有条件地将营业税加到订单合计上。

This example gives the basic usage of MySQL's IF statement. The IF statement also supports ELSEIF and ELSE clauses (the former also uses the THEN clause, the latter does not). We will see other uses of IF (and other flow control statements) in future chapters.

7. Check the stored procedure

To display the CREATE statement used to create a stored procedure

show create PROCEDURE ordertotal;

To obtain detailed information about the stored procedure including when and by whom it was created. List

show procedure status;

There are many tables, use like to filter

show procedure status like 'ordertotal';

The above is the detailed content of Detailed introduction to mysql stored procedures (code example). For more information, please follow other related articles on the PHP Chinese website!

Statement
This article is reproduced at:segmentfault. If there is any infringement, please contact admin@php.cn delete
Explain the role of InnoDB redo logs and undo logs.Explain the role of InnoDB redo logs and undo logs.Apr 15, 2025 am 12:16 AM

InnoDB uses redologs and undologs to ensure data consistency and reliability. 1.redologs record data page modification to ensure crash recovery and transaction persistence. 2.undologs records the original data value and supports transaction rollback and MVCC.

What are the key metrics to look for in an EXPLAIN output (type, key, rows, Extra)?What are the key metrics to look for in an EXPLAIN output (type, key, rows, Extra)?Apr 15, 2025 am 12:15 AM

Key metrics for EXPLAIN commands include type, key, rows, and Extra. 1) The type reflects the access type of the query. The higher the value, the higher the efficiency, such as const is better than ALL. 2) The key displays the index used, and NULL indicates no index. 3) rows estimates the number of scanned rows, affecting query performance. 4) Extra provides additional information, such as Usingfilesort prompts that it needs to be optimized.

What is the Using temporary status in EXPLAIN and how to avoid it?What is the Using temporary status in EXPLAIN and how to avoid it?Apr 15, 2025 am 12:14 AM

Usingtemporary indicates that the need to create temporary tables in MySQL queries, which are commonly found in ORDERBY using DISTINCT, GROUPBY, or non-indexed columns. You can avoid the occurrence of indexes and rewrite queries and improve query performance. Specifically, when Usingtemporary appears in EXPLAIN output, it means that MySQL needs to create temporary tables to handle queries. This usually occurs when: 1) deduplication or grouping when using DISTINCT or GROUPBY; 2) sort when ORDERBY contains non-index columns; 3) use complex subquery or join operations. Optimization methods include: 1) ORDERBY and GROUPB

Describe the different SQL transaction isolation levels (Read Uncommitted, Read Committed, Repeatable Read, Serializable) and their implications in MySQL/InnoDB.Describe the different SQL transaction isolation levels (Read Uncommitted, Read Committed, Repeatable Read, Serializable) and their implications in MySQL/InnoDB.Apr 15, 2025 am 12:11 AM

MySQL/InnoDB supports four transaction isolation levels: ReadUncommitted, ReadCommitted, RepeatableRead and Serializable. 1.ReadUncommitted allows reading of uncommitted data, which may cause dirty reading. 2. ReadCommitted avoids dirty reading, but non-repeatable reading may occur. 3.RepeatableRead is the default level, avoiding dirty reading and non-repeatable reading, but phantom reading may occur. 4. Serializable avoids all concurrency problems but reduces concurrency. Choosing the appropriate isolation level requires balancing data consistency and performance requirements.

MySQL vs. Other Databases: Comparing the OptionsMySQL vs. Other Databases: Comparing the OptionsApr 15, 2025 am 12:08 AM

MySQL is suitable for web applications and content management systems and is popular for its open source, high performance and ease of use. 1) Compared with PostgreSQL, MySQL performs better in simple queries and high concurrent read operations. 2) Compared with Oracle, MySQL is more popular among small and medium-sized enterprises because of its open source and low cost. 3) Compared with Microsoft SQL Server, MySQL is more suitable for cross-platform applications. 4) Unlike MongoDB, MySQL is more suitable for structured data and transaction processing.

How does MySQL index cardinality affect query performance?How does MySQL index cardinality affect query performance?Apr 14, 2025 am 12:18 AM

MySQL index cardinality has a significant impact on query performance: 1. High cardinality index can more effectively narrow the data range and improve query efficiency; 2. Low cardinality index may lead to full table scanning and reduce query performance; 3. In joint index, high cardinality sequences should be placed in front to optimize query.

MySQL: Resources and Tutorials for New UsersMySQL: Resources and Tutorials for New UsersApr 14, 2025 am 12:16 AM

The MySQL learning path includes basic knowledge, core concepts, usage examples, and optimization techniques. 1) Understand basic concepts such as tables, rows, columns, and SQL queries. 2) Learn the definition, working principles and advantages of MySQL. 3) Master basic CRUD operations and advanced usage, such as indexes and stored procedures. 4) Familiar with common error debugging and performance optimization suggestions, such as rational use of indexes and optimization queries. Through these steps, you will have a full grasp of the use and optimization of MySQL.

Real-World MySQL: Examples and Use CasesReal-World MySQL: Examples and Use CasesApr 14, 2025 am 12:15 AM

MySQL's real-world applications include basic database design and complex query optimization. 1) Basic usage: used to store and manage user data, such as inserting, querying, updating and deleting user information. 2) Advanced usage: Handle complex business logic, such as order and inventory management of e-commerce platforms. 3) Performance optimization: Improve performance by rationally using indexes, partition tables and query caches.

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: How To Unlock Everything In MyRise
1 months agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Dreamweaver Mac version

Dreamweaver Mac version

Visual web development tools

SublimeText3 English version

SublimeText3 English version

Recommended: Win version, supports code prompts!

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

Atom editor mac version download

Atom editor mac version download

The most popular open source editor

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Integrate Eclipse with SAP NetWeaver application server.