Computer >> 컴퓨터 >  >> 프로그램 작성 >> MySQL

레코드가 업데이트될 때 MySQL 저장 프로시저의 변수 값이 변경되지 않도록 하려면 어떻게 해야 합니까?

<시간/>

값이 업데이트될 때마다 변수 값을 변경하지 않는 저장 프로시저를 생성합니다.

먼저 테이블을 생성하겠습니다 -

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

삽입 명령을 사용하여 테이블에 일부 레코드 삽입 -

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;

출력

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

다음은 업데이트 후 이전 값을 보여주는 저장 프로시저입니다 -

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 ;

이제 CALL 명령을 사용하여 저장 프로시저를 호출할 수 있습니다 -

mysql> call updateValue100();

출력

+-------------------------------------------------------+
| @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)