Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL tạo cú pháp thủ tục được lưu trữ với dấu phân cách

Bắt đầu với cú pháp thủ tục được lưu trữ trong MySQL (sử dụng terminal):

1. Mở một thiết bị đầu cuối và đăng nhập vào mysql như thế này:

[email protected]:~$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
mysql> 

2. Hãy xem để biết bạn có bất kỳ thủ tục nào không:

mysql> show procedure status;
+-----------+---------------+-----------+---------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
| Db        | Name          | Type      | Definer | Modified            | Created             | Security_type | Comment | character_set_client | collation_connection | Database Collation |
+-----------+---------------+-----------+---------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
|   yourdb  | sp_user_login | PROCEDURE | [email protected]%  | 2013-12-06 14:10:25 | 2013-12-06 14:10:25 | DEFINER       |         | utf8                 | utf8_general_ci      | latin1_swedish_ci  |
+-----------+---------------+-----------+---------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
1 row in set (0.01 sec)

Tôi có một định nghĩa, bạn có thể không có gì để bắt đầu.

3. Thay đổi cơ sở dữ liệu, xóa nó.

mysql> use yourdb;
Database changed

mysql> drop procedure if exists sp_user_login;
Query OK, 0 rows affected (0.01 sec)
    
mysql> show procedure status;
Empty set (0.00 sec)
    

4. Ok vì vậy bây giờ tôi không có thủ tục được lưu trữ nào được xác định. Tạo đơn giản nhất:

mysql> delimiter //
mysql> create procedure foobar()
    -> begin select 'hello'; end//
Query OK, 0 rows affected (0.00 sec)

// sẽ giao tiếp với thiết bị đầu cuối khi bạn nhập xong các lệnh cho thủ tục được lưu trữ. tên thủ tục được lưu trữ là foobar. nó không cần tham số và sẽ trả về "hello".

5. Hãy xem nó có ở đó không, hãy nhớ đặt lại dấu phân cách của bạn !:

 mysql> show procedure status;
 -> 
 -> 

Gotcha! Tại sao điều này không hoạt động? Bạn đặt dấu phân cách thành // nhớ? Đặt nó trở lại ;

6. Đặt lại dấu phân cách và xem quy trình:

mysql> delimiter ;
mysql> show procedure status;
+-----------+--------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
| Db        | Name   | Type      | Definer        | Modified            | Created             | Security_type | Comment | character_set_client | collation_connection | Database Collation |
+-----------+--------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
| yourdb    | foobar | PROCEDURE | [email protected] | 2013-12-06 14:27:23 | 2013-12-06 14:27:23 | DEFINER       |         | utf8                 | utf8_general_ci      | latin1_swedish_ci  |
+-----------+--------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
1 row in set (0.00 sec)

   

7. Chạy nó:

mysql> call foobar();
+-------+
| hello |
+-------+
| hello |
+-------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)

Hello world đã hoàn thành, hãy ghi đè lên nó bằng một thứ gì đó tốt hơn.

8. Thả foobar, xác định lại nó để chấp nhận một tham số và chạy lại nó:

mysql> drop procedure foobar;
Query OK, 0 rows affected (0.00 sec)

mysql> show procedure status;
Empty set (0.00 sec)

mysql> delimiter //
mysql> create procedure foobar (in var1 int)
    -> begin select var1 + 2 as result;
    -> end//
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;
mysql> call foobar(5);
+--------+
| result |
+--------+
|      7 |
+--------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)

Tốt đẹp! Chúng tôi đã thực hiện một thủ tục nhận đầu vào, sửa đổi nó và thực hiện đầu ra. Bây giờ chúng ta hãy thực hiện một biến out.

9. Xóa foobar, Tạo một biến ngoài, chạy nó:

mysql> delimiter ;
mysql> drop procedure foobar;
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter //
mysql> create procedure foobar(out var1 varchar(100))
    -> begin set var1="kowalski, what's the status of the nuclear reactor?";
    -> end//
Query OK, 0 rows affected (0.00 sec)


mysql> delimiter ;
mysql> call foobar(@kowalski_status);
Query OK, 0 rows affected (0.00 sec)

mysql> select @kowalski_status;
+-----------------------------------------------------+
| @kowalski_status                                    |
+-----------------------------------------------------+
| kowalski, what's the status of the nuclear reactor? |
+-----------------------------------------------------+
1 row in set (0.00 sec)

10. Ví dụ về cách sử dụng INOUT trong MySQL:

mysql> select 'ricksays' into @msg;
Query OK, 1 row affected (0.00 sec)


mysql> delimiter //
mysql> create procedure foobar (inout msg varchar(100))
-> begin
-> set msg = concat(@msg, " never gonna let you down");
-> end//


mysql> delimiter ;


mysql> call foobar(@msg);
Query OK, 0 rows affected (0.00 sec)


mysql> select @msg;
+-----------------------------------+
| @msg                              |
+-----------------------------------+
| ricksays never gonna let you down |
+-----------------------------------+
1 row in set (0.00 sec)

Ok, nó đã hoạt động, nó đã nối các chuỗi lại với nhau. Vì vậy, bạn đã xác định một biến msg, được chuyển trong biến đó vào thủ tục được lưu trữ gọi là foobar và @msg được foobar ghi vào.

Bây giờ bạn đã biết cách tạo các thủ tục được lưu trữ với dấu phân cách. Tiếp tục hướng dẫn này tại đây, bắt đầu với các biến trong quy trình được lưu trữ: http ://net.tutsplus.com/tutorials/an-introduction-to-stored-procedures/



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySql:MyISAM so với Inno DB!

  2. Hỗ trợ giao dịch công cụ MyIsam

  3. Cách tạo cơ sở dữ liệu từ tập lệnh trong MySQL

  4. Câu lệnh SQL CASE

  5. Truy vấn chậm khi sử dụng ORDER BY