Computer >> Máy Tính >  >> Lập trình >> MySQL

Làm cách nào để tránh giá trị biến trong thủ tục được lưu trữ MySQL thay đổi khi bản ghi được cập nhật?

Chúng tôi sẽ tạo một thủ tục được lưu trữ không thay đổi giá trị biến bất cứ khi nào giá trị được cập nhật.

Đầu tiên chúng ta hãy tạo một bảng -

mysql> create table DemoTable
   (
   Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
   Value int
   );
Query OK, 0 rows affected (0.63 sec)

Chèn một số bản ghi vào bảng bằng lệnh chèn -

mysql> insert into DemoTable(Value) values(100);
Query OK, 1 row affected (0.13 sec)
Display all records from the table using select statement :
mysql> select *from DemoTable;

Đầu ra

+----+-------+
| Id | Value |
+----+-------+
| 1 | 100    |
+----+-------+
1 row in set (0.00 sec)

Sau đây là thủ tục được lưu trữ hiển thị giá trị cũ sau khi cập nhật -

mysql> DELIMITER //
   mysql> CREATE PROCEDURE updateValue100()
   BEGIN
      DECLARE myValue int;
      select @myValue :=(select Value from DemoTable where Id=1);
      select @myValue;
      update DemoTable set Value=200 where Id=1;
      select @myValue :=(select Value from DemoTable where Id=1);
      select @myValue;
   END
   //
   Query OK, 0 rows affected (0.21 sec)
mysql> DELIMITER ;

Bây giờ bạn có thể gọi thủ tục đã lưu trữ bằng lệnh CALL -

mysql> call updateValue100();

Đầu ra

+-------------------------------------------------------+
| @myValue :=(select Value from DemoTable where Id=1)   |
+-------------------------------------------------------+
| 100                                                   |
+-------------------------------------------------------+
1 row in set (0.00 sec)
+----------+
| @myValue                                              |
+----------+
| 100                                                   |
+----------+
1 row in set (0.01 sec)
+-------------------------------------------------------+
| @myValue :=(select Value from DemoTable where Id=1)   |
+-------------------------------------------------------+
| 200                                                   |
+-------------------------------------------------------+
1 row in set (0.16 sec)
+----------+
| @myValue |
+----------+
| 200      |
+----------+
1 row in set (0.17 sec)
Query OK, 0 rows affected (0.18 sec)