日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

MySQL/MariaDB数据库的存储过程

發布時間:2023/12/31 综合教程 30 生活家
生活随笔 收集整理的這篇文章主要介紹了 MySQL/MariaDB数据库的存储过程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

         MySQL/MariaDB數據庫的存儲過程

                                   作者:尹正杰

版權聲明:原創作品,謝絕轉載!否則將追究法律責任。

一.存儲過程概述

1>.存儲過程優勢

  存儲過程把經常使用的SQL語句或業務邏輯封裝起來,預編譯保存在數據庫中,當需要時從數據庫中直接調用,省去了編譯的過程

  提高了運行速度
  同時降低網絡數據傳輸量

2>.存儲過程與自定義函數的區別

  存儲過程實現的過程要復雜一些,而函數的針對性較強

  存儲過程可以有多個返回值,而自定義函數只有一個返回值
  存儲過程一般獨立的來執行,而函數往往是作為其他SQL語句的一部分來使用

3>.存儲過程存儲位置

  存儲過程保存在mysql.proc表中。

MariaDB [yinzhengjie]> SELECT * FROM mysql.procG          #不難發現存儲過程和函數都保存在該表中。
*************************** 1. row ***************************
                  db: mysql
                name: AddGeometryColumn
                type: PROCEDURE
       specific_name: AddGeometryColumn
            language: SQL
     sql_data_access: CONTAINS_SQL
    is_deterministic: NO
       security_type: DEFINER
          param_list: catalog varchar(64), t_schema varchar(64),
   t_name varchar(64), geometry_column varchar(64), t_srid int
             returns: 
                body: begin
  set @qwe= concat('ALTER TABLE ', t_schema, '.', t_name, ' ADD ', geometry_column,' GEOMETRY REF_SYSTEM_ID=', t_srid); PREPARE ls from @qwe; exe
cute ls; deallocate prepare ls; end             definer: root@localhost
             created: 2019-10-26 22:17:15
            modified: 2019-10-26 22:17:15
            sql_mode: 
             comment: 
character_set_client: utf8
collation_connection: utf8_general_ci
        db_collation: latin1_swedish_ci
           body_utf8: begin
  set @qwe= concat('ALTER TABLE ', t_schema, '.', t_name, ' ADD ', geometry_column,' GEOMETRY REF_SYSTEM_ID=', t_srid); PREPARE ls from @qwe; exe
cute ls; deallocate prepare ls; end*************************** 2. row ***************************
                  db: mysql
                name: DropGeometryColumn
                type: PROCEDURE
       specific_name: DropGeometryColumn
            language: SQL
     sql_data_access: CONTAINS_SQL
    is_deterministic: NO
       security_type: DEFINER
          param_list: catalog varchar(64), t_schema varchar(64),
   t_name varchar(64), geometry_column varchar(64)
             returns: 
                body: begin
  set @qwe= concat('ALTER TABLE ', t_schema, '.', t_name, ' DROP ', geometry_column); PREPARE ls from @qwe; execute ls; deallocate prepare ls; en
d             definer: root@localhost
             created: 2019-10-26 22:17:15
            modified: 2019-10-26 22:17:15
            sql_mode: 
             comment: 
character_set_client: utf8
collation_connection: utf8_general_ci
        db_collation: latin1_swedish_ci
           body_utf8: begin
  set @qwe= concat('ALTER TABLE ', t_schema, '.', t_name, ' DROP ', geometry_column); PREPARE ls from @qwe; execute ls; deallocate prepare ls; en
d*************************** 3. row ***************************
                  db: yinzhengjie
                name: students_numbers
                type: FUNCTION
       specific_name: students_numbers
            language: SQL
     sql_data_access: CONTAINS_SQL
    is_deterministic: NO
       security_type: DEFINER
          param_list: 
             returns: smallint(6)
                body: BEGIN
DECLARE x SMALLINT;
SELECT COUNT(StuID) FROM students INTO x;
RETURN x;
END
             definer: root@localhost
             created: 2019-10-28 20:38:19
            modified: 2019-10-28 20:38:19
            sql_mode: STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
             comment: 
character_set_client: utf8mb4
collation_connection: utf8mb4_general_ci
        db_collation: utf8_general_ci
           body_utf8: BEGIN
DECLARE x SMALLINT;
SELECT COUNT(StuID) FROM students INTO x;
RETURN x;
END
*************************** 4. row ***************************
                  db: yinzhengjie
                name: deleteById
                type: FUNCTION
       specific_name: deleteById
            language: SQL
     sql_data_access: CONTAINS_SQL
    is_deterministic: NO
       security_type: DEFINER
          param_list: uid SMALLINT UNSIGNED
             returns: varchar(100) CHARSET utf8
                body: BEGIN
DELETE FROM students WHERE stuid = uid; 
RETURN (SELECT COUNT(stuid) FROM students); 
END
             definer: root@localhost
             created: 2019-10-28 20:06:27
            modified: 2019-10-28 20:06:27
            sql_mode: STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
             comment: 
character_set_client: utf8mb4
collation_connection: utf8mb4_general_ci
        db_collation: utf8_general_ci
           body_utf8: BEGIN
DELETE FROM students WHERE stuid = uid; 
RETURN (SELECT COUNT(stuid) FROM students); 
END
*************************** 5. row ***************************
                  db: yinzhengjie
                name: addTwoNumber
                type: FUNCTION
       specific_name: addTwoNumber
            language: SQL
     sql_data_access: CONTAINS_SQL
    is_deterministic: NO
       security_type: DEFINER
          param_list: x SMALLINT UNSIGNED, Y SMALLINT UNSIGNED
             returns: smallint(6)
                body: BEGIN
DECLARE a, b SMALLINT UNSIGNED;
SET a = x, b = y;
RETURN a+b;
END
             definer: root@localhost
             created: 2019-10-28 20:13:59
            modified: 2019-10-28 20:13:59
            sql_mode: STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
             comment: 
character_set_client: utf8mb4
collation_connection: utf8mb4_general_ci
        db_collation: utf8_general_ci
           body_utf8: BEGIN
DECLARE a, b SMALLINT UNSIGNED;
SET a = x, b = y;
RETURN a+b;
END
*************************** 6. row ***************************
                  db: yinzhengjie
                name: showTime
                type: PROCEDURE
       specific_name: showTime
            language: SQL
     sql_data_access: CONTAINS_SQL
    is_deterministic: NO
       security_type: DEFINER
          param_list: 
             returns: 
                body: BEGIN
SELECT now();
END
             definer: root@localhost
             created: 2019-10-28 20:49:09
            modified: 2019-10-28 20:49:09
            sql_mode: STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
             comment: 
character_set_client: utf8mb4
collation_connection: utf8mb4_general_ci
        db_collation: utf8_general_ci
           body_utf8: BEGIN
SELECT now();
END
*************************** 7. row ***************************
                  db: yinzhengjie
                name: dorepeat
                type: PROCEDURE
       specific_name: dorepeat
            language: SQL
     sql_data_access: CONTAINS_SQL
    is_deterministic: NO
       security_type: DEFINER
          param_list: n INT
             returns: 
                body: BEGIN
SET @i = 0;
SET @sum = 0;
REPEAT SET @sum = @sum+@i; SET @i = @i + 1;
UNTIL @i > n END REPEAT;
END
             definer: root@localhost
             created: 2019-10-28 21:32:01
            modified: 2019-10-28 21:32:01
            sql_mode: STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
             comment: 
character_set_client: utf8mb4
collation_connection: utf8mb4_general_ci
        db_collation: utf8_general_ci
           body_utf8: BEGIN
SET @i = 0;
SET @sum = 0;
REPEAT SET @sum = @sum+@i; SET @i = @i + 1;
UNTIL @i > n END REPEAT;
END
7 rows in set (0.00 sec)

MariaDB [yinzhengjie]> 
MariaDB [yinzhengjie]> 

MariaDB [yinzhengjie]> SELECT * FROM mysql.procG          #不難發現存儲過程和函數都保存在該表中。

二.存儲過程實戰

MariaDB [yinzhengjie]> HELP CREATE PROCEDURE;
Name: 'CREATE PROCEDURE'
Description:
Syntax:
CREATE
    [DEFINER = { user | CURRENT_USER }]
    PROCEDURE sp_name ([proc_parameter[,...]])
    [characteristic ...] routine_body

CREATE
    [DEFINER = { user | CURRENT_USER }]
    FUNCTION sp_name ([func_parameter[,...]])
    RETURNS type
    [characteristic ...] routine_body

proc_parameter:
    [ IN | OUT | INOUT ] param_name type

func_parameter:
    param_name type

type:
    Any valid MySQL data type

