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

ตัวแปรที่ผู้ใช้กำหนดเองกับตัวแปรในเครื่องใน MySQL?


ตัวแปรที่กำหนดโดยผู้ใช้เรียกอีกอย่างว่าตัวแปรเฉพาะเซสชัน เป็นประเภทของตัวแปรแบบหลวม ๆ ซึ่งสามารถเริ่มต้นได้จากที่ใดที่หนึ่งในเซสชันและมีค่าของตัวแปรที่ผู้ใช้กำหนดจนกว่าเซสชันจะสิ้นสุด

ตัวแปรที่ผู้ใช้กำหนดขึ้นต้นด้วยสัญลักษณ์ @ ตัวอย่างเช่น:

@anyVariableName;

มีสองวิธีที่คุณสามารถเริ่มต้นตัวแปรที่ผู้ใช้กำหนดเองได้ คุณสามารถใช้คำสั่ง SET หรือใช้แบบสอบถาม SELECT วิธีแรกมีดังนี้:

SET @anyVariableName=anyValue;

วิธีที่สองมีดังนี้:

SELECT @anyVariableName :=anyValue;

หากคุณไม่ได้ใช้โคลอน (:) ในเคียวรี SELECT จะถือว่ามันเป็นนิพจน์ ผลลัพธ์จะเป็นจริงหรือเท็จ:

mysql> เลือก @m=10;

ต่อไปนี้เป็นผลลัพธ์:

<ก่อนหน้า>+-------+| @m=10 |+------+| 1 |+-------+1 แถวในชุด (0.00 วินาที)

สามารถใช้ตัวแปรโลคัลในกระบวนงานที่เก็บไว้ ฟังก์ชัน ฯลฯ ซึ่งใช้กับคีย์เวิร์ด DECLARE ไม่มี @ นำหน้าเหมือนตัวแปรที่ผู้ใช้กำหนด

ไวยากรณ์มีดังต่อไปนี้สำหรับตัวแปรท้องถิ่น

ประกาศประเภทข้อมูลVariableNameของคุณ

หมายเหตุ :ความแตกต่างหลัก ระหว่างตัวแปรโลคัลและตัวแปรที่ผู้ใช้กำหนดเองคือ ตัวแปรโลคัลจะเริ่มต้นใหม่ด้วยค่า NULL ทุกครั้งที่มีการเรียกกระบวนงานที่เก็บไว้ในขณะที่ตัวแปรเฉพาะเซสชันหรือตัวแปรที่ผู้ใช้กำหนดเองไม่ได้เริ่มต้นใหม่ด้วย NULL ผู้ใช้รายอื่นไม่สามารถมองเห็นตัวแปรที่กำหนดโดยผู้ใช้ที่กำหนดโดยผู้ใช้รายหนึ่ง ตัวแปรเซสชันใดก็ตามสำหรับผู้ใช้ที่กำหนดจะถูกทำลายโดยอัตโนมัติเมื่อผู้ใช้ออกจากระบบ

นี่คือตัวอย่างตัวแปรเฉพาะเซสชันและตัวแปรในเครื่องพร้อมกระบวนงานที่เก็บไว้ แบบสอบถามเพื่อสร้างกระบวนงานที่เก็บไว้ด้วยตัวแปรท้องถิ่นและตัวแปรที่ผู้ใช้กำหนดเองมีดังนี้:

mysql> DELIMITER //mysql> CREATE PROCEDURE sp_LocalAndUserDefinedVariableDemo() -> BEGIN -> DECLARE localVariable int default 10; -> SET localVariable=localVariable+10; -> SET @userVariable=@userVariable+10; -> เลือก localVariable; -> เลือก @userVariable; -> สิ้นสุด; -> //แบบสอบถามตกลง 0 แถวได้รับผลกระทบ (0.39 วินาที) mysql> DELIMITER;

ตอนนี้ตั้งค่าสำหรับตัวแปรที่ผู้ใช้กำหนด แบบสอบถามมีดังนี้:

mysql> SET @userVariable=10;Query OK, 0 แถวได้รับผลกระทบ (0.00 วินาที)

ตอนนี้เรียกกระบวนงานที่เก็บไว้ ในการโทรครั้งแรก ตัวแปรที่กำหนดโดยผู้ใช้จะเป็น 10+10=20 ในขณะที่ตัวแปรในเครื่องจะเป็น 10+10=20

เรียกกระบวนงานที่เก็บไว้โดยใช้คำสั่งโทร:

mysql> โทร sp_LocalAndUserDefinedVariableDemo();

ต่อไปนี้เป็นผลลัพธ์:

<ก่อนหน้า>+--------------+| localVariable |+--------------+| 20 |+-----------------------+1 แถวในชุด (0.32 วินาที)+--------------+| @userVariable |+--------------+| 20 |+-----------------------+1 แถวในชุด (0.34 วินาที) แบบสอบถามตกลง 0 แถวได้รับผลกระทบ (0.36 วินาที)

ในการเรียกครั้งที่สอง ตัวแปรที่กำหนดโดยผู้ใช้จะเก็บค่า 20 และเพิ่ม 10 เช่น 20+10=30 ในขณะที่ตัวแปรในเครื่องเริ่มต้นใหม่อีกครั้งด้วย 10 และเพิ่ม 10 เช่น 10+10=20

เรียกกระบวนงานที่เก็บไว้และตรวจสอบผลลัพธ์ตัวอย่าง:

mysql> โทร sp_LocalAndUserDefinedVariableDemo();

ต่อไปนี้เป็นผลลัพธ์:

<ก่อนหน้า>+--------------+| localVariable |+--------------+| 20 |+-----------------------+1 แถวในชุด (0.00 วินาที)+--------------+| @userVariable |+--------------+| 30 |+-----------------------+1 แถวในชุด (0.01 วินาที)แบบสอบถามตกลง 0 แถวได้รับผลกระทบ (0.02 วินาที)

ในการเรียกครั้งที่สาม ตัวแปรที่กำหนดโดยผู้ใช้จะเก็บค่า 30 และเพิ่ม 10 เช่น 30+10=40 ในขณะที่ตัวแปรในเครื่องเริ่มต้นใหม่อีกครั้งด้วย 10 และเพิ่ม 10 เช่น 10+10=20

ตอนนี้คุณสามารถพูดได้ว่าในทุกโพรซีเดอร์ที่เรียกใช้ตัวแปรโลคัลจะเริ่มต้นใหม่ด้วยค่าบางอย่างซึ่งอาจเป็น NULL หรือค่าอื่นเช่นในกรณีของฉัน ฉันได้ระบุค่าเริ่มต้นซึ่งก็คือ 10 ซึ่งหมายความว่าจะตั้งค่าตัวแปรท้องถิ่นด้วยค่า 10 ใน ทุกการเรียกโพรซีเดอร์ในขณะที่ตัวแปรที่ผู้ใช้กำหนดไม่ทำ