Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ฉันจะหลีกเลี่ยงค่าตัวแปรในกระบวนงานที่เก็บไว้ของ MySQL เพื่อเปลี่ยนแปลงเมื่อมีการอัพเดตเร็กคอร์ดได้อย่างไร


เราจะสร้างกระบวนงานที่เก็บไว้ซึ่งจะไม่เปลี่ยนค่าตัวแปรทุกครั้งที่มีการอัปเดตค่า

ให้เราสร้างตารางก่อน -

mysql> สร้างตาราง DemoTable (รหัส int ไม่ใช่ NULL AUTO_INCREMENT PRIMARY KEY, Value int ); ตกลง ตกลง 0 แถวได้รับผลกระทบ (0.63 วินาที)

แทรกระเบียนบางส่วนในตารางโดยใช้คำสั่ง insert -

mysql> แทรกลงในค่า DemoTable(Value) (100) แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.13 วินาที) แสดงระเบียนทั้งหมดจากตารางโดยใช้คำสั่ง select :mysql> เลือก *จาก DemoTable;

ผลลัพธ์

<ก่อนหน้า>+----+-------+| รหัส | ความคุ้มค่า |+---+-------+| 1 | 100 |+----+-------+1 แถวในชุด (0.00 วินาที)

ต่อไปนี้เป็นขั้นตอนการจัดเก็บที่แสดงค่าเก่าหลังจากอัปเดต -

mysql> DELIMITER // mysql> CREATE PROCEDURE updateValue100() เริ่มต้น ประกาศ myValue int; เลือก @myValue :=(เลือกค่าจาก DemoTable โดยที่ Id=1); เลือก @myValue; อัปเดต DemoTable set Value=200 โดยที่ Id=1; เลือก @myValue :=(เลือกค่าจาก DemoTable โดยที่ Id=1); เลือก @myValue; END // แบบสอบถามตกลง 0 แถวได้รับผลกระทบ (0.21 วินาที) mysql> DELIMITER;

ตอนนี้คุณสามารถเรียกกระบวนงานที่เก็บไว้โดยใช้คำสั่ง CALL -

mysql> โทร updateValue100();

ผลลัพธ์

<ก่อน>+--------------------------------------------- ---------+| @myValue :=(เลือกค่าจาก DemoTable โดยที่ Id=1) |+------------------------------------------------ ------------------------------------+| 100 |+---------------------------------------------------------- --------+1 แถวในชุด (0.00 วินาที)+----------+| @myValue |+----------+| 100 |+----------+1 แถวในชุด (0.01 วินาที)+--------------------------- ------------------------------+| @myValue :=(เลือกค่าจาก DemoTable โดยที่ Id=1) |+------------------------------------------------ ------------------------------------+| 200 |+---------------------------------------------------------- --------+1 แถวในชุด (0.16 วินาที)+----------+| @myValue |+----------+| 200 |+----------+1 แถวในชุด (0.17 วินาที)แบบสอบถามตกลง 0 แถวได้รับผลกระทบ (0.18 วินาที)