characteristic:
    COMMENT 'string'
  | LANGUAGE SQL
  | [NOT] DETERMINISTIC
  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
  | SQL SECURITY { DEFINER | INVOKER }

routine_body:
    Valid SQL routine statement

These statements create stored routines. By default, a routine is
associated with the default database. To associate the routine
explicitly with a given database, specify the name as db_name.sp_name
when you create it.

The CREATE FUNCTION statement is also used in MySQL to support UDFs
(user-defined functions). See
https://mariadb.com/kb/en/create-function-udf/. A UDF can
be regarded as an external stored function. Stored functions share
their namespace with UDFs. See
http://dev.mysql.com/doc/refman/5.5/en/function-resolution.html, for
the rules describing how the server interprets references to different
kinds of functions.

To invoke a stored procedure, use the CALL statement (see [HELP CALL]).
To invoke a stored function, refer to it in an expression. The function
returns a value during expression evaluation.

CREATE PROCEDURE and CREATE FUNCTION require the CREATE ROUTINE
privilege. They might also require the SUPER privilege, depending on
the DEFINER value, as described later in this section. If binary
logging is enabled, CREATE FUNCTION might require the SUPER privilege,
as described in
https://mariadb.com/kb/en/binary-logging-of-stored-routines/.

By default, MySQL automatically grants the ALTER ROUTINE and EXECUTE
privileges to the routine creator. This behavior can be changed by
disabling the automatic_sp_privileges system variable. See
https://mariadb.com/kb/en/stored-routine-privileges/.

The DEFINER and SQL SECURITY clauses specify the security context to be
used when checking access privileges at routine execution time, as
described later in this section.

If the routine name is the same as the name of a built-in SQL function,
a syntax error occurs unless you use a space between the name and the
following parenthesis when defining the routine or invoking it later.
For this reason, avoid using the names of existing SQL functions for
your own stored routines.

The IGNORE_SPACE SQL mode applies to built-in functions, not to stored
routines. It is always permissible to have spaces after a stored
routine name, regardless of whether IGNORE_SPACE is enabled.

The parameter list enclosed within parentheses must always be present.
If there are no parameters, an empty parameter list of () should be
used. Parameter names are not case sensitive.

Each parameter is an IN parameter by default. To specify otherwise for
a parameter, use the keyword OUT or INOUT before the parameter name.

*Note*: Specifying a parameter as IN, OUT, or INOUT is valid only for a
PROCEDURE. For a FUNCTION, parameters are always regarded as IN
parameters.

An IN parameter passes a value into a procedure. The procedure might
modify the value, but the modification is not visible to the caller
when the procedure returns. An OUT parameter passes a value from the
procedure back to the caller. Its initial value is NULL within the
procedure, and its value is visible to the caller when the procedure
returns. An INOUT parameter is initialized by the caller, can be
modified by the procedure, and any change made by the procedure is
visible to the caller when the procedure returns.

For each OUT or INOUT parameter, pass a user-defined variable in the
CALL statement that invokes the procedure so that you can obtain its
value when the procedure returns. If you are calling the procedure from
within another stored procedure or function, you can also pass a
routine parameter or local routine variable as an IN or INOUT
parameter.

The following example shows a simple stored procedure that uses an OUT
parameter:

MariaDB> delimiter //

MariaDB> CREATE PROCEDURE simpleproc (OUT param1 INT)
    -> BEGIN
    ->   SELECT COUNT(*) INTO param1 FROM t;
    -> END//
Query OK, 0 rows affected (0.00 sec)

MariaDB> delimiter ;

MariaDB> CALL simpleproc(@a);
Query OK, 0 rows affected (0.00 sec)

MariaDB> SELECT @a;
+------+
| @a   |
+------+
| 3    |
+------+
1 row in set (0.00 sec)

The example uses the mysql client delimiter command to change the
statement delimiter from ; to // while the procedure is being defined.
This enables the ; delimiter used in the procedure body to be passed
through to the server rather than being interpreted by mysql itself.
See
https://mariadb.com/kb/en/stored-procedure-overview/.

The RETURNS clause may be specified only for a FUNCTION, for which it
is mandatory. It indicates the return type of the function, and the
function body must contain a RETURN value statement. If the RETURN
statement returns a value of a different type, the value is coerced to
the proper type. For example, if a function specifies an ENUM or SET
value in the RETURNS clause, but the RETURN statement returns an
integer, the value returned from the function is the string for the
corresponding ENUM member of set of SET members.

The following example function takes a parameter, performs an operation
using an SQL function, and returns the result. In this case, it is
unnecessary to use delimiter because the function definition contains
no internal ; statement delimiters:

MariaDB> CREATE FUNCTION hello (s CHAR(20))
MariaDB> RETURNS CHAR(50) DETERMINISTIC
    -> RETURN CONCAT('Hello, ',s,'!');
Query OK, 0 rows affected (0.00 sec)

MariaDB> SELECT hello('world');
+----------------+
| hello('world') |
+----------------+
| Hello, world!  |
+----------------+
1 row in set (0.00 sec)

Parameter types and function return types can be declared to use any
valid data type, except that the COLLATE attribute cannot be used prior
to MySQL 5.5.3. As of 5.5.3, COLLATE can be used if preceded by the
CHARACTER SET attribute.

The routine_body consists of a valid SQL routine statement. This can be
a simple statement such as SELECT or INSERT, or a compound statement
written using BEGIN and END. Compound statements can contain
declarations, loops, and other control structure statements. The syntax
for these statements is described in
https://mariadb.com/kb/programmatic-and-compound-statements.

MySQL permits routines to contain DDL statements, such as CREATE and
DROP. MySQL also permits stored procedures (but not stored functions)
to contain SQL transaction statements such as COMMIT. Stored functions
may not contain statements that perform explicit or implicit commit or
rollback. Support for these statements is not required by the SQL
standard, which states that each DBMS vendor may decide whether to
permit them.

Statements that return a result set can be used within a stored
procedure but not within a stored function. This prohibition includes
SELECT statements that do not have an INTO var_list clause and other
statements such as SHOW, EXPLAIN, and CHECK TABLE. For statements that
can be determined at function definition time to return a result set, a
Not allowed to return a result set from a function error occurs
(ER_SP_NO_RETSET). For statements that can be determined only at
runtime to return a result set, a PROCEDURE %s can't return a result
set in the given context error occurs (ER_SP_BADSELECT).

USE statements within stored routines are not permitted. When a routine
is invoked, an implicit USE db_name is performed (and undone when the
routine terminates). The causes the routine to have the given default
database while it executes. References to objects in databases other
than the routine default database should be qualified with the
appropriate database name.

For additional information about statements that are not permitted in
stored routines, see
https://mariadb.com/kb/en/stored-routine-privileges/
.

For information about invoking stored procedures from within programs
written in a language that has a MySQL interface, see [HELP CALL].

MySQL stores the sql_mode system variable setting that is in effect at
the time a routine is created, and always executes the routine with
this setting in force, regardless of the server SQL mode in effect when
the routine is invoked.

The switch from the SQL mode of the invoker to that of the routine
occurs after evaluation of arguments and assignment of the resulting
values to routine parameters. If you define a routine in strict SQL
mode but invoke it in nonstrict mode, assignment of arguments to
routine parameters does not take place in strict mode. If you require
that expressions passed to a routine be assigned in strict SQL mode,
you should invoke the routine with strict mode in effect.

URL: https://mariadb.com/kb/en/create-procedure/


MariaDB [yinzhengjie]> 

MariaDB [yinzhengjie]> HELP CREATE PROCEDURE;

1>.創建存儲過程

MariaDB [yinzhengjie]> DELIMITER  //
MariaDB [yinzhengjie]> CREATE PROCEDURE showTime()
    -> BEGIN
    ->     SELECT now();
    -> END//
Query OK, 0 rows affected (0.01 sec)

MariaDB [yinzhengjie]> DELIMITER  ;
MariaDB [yinzhengjie]> 

創建無參存儲過程

MariaDB [yinzhengjie]> DELIMITER //
MariaDB [yinzhengjie]> CREATE PROCEDURE selectById(IN uid SMALLINT UNSIGNED)          #需要用戶傳入一個參數,然后根據用戶傳入的參數做相應的處理
    -> BEGIN
    ->     SELECT * FROM students WHERE stuid = uid;                                  #根據用戶輸入的參數查詢相應的stuid。
    -> END//
Query OK, 0 rows affected (0.01 sec)

MariaDB [yinzhengjie]> DELIMITER ;
MariaDB [yinzhengjie]> 

創建含參存儲過程:只有一個IN參數(根據用戶輸入的數字查詢對應表的記錄)

MariaDB [yinzhengjie]> DELIMITER //
MariaDB [yinzhengjie]> CREATE PROCEDURE dorepeat(n INT)
    -> BEGIN
    ->     SET @i = 0;      #注意此處定義的是會話變量,盡管調用存儲過程結束,改變了依舊可以在調用的會話中查詢到。
    ->     SET @sum = 0;
    ->     REPEAT SET @sum = @sum+@i; SET @i = @i + 1;    #循環體為重復對sum執行累加操作,步長為1.
    ->     UNTIL @i > n END REPEAT;                #結束循環條件是會話變量"i"的值大于用戶傳入的參數
    -> END//
Query OK, 0 rows affected (0.01 sec)

MariaDB [yinzhengjie]> DELIMITER ;
MariaDB [yinzhengjie]> 
MariaDB [yinzhengjie]> 

創建含參存儲過程:只有一個IN參數(根據用戶輸入的數字累加案例)

MariaDB [yinzhengjie]> DELIMITER //
MariaDB [yinzhengjie]> CREATE PROCEDURE deleteById(IN uid SMALLINT UNSIGNED, OUT num SMALLINT UNSIGNED)
    -> BEGIN
    ->     DELETE FROM students WHERE stuid >= uid;
    ->     SELECT row_count() into num;          #將更新的行數保存到num變量中,改變了會隨著存儲過程調用而傳出。
    -> END//
Query OK, 0 rows affected (0.00 sec)

MariaDB [yinzhengjie]> DELIMITER ;
MariaDB [yinzhengjie]> 


說明:
    創建存儲過程deleteById,包含一個IN參數和一個OUT參數.調用時,傳入刪除的ID和保存被修改的行數值的用戶變量@Line,select @Line;輸出被影響行數

創建含參存儲過程:包含IN參數和OUT參數

2>.查看存儲過程列表

MariaDB [yinzhengjie]> SHOW PROCEDURE STATUS;
+-------------+--------------------+-----------+----------------+---------------------+---------------------+---------------+---------+----------
------------+----------------------+--------------------+| Db          | Name               | Type      | Definer        | Modified            | Created             | Security_type | Comment | character
_set_client | collation_connection | Database Collation |+-------------+--------------------+-----------+----------------+---------------------+---------------------+---------------+---------+----------
------------+----------------------+--------------------+| mysql       | AddGeometryColumn  | PROCEDURE | root@localhost | 2019-10-26 22:17:15 | 2019-10-26 22:17:15 | DEFINER       |         | utf8     
            | utf8_general_ci      | latin1_swedish_ci  || mysql       | DropGeometryColumn | PROCEDURE | root@localhost | 2019-10-26 22:17:15 | 2019-10-26 22:17:15 | DEFINER       |         | utf8     
            | utf8_general_ci      | latin1_swedish_ci  || yinzhengjie | deleteById         | PROCEDURE | root@localhost | 2019-10-28 21:23:31 | 2019-10-28 21:23:31 | DEFINER       |         | utf8mb4  
            | utf8mb4_general_ci   | utf8_general_ci    || yinzhengjie | dorepeat           | PROCEDURE | root@localhost | 2019-10-28 21:32:01 | 2019-10-28 21:32:01 | DEFINER       |         | utf8mb4  
            | utf8mb4_general_ci   | utf8_general_ci    || yinzhengjie | selectById         | PROCEDURE | root@localhost | 2019-10-28 21:21:37 | 2019-10-28 21:21:37 | DEFINER       |         | utf8mb4  
            | utf8mb4_general_ci   | utf8_general_ci    || yinzhengjie | showTime           | PROCEDURE | root@localhost | 2019-10-28 20:49:09 | 2019-10-28 20:49:09 | DEFINER       |         | utf8mb4  
            | utf8mb4_general_ci   | utf8_general_ci    |+-------------+--------------------+-----------+----------------+---------------------+---------------------+---------------+---------+----------
------------+----------------------+--------------------+6 rows in set (0.00 sec)

MariaDB [yinzhengjie]> 
MariaDB [yinzhengjie]> 

MariaDB [yinzhengjie]> SHOW PROCEDURE STATUS;

MariaDB [yinzhengjie]> SHOW PROCEDURE STATUSG
*************************** 1. row ***************************
                  Db: mysql
                Name: AddGeometryColumn
                Type: PROCEDURE
             Definer: root@localhost
            Modified: 2019-10-26 22:17:15
             Created: 2019-10-26 22:17:15
       Security_type: DEFINER
             Comment: 
character_set_client: utf8
collation_connection: utf8_general_ci
  Database Collation: latin1_swedish_ci
*************************** 2. row ***************************
                  Db: mysql
                Name: DropGeometryColumn
                Type: PROCEDURE
             Definer: root@localhost
            Modified: 2019-10-26 22:17:15
             Created: 2019-10-26 22:17:15
       Security_type: DEFINER
             Comment: 
character_set_client: utf8
collation_connection: utf8_general_ci
  Database Collation: latin1_swedish_ci
*************************** 3. row ***************************
                  Db: yinzhengjie
                Name: deleteById
                Type: PROCEDURE
             Definer: root@localhost
            Modified: 2019-10-28 21:23:31
             Created: 2019-10-28 21:23:31
       Security_type: DEFINER
             Comment: 
character_set_client: utf8mb4
collation_connection: utf8mb4_general_ci
  Database Collation: utf8_general_ci
*************************** 4. row ***************************
                  Db: yinzhengjie
                Name: dorepeat
                Type: PROCEDURE
             Definer: root@localhost
            Modified: 2019-10-28 21:32:01
             Created: 2019-10-28 21:32:01
       Security_type: DEFINER
             Comment: 
character_set_client: utf8mb4
collation_connection: utf8mb4_general_ci
  Database Collation: utf8_general_ci
*************************** 5. row ***************************
                  Db: yinzhengjie
                Name: selectById
                Type: PROCEDURE
             Definer: root@localhost
            Modified: 2019-10-28 21:21:37
             Created: 2019-10-28 21:21:37
       Security_type: DEFINER
             Comment: 
character_set_client: utf8mb4
collation_connection: utf8mb4_general_ci
  Database Collation: utf8_general_ci
*************************** 6. row ***************************
                  Db: yinzhengjie
                Name: showTime
                Type: PROCEDURE
             Definer: root@localhost
            Modified: 2019-10-28 20:49:09
             Created: 2019-10-28 20:49:09
       Security_type: DEFINER
             Comment: 
character_set_client: utf8mb4
collation_connection: utf8mb4_general_ci
  Database Collation: utf8_general_ci
6 rows in set (0.00 sec)

MariaDB [yinzhengjie]> 
MariaDB [yinzhengjie]> 

MariaDB [yinzhengjie]> SHOW PROCEDURE STATUSG

3>.查看存儲過程定義

MariaDB [yinzhengjie]> SHOW CREATE PROCEDURE showTimeG
*************************** 1. row ***************************
           Procedure: showTime
            sql_mode: STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    Create Procedure: CREATE DEFINER=`root`@`localhost` PROCEDURE `showTime`()
BEGIN
SELECT now();
END
character_set_client: utf8mb4
collation_connection: utf8mb4_general_ci
  Database Collation: utf8_general_ci
1 row in set (0.00 sec)

MariaDB [yinzhengjie]> 
MariaDB [yinzhengjie]> 

MariaDB [yinzhengjie]> SHOW CREATE PROCEDURE showTimeG

MariaDB [yinzhengjie]> SHOW CREATE PROCEDURE selectByIdG
*************************** 1. row ***************************
           Procedure: selectById
            sql_mode: STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    Create Procedure: CREATE DEFINER=`root`@`localhost` PROCEDURE `selectById`(IN uid SMALLINT UNSIGNED)
BEGIN
SELECT * FROM students WHERE stuid = uid;
END
character_set_client: utf8mb4
collation_connection: utf8mb4_general_ci
  Database Collation: utf8_general_ci
1 row in set (0.00 sec)

MariaDB [yinzhengjie]> 
MariaDB [yinzhengjie]> 

MariaDB [yinzhengjie]> SHOW CREATE PROCEDURE selectByIdG

MariaDB [yinzhengjie]> SHOW CREATE PROCEDURE dorepeatG
*************************** 1. row ***************************
           Procedure: dorepeat
            sql_mode: STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    Create Procedure: CREATE DEFINER=`root`@`localhost` PROCEDURE `dorepeat`(n INT)
BEGIN
SET @i = 0;
SET @sum = 0;
REPEAT SET @sum = @sum+@i; SET @i = @i + 1;
UNTIL @i > n END REPEAT;
END
character_set_client: utf8mb4
collation_connection: utf8mb4_general_ci
  Database Collation: utf8_general_ci
1 row in set (0.00 sec)

MariaDB [yinzhengjie]> 
MariaDB [yinzhengjie]> 

MariaDB [yinzhengjie]> SHOW CREATE PROCEDURE dorepeatG

MariaDB [yinzhengjie]> SHOW CREATE PROCEDURE deleteByIdG
*************************** 1. row ***************************
           Procedure: deleteById
            sql_mode: STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    Create Procedure: CREATE DEFINER=`root`@`localhost` PROCEDURE `deleteById`(IN uid SMALLINT UNSIGNED, OUT num SMALLINT
 UNSIGNED)BEGIN
DELETE FROM students WHERE stuid >= uid;
SELECT row_count() into num;
END
character_set_client: utf8mb4
collation_connection: utf8mb4_general_ci
  Database Collation: utf8_general_ci
1 row in set (0.00 sec)

MariaDB [yinzhengjie]> 
MariaDB [yinzhengjie]> 

MariaDB [yinzhengjie]> SHOW CREATE PROCEDURE deleteByIdG

4>.調用存儲過程

MariaDB [yinzhengjie]> CALL showTime;                     #當無參時,可以省略"()",當有參數時,不可省略"()”
+---------------------+
| now()               |
+---------------------+
| 2019-10-28 21:27:04 |
+---------------------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

MariaDB [yinzhengjie]> 

MariaDB [yinzhengjie]> CALL showTime;     #當無參時,可以省略"()",當有參數時,不可省略"()”

MariaDB [yinzhengjie]> SELECT * FROM students;
+-------+---------------+-----+--------+---------+-----------+
| StuID | Name          | Age | Gender | ClassID | TeacherID |
+-------+---------------+-----+--------+---------+-----------+
|     1 | Shi Zhongyu   |  22 | M      |       2 |         3 |
|     2 | Shi Potian    |  22 | M      |       1 |         7 |
|     3 | Xie Yanke     |  53 | M      |       2 |        16 |
|     4 | Ding Dian     |  32 | M      |       4 |         4 |
|     5 | Yu Yutong     |  26 | M      |       3 |         1 |
|     6 | Shi Qing      |  46 | M      |       5 |      NULL |
|     7 | Xi Ren        |  19 | F      |       3 |      NULL |
|     8 | Lin Daiyu     |  17 | F      |       7 |      NULL |
|     9 | Ren Yingying  |  20 | F      |       6 |      NULL |
|    10 | Yue Lingshan  |  19 | F      |       3 |      NULL |
|    11 | Yuan Chengzhi |  23 | M      |       6 |      NULL |
|    12 | Wen Qingqing  |  19 | F      |       1 |      NULL |
|    13 | Tian Boguang  |  33 | M      |       2 |      NULL |
|    14 | Lu Wushuang   |  17 | F      |       3 |      NULL |
|    18 | Hua Rong      |  23 | M      |       7 |      NULL |
|    19 | Xue Baochai   |  18 | F      |       6 |      NULL |
|    20 | Diao Chan     |  19 | F      |       7 |      NULL |
|    21 | Huang Yueying |  22 | F      |       6 |      NULL |
|    22 | Xiao Qiao     |  20 | F      |       1 |      NULL |
|    23 | Ma Chao       |  23 | M      |       4 |      NULL |
|    24 | Xu Xian       |  27 | M      |    NULL |      NULL |
|    25 | Sun Dasheng   | 100 | M      |    NULL |      NULL |
+-------+---------------+-----+--------+---------+-----------+
22 rows in set (0.00 sec)

MariaDB [yinzhengjie]> 
MariaDB [yinzhengjie]> call selectById(20);
+-------+-----------+-----+--------+---------+-----------+
| StuID | Name      | Age | Gender | ClassID | TeacherID |
+-------+-----------+-----+--------+---------+-----------+
|    20 | Diao Chan |  19 | F      |       7 |      NULL |
+-------+-----------+-----+--------+---------+-----------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

MariaDB [yinzhengjie]> 
MariaDB [yinzhengjie]> 

MariaDB [yinzhengjie]> call selectById(20);

MariaDB [yinzhengjie]> CALL dorepeat(200);
Query OK, 0 rows affected (0.00 sec)

MariaDB [yinzhengjie]> 
MariaDB [yinzhengjie]> SELECT @sum;
+-------+
| @sum  |
+-------+
| 20100 |
+-------+
1 row in set (0.00 sec)

MariaDB [yinzhengjie]> 
MariaDB [yinzhengjie]> SELECT @i;
+------+
| @i   |
+------+
|  201 |
+------+
1 row in set (0.00 sec)

MariaDB [yinzhengjie]> 
MariaDB [yinzhengjie]> 

MariaDB [yinzhengjie]> CALL dorepeat(200);

MariaDB [yinzhengjie]> SELECT * FROM students;
+-------+---------------+-----+--------+---------+-----------+
| StuID | Name          | Age | Gender | ClassID | TeacherID |
+-------+---------------+-----+--------+---------+-----------+
|     1 | Shi Zhongyu   |  22 | M      |       2 |         3 |
|     2 | Shi Potian    |  22 | M      |       1 |         7 |
|     3 | Xie Yanke     |  53 | M      |       2 |        16 |
|     4 | Ding Dian     |  32 | M      |       4 |         4 |
|     5 | Yu Yutong     |  26 | M      |       3 |         1 |
|     6 | Shi Qing      |  46 | M      |       5 |      NULL |
|     7 | Xi Ren        |  19 | F      |       3 |      NULL |
|     8 | Lin Daiyu     |  17 | F      |       7 |      NULL |
|     9 | Ren Yingying  |  20 | F      |       6 |      NULL |
|    10 | Yue Lingshan  |  19 | F      |       3 |      NULL |
|    11 | Yuan Chengzhi |  23 | M      |       6 |      NULL |
|    12 | Wen Qingqing  |  19 | F      |       1 |      NULL |
|    13 | Tian Boguang  |  33 | M      |       2 |      NULL |
|    14 | Lu Wushuang   |  17 | F      |       3 |      NULL |
|    18 | Hua Rong      |  23 | M      |       7 |      NULL |
|    19 | Xue Baochai   |  18 | F      |       6 |      NULL |
|    20 | Diao Chan     |  19 | F      |       7 |      NULL |
|    21 | Huang Yueying |  22 | F      |       6 |      NULL |
|    22 | Xiao Qiao     |  20 | F      |       1 |      NULL |
|    23 | Ma Chao       |  23 | M      |       4 |      NULL |
|    24 | Xu Xian       |  27 | M      |    NULL |      NULL |
|    25 | Sun Dasheng   | 100 | M      |    NULL |      NULL |
+-------+---------------+-----+--------+---------+-----------+
22 rows in set (0.00 sec)

MariaDB [yinzhengjie]> 
MariaDB [yinzhengjie]> CALL deleteById(2,@Line);
Query OK, 1 row affected (0.01 sec)

MariaDB [yinzhengjie]> 
MariaDB [yinzhengjie]> SELECT @Line;
+-------+
| @Line |
+-------+
|    21 |
+-------+
row in set (0.00 sec)

MariaDB [yinzhengjie]> 
MariaDB [yinzhengjie]> SELECT * FROM students;
+-------+-------------+-----+--------+---------+-----------+
| StuID | Name        | Age | Gender | ClassID | TeacherID |
+-------+-------------+-----+--------+---------+-----------+
|     1 | Shi Zhongyu |  22 | M      |       2 |         3 |
+-------+-------------+-----+--------+---------+-----------+
row in set (0.00 sec)

MariaDB [yinzhengjie]> 
MariaDB [yinzhengjie]> 

MariaDB [yinzhengjie]> CALL deleteById(2,@Line);

5>.存儲過程修改

  ALTER語句修改存儲過程只能修改存儲過程的注釋等無關緊要的東西,不能修改存儲過程體,所以要修改存儲過程,方法就是刪除重建

6>.刪除存儲過程

MariaDB [yinzhengjie]> SHOW PROCEDURE STATUS;
+-------------+--------------------+-----------+----------------+---------------------+---------------------+---------------+---------+----------
------------+----------------------+--------------------+| Db          | Name               | Type      | Definer        | Modified            | Created             | Security_type | Comment | character
_set_client | collation_connection | Database Collation |+-------------+--------------------+-----------+----------------+---------------------+---------------------+---------------+---------+----------
------------+----------------------+--------------------+| mysql       | AddGeometryColumn  | PROCEDURE | root@localhost | 2019-10-26 22:17:15 | 2019-10-26 22:17:15 | DEFINER       |         | utf8     
            | utf8_general_ci      | latin1_swedish_ci  || mysql       | DropGeometryColumn | PROCEDURE | root@localhost | 2019-10-26 22:17:15 | 2019-10-26 22:17:15 | DEFINER       |         | utf8     
            | utf8_general_ci      | latin1_swedish_ci  || yinzhengjie | deleteById         | PROCEDURE | root@localhost | 2019-10-28 21:23:31 | 2019-10-28 21:23:31 | DEFINER       |         | utf8mb4  
            | utf8mb4_general_ci   | utf8_general_ci    || yinzhengjie | dorepeat           | PROCEDURE | root@localhost | 2019-10-28 21:32:01 | 2019-10-28 21:32:01 | DEFINER       |         | utf8mb4  
            | utf8mb4_general_ci   | utf8_general_ci    || yinzhengjie | selectById         | PROCEDURE | root@localhost | 2019-10-28 21:21:37 | 2019-10-28 21:21:37 | DEFINER       |         | utf8mb4  
            | utf8mb4_general_ci   | utf8_general_ci    || yinzhengjie | showTime           | PROCEDURE | root@localhost | 2019-10-28 20:49:09 | 2019-10-28 20:49:09 | DEFINER       |         | utf8mb4  
            | utf8mb4_general_ci   | utf8_general_ci    |+-------------+--------------------+-----------+----------------+---------------------+---------------------+---------------+---------+----------
------------+----------------------+--------------------+6 rows in set (0.00 sec)

MariaDB [yinzhengjie]> 
MariaDB [yinzhengjie]> DROP PROCEDURE IF EXISTS deleteById;
Query OK, 0 rows affected (0.01 sec)

MariaDB [yinzhengjie]> 
MariaDB [yinzhengjie]> DROP PROCEDURE IF EXISTS selectById;
Query OK, 0 rows affected (0.01 sec)

MariaDB [yinzhengjie]> 
MariaDB [yinzhengjie]> SHOW PROCEDURE STATUS;
+-------------+--------------------+-----------+----------------+---------------------+---------------------+---------------+---------+----------
------------+----------------------+--------------------+| Db          | Name               | Type      | Definer        | Modified            | Created             | Security_type | Comment | character
_set_client | collation_connection | Database Collation |+-------------+--------------------+-----------+----------------+---------------------+---------------------+---------------+---------+----------
------------+----------------------+--------------------+| mysql       | AddGeometryColumn  | PROCEDURE | root@localhost | 2019-10-26 22:17:15 | 2019-10-26 22:17:15 | DEFINER       |         | utf8     
            | utf8_general_ci      | latin1_swedish_ci  || mysql       | DropGeometryColumn | PROCEDURE | root@localhost | 2019-10-26 22:17:15 | 2019-10-26 22:17:15 | DEFINER       |         | utf8     
            | utf8_general_ci      | latin1_swedish_ci  || yinzhengjie | dorepeat           | PROCEDURE | root@localhost | 2019-10-28 21:32:01 | 2019-10-28 21:32:01 | DEFINER       |         | utf8mb4  
            | utf8mb4_general_ci   | utf8_general_ci    || yinzhengjie | showTime           | PROCEDURE | root@localhost | 2019-10-28 20:49:09 | 2019-10-28 20:49:09 | DEFINER       |         | utf8mb4  
            | utf8mb4_general_ci   | utf8_general_ci    |+-------------+--------------------+-----------+----------------+---------------------+---------------------+---------------+---------+----------
------------+----------------------+--------------------+4 rows in set (0.00 sec)

MariaDB [yinzhengjie]> 

MariaDB [yinzhengjie]> DROP PROCEDURE IF EXISTS deleteById;

7>.流程控制

  存儲過程和函數中可以使用流程控制來控制語句的執行

  流程控制:
    IF:
      用來進行條件判斷。根據是否滿足條件,執行不同語句

    CASE:
      用來進行條件判斷,可實現比IF語句更復雜的條件判斷
    
    LOOP:
      重復執行特定的語句,實現一個簡單的循環

    LEAVE:
      用于跳出循環控制

    ITERATE:
      跳出本次循環,然后直接進入下一次循環

    REPEAT:
      有條件控制的循環語句。當滿足特定條件時,就會跳出循環語句

    WHILE:
      有條件控制的循環語句

總結

以上是生活随笔為你收集整理的MySQL/MariaDB数据库的存储过程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

深爱婷婷 | 欧美不卡视频在线 | 激情欧美一区二区三区 | 福利片视频区 | 成人免费中文字幕 | 96超碰在线| 免费性网站| 摸bbb搡bbb搡bbbb| 色婷婷狠狠五月综合天色拍 | 天天天综合 | 日韩系列 | 国产网站在线免费观看 | 91麻豆视频网站 | 涩涩爱夜夜爱 | 丁香五月亚洲综合在线 | www.天天干 | 在线视频一区二区 | 欧美孕妇视频 | 国产精品第7页 | 久久综合免费 | 92精品国产成人观看免费 | 在线观影网站 | www免费视频com━ | 国产又粗又猛又色又黄网站 | 中文字幕人成不卡一区 | 99超碰在线播放 | 午夜视频免费播放 | 中文字幕第一页在线播放 | 成人中心免费视频 | 射射色 | 久久不射电影院 | 涩涩网站在线 | 久久国产香蕉视频 | 天天综合区 | 国产精品第三页 | 国产精品一区二 | 中文字幕日韩一区二区三区不卡 | av在线永久免费观看 | 久久国产影视 | 高清国产在线一区 | 曰本免费av | 美女黄频在线观看 | 波多野结衣一区二区三区中文字幕 | 日日夜夜精品视频天天综合网 | 九九精品毛片 | 亚洲国产97在线精品一区 | 99在线精品观看 | 99久久精品国产一区二区三区 | 国产麻豆剧果冻传媒视频播放量 | 伊人天天| 欧美日韩免费视频 | 天堂资源在线观看视频 | 国产一线天在线观看 | 美女福利视频一区二区 | 久久精品美女视频 | 看v片| 一区二区 不卡 | 日日爽夜夜爽 | 狠狠操导航 | 一级片免费观看 | 亚洲综合视频在线播放 | 久久理论片 | 中国一级片在线播放 | 国产精品久久久99 | 国产精品99久久久久久有的能看 | 成人蜜桃网| 夜添久久精品亚洲国产精品 | 日韩精品一区二区三区免费观看视频 | 久久69av | 免费观看av网站 | 亚洲精品国产欧美在线观看 | 射久久 | 91视频在线观看下载 | 人人澡人人模 | 97操操操 | 91成年视频| 亚洲综合小说电影qvod | 国产字幕在线观看 | av电影一区| 999国内精品永久免费视频 | www天天操 | 奇米网8888| 久热色超碰 | 狠狠躁18三区二区一区ai明星 | 在线成人欧美 | 男女啪啪免费网站 | 日韩免费在线观看网站 | 男女视频久久久 | av免费片| 日韩超碰 | 久久免费美女视频 | 91精品少妇偷拍99 | 99精品欧美一区二区三区 | 久久亚洲日本 | 国产剧情一区二区在线观看 | 色先锋av资源中文字幕 | 日日干天天射 | 97在线观看免费视频 | 亚洲精品视频播放 | 黄色软件大全网站 | 91高清免费观看 | 久草在线视频中文 | 欧美精品乱码久久久久久 | av丝袜在线 | 五月婷婷综合在线观看 | 91香蕉嫩草 | 国偷自产中文字幕亚洲手机在线 | 怡红院久久 | 日韩高清不卡在线 | 欧美日韩国产欧美 | 免费日韩 精品中文字幕视频在线 | 欧美精品国产综合久久 | 日本中文在线播放 | jizz欧美性9 国产一区高清在线观看 | 婷婷精品国产一区二区三区日韩 | 在线看岛国av | 国产69精品久久久久99 | 国产精品久久久久av福利动漫 | 一区二区视频在线看 | 国产精品免费成人 | 亚洲日本va午夜在线电影 | 国产三级精品在线 | 精品久久久久久久久久久久久久久久 | 久草在线费播放视频 | 国产精品久久久久毛片大屁完整版 | 免费在线观看中文字幕 | 免费一级片视频 | 一区二区三区播放 | 人人讲 | 欧美另类69 | 国产精品一区二区麻豆 | 亚洲精品国产欧美在线观看 | 天天射天天 | 久久久久女人精品毛片 | 久久国产精品成人免费浪潮 | 人人看人人草 | 国产小视频在线看 | 成人视屏免费看 | 91亚洲精品久久久久图片蜜桃 | 国产99久久久国产精品免费二区 | 久久国产经典视频 | 国产又粗又猛又色又黄视频 | 日韩 在线 | 91桃色在线免费观看 | 色综合久久88色综合天天 | 黄污网站在线观看 | 日韩高清www| 1区2区3区在线观看 三级动图 | 亚洲蜜桃av | 日韩欧美视频一区 | 又色又爽又黄高潮的免费视频 | 狠狠色丁香 | 天天碰天天操视频 | 久久五月婷婷丁香社区 | 色婷婷av一区二 | www.五月激情.com | 欧美国产日韩一区二区三区 | 成人中文字幕+乱码+中文字幕 | 亚洲国产成人精品在线观看 | 91在线免费公开视频 | 成人av午夜 | 国产v在线 | 免费a v网站 | 亚洲涩涩网站 | 夜夜操网 | 黄色软件网站在线观看 | 玖玖在线资源 | 亚洲国产丝袜在线观看 | 夜夜躁日日躁狠狠久久88av | 日日夜夜免费精品视频 | 国产韩国日本高清视频 | 精品国产一区二区三区四 | av网站在线免费观看 | 波多野结衣久久资源 | 亚洲一区二区三区精品在线观看 | 欧美电影黄色 | 在线视频 精品 | 婷婷丁香五 | 在线播放你懂 | 日韩精品一区二区三区免费观看 | 波多野结衣最新 | 欧美性爽爽 | 狠狠干夜夜 | 国产精品99久久久久的智能播放 | 亚av在线| 日韩女同一区二区三区在线观看 | 亚洲va男人天堂 | 色999五月色 | 日韩毛片久久久 | www激情网 | 亚洲1区在线 | 黄色一级大片在线免费看产 | 天天干天天上 | 国产精品久久久久一区二区国产 | 天天色综合三 | 91精品国产高清自在线观看 | 色五丁香 | 91成人黄色| 亚洲国产免费看 | 久久这里只有精品久久 | 97精品国自产拍在线观看 | 天堂av在线网址 | 色婷婷亚洲精品 | 国产精品video | 亚洲激情在线视频 | www.午夜| 91麻豆精品国产午夜天堂 | av中文字幕网站 | 久久香蕉影视 | 日本久久99 | www.天天综合| 成人福利在线观看 | 亚洲欧洲精品一区二区精品久久久 | 亚洲欧美日韩精品一区二区 | 婷婷色在线视频 | 日韩精品欧美精品 | 欧美日韩精品免费观看 | 成人小视频在线播放 | 狠狠躁夜夜躁人人爽视频 | 精品一区二区免费在线观看 | 中文字幕在线播放av | 欧美aaa级片 | 久草香蕉在线 | 在线视频手机国产 | 欧美大片在线看免费观看 | 五月婷婷丁香六月 | 亚洲欧洲在线视频 | 久热免费在线 | 在线看片日韩 | 香蕉久草在线 | 欧美一区中文字幕 | 久久国产精品一国产精品 | 伊人超碰在线 | 日韩动漫免费观看高清完整版在线观看 | 九九九免费视频 | 国产成人综合图片 | 免费精品视频在线观看 | 亚洲视频在线免费观看 | 久久国产高清视频 | 麻豆精品国产传媒 | 在线观看视频精品 | 国产精品久久久久国产精品日日 | 日韩欧美视频二区 | 日本黄色一级电影 | 99re在线视频观看 | 国产一区二区视频在线 | 成人av免费播放 | 成人国产精品一区二区 | 91电影福利| 九九热精品在线 | 天天干天天操天天爱 | 国产成人三级一区二区在线观看一 | 中文国产字幕 | 久久tv| av三区在线| av观看在线观看 | 亚洲毛片在线观看. | 在线久热 | 久久免费视频3 | 欧美特一级 | av黄色影院 | 欧美日韩一区二区视频在线观看 | 久久人人爽人人人人片 | 色视频网站在线 | 99热精品国产一区二区在线观看 | 国产99区 | 免费av网站在线看 | 日本黄区免费视频观看 | av成人黄色| 精品久久久久久久久久岛国gif | 免费看污网站 | 欧美日韩中文字幕在线视频 | 国产91aaa| 免费视频久久 | 久久久久国产一区二区三区 | 国产精品久久久久久久久久了 | 国产精品99蜜臀久久不卡二区 | 国产一线二线三线性视频 | 五月天婷婷在线观看视频 | 白丝av免费观看 | 国产亚洲精品日韩在线tv黄 | 91丨九色丨蝌蚪丨对白 | 五月婷婷.com | 久久精品国产免费看久久精品 | 九九九电影免费看 | 欧美精彩视频在线观看 | 久久夜色精品国产欧美一区麻豆 | av看片网址 | 亚洲涩涩涩涩涩涩 | 日韩乱码在线 | 日韩免费三级 | 91人人射 | 亚洲影院国产 | 成人午夜电影在线观看 | 国产精品久久久久久久久免费看 | 色噜噜噜| av一区二区三区在线播放 | 久操视频在线免费看 | 99re视频在线观看 | 日韩精品一区二区三区免费观看 | 在线成人看片 | 一色av | 日韩特级毛片 | av大全在线播放 | 成人一级片免费看 | 中文国产在线观看 | 久久综合色婷婷 | 日日摸日日碰 | av中文在线 | 日日操日日干 | 天天色成人 | av线上看 | 69绿帽绿奴3pvideos | 亚洲综合视频在线 | 久久国产精品视频免费看 | 国产亚洲婷婷免费 | 日韩丝袜在线观看 | 国内外成人免费在线视频 | 麻豆视频免费版 | 亚洲国产精品一区二区尤物区 | 天天干,天天射,天天操,天天摸 | 国产一区免费 | 99精品免费久久久久久久久 | 欧美另类交在线观看 | av黄色免费看 | 欧美日韩后 | 中文字幕传媒 | 激情文学综合丁香 | 欧美一区二区精品在线 | 日本精品久久久一区二区三区 | 午夜色大片在线观看 | 六月丁香六月婷婷 | 国产免费亚洲高清 | 蜜臀久久99精品久久久久久网站 | av高清一区二区三区 | 国产精品九九九九九九 | 黄色小说免费观看 | 国产日韩中文字幕在线 | 中文字幕在线播放av | 国产91精品看黄网站在线观看动漫 | 天天综合91 | 中文字幕亚洲精品在线观看 | 在线视频观看你懂的 | 中文字幕一区二区三区久久蜜桃 | 激情综合色综合久久 | 精品国产精品久久一区免费式 | 五月天婷婷在线观看视频 | 久久久亚洲国产精品麻豆综合天堂 | 久草电影在线 | 色视频在线观看免费 | 欧美日韩3p | 999久久久免费精品国产 | 青青河边草免费直播 | av免费在线播放 | 国产一区欧美一区 | 久久精品久久99 | 中文字幕在线人 | 91传媒在线观看 | 日日夜夜操av | 久久精品国产第一区二区三区 | 国产日韩欧美在线观看视频 | 日韩欧美国产免费播放 | 国产精品1区2区3区在线观看 | 国产成人精品999在线观看 | 在线综合 亚洲 欧美在线视频 | 黄p在线播放 | 国产精品 日韩精品 | 婷婷新五月| 999久久久久 | 亚洲精品国 | 欧美片网站yy | 一区二区三区日韩在线 | 国产成人亚洲在线观看 | 69久久久| 国产精品久久久久久影院 | 日韩成人精品一区二区 | 黄色片视频免费 | 国产成人av网 | 久久久久久久久久久高潮一区二区 | 色综合久久久久综合 | 欧美日韩视频免费 | www.国产高清 | 国产高清网站 | 亚洲欧美视频在线播放 | 超级碰99| 91成人免费观看视频 | 午夜国产成人 | www最近高清中文国语在线观看 | 美女性爽视频国产免费app | 免费观看国产成人 | 中文字幕第一 | 免费在线成人av电影 | 五月激情六月丁香 | 天天操天天爱天天爽 | 国产一级视频在线免费观看 | 亚洲欧美视频在线 | 中文在线字幕免费观看 | 五月天激情视频 | 欧美乱淫视频 | 国产精品亚洲片在线播放 | 美国三级黄色大片 | 97人人精品 | 91天堂影院 | 在线观看视频在线 | 国产视频美女 | 日韩影视在线观看 | 夜夜干夜夜 | 国产一区二区不卡视频 | 亚洲精品视频国产 | 欧美一区二区三区在线播放 | 狠狠色丁香婷婷综合欧美 | 99精品在线看 | 色婷婷综合久久久久 | 摸bbb搡bbb搡bbbb | 2021国产精品视频 | 国产亚洲精品久久网站 | www毛片com| 国产精品99久久久久的智能播放 | 天天操天天射天天插 | 欧美精品做受xxx性少妇 | 2018亚洲男人天堂 | 911久久香蕉国产线看观看 | 日韩.com | 欧美一级久久久久 | 久久婷婷五月综合色丁香 | 精品国产视频在线观看 | 黄色av大片 | 日日激情 | 国产精品人成电影在线观看 | 久久精品久久国产 | 精品久久久久久一区二区里番 | 97人人超碰在线 | 日本最新中文字幕 | 国产黄色av | 国产视频一区二区在线 | 亚洲爱av| 欧美日韩视频一区二区三区 | 欧美日韩一区三区 | 国产成人三级在线播放 | 在线免费观看不卡av | 夜夜夜夜爽 | 日韩黄色免费 | 日免费视频 | 黄色中文字幕 | 一区二区三区在线免费观看 | 日日夜色 | 最近中文字幕高清字幕免费mv | 人人盈棋牌 | 深夜免费福利视频 | 日产av在线播放 | 精品国产一区二区三区久久影院 | 精品国产伦一区二区三区观看说明 | 91污在线观看 | 激情深爱.com | 天天做天天爱天天爽综合网 | 欧美一二三四在线 | 久色免费视频 | 夜夜高潮夜夜爽国产伦精品 | 国产一区成人在线 | 五月综合| a天堂一码二码专区 | 日韩欧美视频在线观看免费 | a特级毛片 | 天天干天天想 | 一区二区三区四区久久 | 国产69精品久久app免费版 | 中文字幕一区二区三区久久蜜桃 | 国产精品原创在线 | 国产a高清| 精品国产免费一区二区三区五区 | 一区二区三区在线影院 | 亚洲激情精品 | 免费观看版 | av黄色在线观看 | 久久系列| 国产v亚洲v | 婷婷四房综合激情五月 | 在线视频日韩精品 | 国产一区二区久久久久 | 久草视频国产 | 波多野结衣一区二区 | 精品999| 国产 亚洲 欧美 在线 | 九九在线视频免费观看 | 91精品国产麻豆 | 999久久久久久久久 69av视频在线观看 | 久久精品一区二区三区四区 | 免费在线观看不卡av | 成人毛片100免费观看 | 国产美腿白丝袜足在线av | 中文在线免费视频 | 五月开心六月伊人色婷婷 | 在线黄网站 | 国产精品入口麻豆www | 日韩欧美99| 999成人 | 国产成人精品电影久久久 | 人人插人人草 | 日韩丝袜视频 | 91av视频在线观看免费 | 欧美孕妇视频 | 97在线公开视频 | 日本高清xxxx| 国产这里只有精品 | 国产成人精品在线 | 国产精品久久久久久久久久久免费 | www.97视频| 亚洲国产欧美在线人成大黄瓜 | 免费视频国产 | 午夜精品视频一区 | 免费av在线播放 | 亚洲天天摸日日摸天天欢 | 久久五月精品 | 成人影片在线免费观看 | 伊人国产视频 | 成人av片免费看 | 91精品国产网站 | 久久综合中文色婷婷 | 久久在线看 | 亚洲九九影院 | 视频在线精品 | 98福利在线 | 国产成人精品一区二 | 999视频网站 | 日韩精品不卡在线 | 天天干天天干天天色 | 在线免费观看麻豆 | 亚洲综合色网站 | 国产精品免费在线 | 日本黄区免费视频观看 | 国产精品久久久久久久久婷婷 | 日韩久久网站 | 黄色一级在线视频 | 亚洲精品美女久久久久 | 中文字幕在线不卡国产视频 | 一个色综合网站 | 久久精品一二三区白丝高潮 | 久久精品网站视频 | 日韩影视精品 | 欧美视频99 | 毛片888| 日韩在线中文字幕视频 | 91精品国产综合久久婷婷香蕉 | 激情小说 五月 | 国产一级片播放 | 亚洲欧美综合精品久久成人 | 久章操 | 天天婷婷 | 毛片网站在线看 | 日本深夜福利视频 | 91成熟丰满女人少妇 | 亚洲日韩中文字幕在线播放 | 日本精品中文字幕在线观看 | 亚洲国产激情 | 成人午夜电影网站 | 国产中文字幕视频在线观看 | 岛国精品一区二区 | 亚洲人成网站精品片在线观看 | 国产理论在线 | 色狠狠综合天天综合综合 | 91伊人久久大香线蕉蜜芽人口 | 国产精品theporn | 日韩高清精品免费观看 | 在线视频欧美精品 | 久久超级碰 | 国产99久久久国产 | 日韩最新av在线 | 一级黄色毛片 | 日本不卡一区二区三区在线观看 | 亚洲高清视频在线播放 | 亚洲亚洲精品在线观看 | 在线视频日韩精品 | 韩国av在线 | 一级黄色a视频 | 精品国产一区二区三区蜜臀 | 亚洲精品男人天堂 | 色资源网免费观看视频 | 国产精品久久久久久模特 | 在线观看免费成人 | 丝袜+亚洲+另类+欧美+变态 | 国产精品初高中精品久久 | 五月婷婷网站 | 精品国产欧美一区二区 | 久久精品一二三 | 中文字幕一区二区三区久久 | 欧美成人理伦片 | 成年人在线视频观看 | 国产精品一区专区欧美日韩 | 中文免费观看 | 人人射人人爽 | 中文在线中文a | 色橹橹欧美在线观看视频高清 | 黄色av一级| 97国产| 91精品久久久久久 | 天天爽夜夜操 | 黄色片亚洲 | 国产一级精品在线观看 | 成年人视频免费在线播放 | 国产视频一区在线免费观看 | 国内三级在线 | 西西大胆啪啪 | 黄色小说免费在线观看 | 九九久久视频 | 97视频播放 | 在线观看香蕉视频 | 香蕉视频在线免费 | 91黄色免费看 | 日本h在线播放 | 四虎国产精品免费 | a成人v在线| 精品国产伦一区二区三区观看方式 | 日本午夜在线亚洲.国产 | 久久中文网| 国产一区电影在线观看 | 中文字幕在线观看视频一区 | 伊人久久婷婷 | 亚洲天天在线 | 亚洲九九精品 | 国产亚洲精品中文字幕 | 成人一级片免费看 | 欧美福利在线播放 | 日韩高清不卡一区二区三区 | 国产精品免费一区二区三区在线观看 | 色99久久| 亚洲精品视频在线观看网站 | 97人人艹 | 天天干天天干 | 综合久久影院 | 毛片888| 成人在线免费观看网站 | 久久久久久久久影视 | 久久视频网 | 成全在线视频免费观看 | 久久久久久久亚洲精品 | 亚洲区另类春色综合小说 | 国产精品99蜜臀久久不卡二区 | 91精品国产乱码在线观看 | 成人av免费网站 | av资源免费在线观看 | 欧美精品久久久久久 | 丁香花中文在线免费观看 | 伊人网av | 成人黄色免费在线观看 | 麻豆免费视频观看 | 337p欧美 | 在线观看日本高清mv视频 | 啪啪肉肉污av国网站 | 久久久久久久综合色一本 | 亚洲一级电影在线观看 | 狠狠五月天 | 成人久久亚洲 | 91在线九色 | 91免费视频黄 | 亚洲成人麻豆 | 成人免费观看网址 | 一区二区精品在线观看 | 久久99国产精品久久99 | 在线视频婷婷 | 91在线免费视频 | 国产免费xvideos视频入口 | 国产一区二区三区视频在线 | 丰满少妇高潮在线观看 | 天天色天天射天天操 | 欧美日韩3p | 日韩高清在线看 | 国产精品麻豆三级一区视频 | 亚洲欧美色婷婷 | 亚洲视频在线播放 | 久久av免费 | 国产成人久久77777精品 | 99久久精品国产一区二区成人 | 亚洲最新av在线网站 | 日韩欧美一区二区三区视频 | 奇米网网址 | 久久国产精品二国产精品中国洋人 | 五月婷婷激情综合网 | 日韩欧美综合视频 | 精品字幕 | 欧美亚洲国产精品久久高清浪潮 | 国产一区二区在线精品 | 区一区二区三区中文字幕 | 国产手机在线视频 | 国产在线不卡视频 | 久久精品99久久久久久2456 | 亚洲天堂精品视频 | 黄p在线播放| 亚洲黄色免费在线 | 色视频在线免费观看 | 一级片免费观看视频 | 国产h片在线观看 | 天天综合色网 | 亚洲精品乱码久久久久v最新版 | 久久久久久综合网天天 | 国产精品国内免费一区二区三区 | 五月婷香| 精品福利在线观看 | 99精品免费久久久久久久久 | 亚洲精品国产品国语在线 | 中文字幕在线观看第三页 | 国产精品igao视频网入口 | 国产精品黑丝在线观看 | 99中文视频在线 | 国产99在线| 国产剧情一区二区 | 精品美女视频 | 欧美精品一区在线发布 | 91精品视频免费观看 | 最近日本韩国中文字幕 | 在线观看的av | 亚洲精品视频在线 | 人人超在线公开视频 | 97视频亚洲 | 亚洲精品国产精品久久99 | 高清久久久久久 | 国产精品久久99综合免费观看尤物 | 九色91在线视频 | 五月开心六月婷婷 | 久久久wwww | 热99在线视频 | 久久免费视频观看 | 成年人看片 | 国产精品婷婷午夜在线观看 | 久久精品久久久久 | 久久久免费av | 久久久久久久国产精品影院 | 久久人人精 | 麻豆一精品传二传媒短视频 | 在线日韩三级 | 久久视屏网 | 丝袜少妇在线 | 国产精品福利午夜在线观看 | 国产精品9区| 天天在线视频色 | 手机在线日韩视频 | 99久久精品国产网站 | 国产香蕉视频 | 久久久91精品国产 | 亚洲国产精品人久久电影 | 一本一本久久a久久精品综合小说 | 尤物97国产精品久久精品国产 | 欧美影片 | 国产免费小视频 | 欧美一级电影在线观看 | av中文字幕免费在线观看 | 日本mv大片欧洲mv大片 | 天天操天天爱天天干 | 香蕉在线观看 | 国产成人av网 | 在线国产日本 | 毛片一区二区 | 一区二区三区精品久久久 | 99精品国产在热久久下载 | a色网站 | 在线观看中文字幕一区二区 | 日日爽日日操 | 久草影视在线观看 | 日韩一三区| 91精品在线观看入口 | 在线 精品 国产 | 99热这里只有精品8 久久综合毛片 | 97成人在线观看视频 | 免费欧美精品 | av高清网站在线观看 | 国产成人av一区二区三区在线观看 | 国产成人精品一区二区三区在线观看 | 国产精品久久久久四虎 | 国产精品免费不卡 | 麻豆视频国产在线观看 | 午夜丁香视频在线观看 | 午夜精品一区二区三区在线 | 激情久久一区二区三区 | 少妇视频在线播放 | 一级黄色大片 | 人人草在线视频 | 国产精品精品国产色婷婷 | aaa黄色毛片 | 91视频麻豆视频 | 男女啪啪免费网站 | 日本黄色免费在线 | 婷婷丁香狠狠爱 | 亚洲一级片在线观看 | 久久久视屏 | 亚洲精品一区二区久 | 99热99| 国产成人在线观看免费 | 婷婷六月丁香激情 | 国产一在线精品一区在线观看 | 激情综合网在线观看 | 中文字幕资源网在线观看 | 久久九九久久九九 | 欧美精品久久久久久久久老牛影院 | 热久久这里只有精品 | 国产精品美女毛片真酒店 | 久久一精品 | www中文在线| 亚洲九九九在线观看 | 国产国产人免费人成免费视频 | 久久久网页 | 玖玖视频精品 | 欧美韩日精品 | 亚洲精品五月天 | 欧美男同视频网站 | 99在线视频观看 | 狠狠做深爱婷婷综合一区 | 亚洲香蕉在线观看 | 亚洲精品国产精品99久久 | 美女啪啪图片 | 国色天香第二季 | 波多野结衣资源 | 99r在线 | 中中文字幕av | 久久国产精品电影 | 欧美日韩大片在线观看 | 黄污网| 黄色小说免费观看 | 国产成人不卡 | 欧美黄色高清 | 免费高清在线视频一区· | 国产精品一区二区三区久久久 | 亚洲精品乱码久久久久久久久久 | 狠狠干网| 欧美色图狠狠干 | 国产精品久久伊人 | 中文字幕在线观看av | 天天干天天干天天 | 欧美日韩91 | 一区二区精品在线观看 | 日本久久成人中文字幕电影 | 国色天香永久免费 | 毛片888 | 国产人成一区二区三区影院 | 色资源网免费观看视频 | 天天操夜夜操天天射 | 国产亚洲精品bv在线观看 | 亚洲综合色丁香婷婷六月图片 | 国产一级三级 | 国产成人精品福利 | 国产一区高清在线 | 91精品小视频 | 欧美色道 | 精品久久美女 | 欧美一级片免费 | 日韩精品资源 | 三级黄色在线观看 | 久久激情精品 | 欧美成人精品欧美一级乱 | 国内小视频在线观看 | 久久免费观看视频 | 最近乱久中文字幕 | 欧美精品国产综合久久 | 久久久国产精品一区二区三区 | 国产无遮挡又黄又爽馒头漫画 | 天天透天天插 | 久久综合狠狠综合久久狠狠色综合 | 亚洲成人av在线 | www.久久爱.cn | 99久久精品免费视频 | 国产视频在线免费观看 | 日韩中文在线播放 | 日韩免费一区二区三区 | 亚洲国产免费 | 中日韩男男gay无套 日韩精品一区二区三区高清免费 | 天天搞天天干 | 黄色网www | 久久久精品在线观看 | 青青色影院 | 亚洲激情 欧美激情 | 欧美激情精品久久久 | 97**国产露脸精品国产 | 99视频这里有精品 | 久久婷婷精品视频 | 日日夜夜天天射 | 9色在线视频| 精品自拍av | 亚洲精品欧美精品 | 亚洲做受高潮欧美裸体 | 欧美午夜性生活 | 色多多在线观看 | 亚洲午夜精品一区二区三区电影院 | 九九久久久久久久久激情 | 日韩精品免费在线观看 | 国产精品久久久久久久久久久杏吧 | av福利超碰网站 | 亚洲精品大片www | 黄色片免费电影 | 新版资源中文在线观看 | 91热| 精品视频在线播放 | 在线а√天堂中文官网 | 成人av电影网址 | 国产精品99久久久久的智能播放 | 国产精品免费视频观看 | 亚洲精品国产日韩 | 免费成人av在线看 | 久久9精品 | 日韩av免费大片 | 久久精品这里精品 | 欧美xxxxx在线视频 | 免费视频黄色 | 日韩欧美视频一区二区 | 黄色小说免费观看 | 涩涩色亚洲一区 | 国产小视频免费在线网址 | 久久精品久久精品 | 亚洲爱视频 | 狠狠色综合欧美激情 | 九九电影在线 | 国产婷婷在线观看 | 国产精品18久久久久久不卡孕妇 | 天天操天天添 | 亚洲成a人片在线www | 欧美日韩国产精品爽爽 | 在线高清av| 五月色综合| 在线国产视频 | 日韩欧美一区二区三区免费观看 | 久久av影视| 国产精品四虎 | 狠狠操影视 | 日日草夜夜操 | 黄色大片日本 | 国产原创av在线 | 综合精品久久久 | 日韩电影一区二区三区在线观看 | 亚洲国产高清在线 | 国产成人一区二区三区在线观看 | 久久99久久99精品免视看婷婷 | 中文字幕国产亚洲 | 精品成人免费 | 色综合综合 | 欧美色噜噜噜 | 久久久久国产精品视频 | 99re在线视频观看 | 永久精品视频 | 久草在线免费在线观看 | 色丁香久久 | 亚洲91精品在线观看 | 中文字幕123区 | 在线精品视频免费播放 | 在线观看小视频 | 91pony九色丨交换 | 成人国产一区二区 | 亚洲精品中文字幕在线观看 | 激情 一区二区 | 激情五月在线视频 | 日本xxxx裸体xxxx17 | 日本在线h | 久久无码av一区二区三区电影网 | 天天鲁天天干天天射 | 中文字幕最新精品 | 2019av在线视频| 又黄又刺激视频 | 在线中文字幕一区二区 | 九精品 | 中文资源在线官网 | 在线观看av片 | 国产精品久久久久国产精品日日 | 夜夜操夜夜干 | 中文字幕视频三区 | 亚洲国产精品久久久久 | 午夜精品av | 久久国产亚洲精品 | 欧美性色综合网 | 激情五月婷婷综合 | 久久成人精品视频 | 国产日韩高清在线 | 精品超碰 | 五月婷久 | 久久综合婷婷综合 | 中国一区二区视频 | 久久人人爽人人爽人人片av免费 | 97国产在线视频 | 国产区在线视频 | 中文字幕在线高清 | 成人在线免费看视频 | 欧美日韩不卡一区二区 | 日韩av免费在线电影 | 亚洲.www | 天天操网址 | 国产激情小视频在线观看 | 国产1区2区3区在线 亚洲自拍偷拍色图 | 中文字幕在线观看网址 | 国产精品乱码高清在线看 | 天天干天天射天天操 | 在线成人av | 亚洲精品视频在线 | 久草精品视频在线播放 | 成年在线观看 | av色一区| 狠狠色丁香婷婷综合最新地址 | 国产人免费人成免费视频 | 色综合天天天天做夜夜夜夜做 | 国产偷在线| 日韩视频一区二区三区在线播放免费观看 | 国产一级高清 | 精品一区电影国产 | 96久久久|