วิธีการประกาศตัวแปรใน MySQL เพื่อให้แบบสอบถามที่สองของฉันสามารถใช้งานได้อย่างไร
ฉันต้องการเขียนสิ่งที่ชอบ:
SET start = 1;
SET finish = 10;
SELECT * FROM places WHERE place BETWEEN start AND finish;
          วิธีการประกาศตัวแปรใน MySQL เพื่อให้แบบสอบถามที่สองของฉันสามารถใช้งานได้อย่างไร
ฉันต้องการเขียนสิ่งที่ชอบ:
SET start = 1;
SET finish = 10;
SELECT * FROM places WHERE place BETWEEN start AND finish;
          คำตอบ:
มีตัวแปรหลักสามประเภทใน MySQL:
ตัวแปรที่ผู้ใช้กำหนด (นำหน้าด้วย@):  
คุณสามารถเข้าถึงตัวแปรที่ผู้ใช้กำหนดเองโดยไม่ต้องประกาศหรือเริ่มต้น หากคุณอ้างถึงตัวแปรที่ยังไม่ได้เริ่มต้นมันมีค่าNULLและชนิดของสตริง
SELECT @var_any_var_name
คุณสามารถเริ่มต้นตัวแปรโดยใช้SETหรือSELECTคำสั่ง:
SET @start = 1, @finish = 10;    
หรือ
SELECT @start := 1, @finish := 10;
SELECT * FROM places WHERE place BETWEEN @start AND @finish;
ตัวแปรผู้ใช้สามารถกำหนดค่าจากชุดข้อมูลชนิด จำกัด : จำนวนเต็ม, ทศนิยม, ทศนิยม, ทศนิยมหรือสตริงไบนารี่หรือไม่ใช่ไบนารีหรือค่า NULL
ตัวแปรที่ผู้ใช้กำหนดเป็นแบบเฉพาะเซสชัน นั่นคือตัวแปรผู้ใช้ที่กำหนดโดยลูกค้ารายหนึ่งไม่สามารถมองเห็นหรือใช้โดยลูกค้ารายอื่น
พวกเขาสามารถนำมาใช้ในSELECTคำสั่งโดยใช้ขั้นสูง MySQL เทคนิคตัวแปรของผู้ใช้
ตัวแปรท้องถิ่น (ไม่มีคำนำหน้า):
จำเป็นต้องประกาศตัวแปรท้องถิ่นDECLAREก่อนการใช้งาน
สามารถใช้เป็นตัวแปรโลคัลและพารามิเตอร์อินพุตภายในโพรซีเดอร์ที่เก็บ:
DELIMITER //
CREATE PROCEDURE sp_test(var1 INT) 
BEGIN   
    DECLARE start  INT unsigned DEFAULT 1;  
    DECLARE finish INT unsigned DEFAULT 10;
    SELECT  var1, start, finish;
    SELECT * FROM places WHERE place BETWEEN start AND finish; 
END; //
DELIMITER ;
CALL sp_test(5);
หากข้อจะหายไปค่าเริ่มต้นคือDEFAULTNULL
ขอบเขตของตัวแปรท้องถิ่นคือBEGIN ... ENDบล็อกที่มีการประกาศ
ตัวแปรระบบเซิร์ฟเวอร์ (นำหน้าด้วย@@):
เซิร์ฟเวอร์ MySQL รักษาตัวแปรระบบจำนวนมากที่กำหนดค่าเป็นค่าเริ่มต้น พวกเขาสามารถเป็นชนิดGLOBAL, หรือSESSIONBOTH
ตัวแปรทั่วโลกส่งผลกระทบต่อการดำเนินงานโดยรวมของเซิร์ฟเวอร์ในขณะที่ตัวแปรเซสชันส่งผลต่อการดำเนินงานสำหรับการเชื่อมต่อลูกค้า
เพื่อดูค่าที่ใช้ในปัจจุบันโดยเซิร์ฟเวอร์ที่ใช้ใช้คำสั่งหรือSHOW VARIABLESSELECT @@var_name
SHOW VARIABLES LIKE '%wait_timeout%';
SELECT @@sort_buffer_size;
พวกเขาสามารถตั้งค่าเมื่อเริ่มต้นเซิร์ฟเวอร์โดยใช้ตัวเลือกในบรรทัดคำสั่งหรือในไฟล์ตัวเลือก ส่วนใหญ่สามารถเปลี่ยนแปลงได้แบบไดนามิกในขณะที่เซิร์ฟเวอร์กำลังทำงานโดยใช้SET GLOBALหรือSET SESSION:
-- Syntax to Set value to a Global variable:
SET GLOBAL sort_buffer_size=1000000;
SET @@global.sort_buffer_size=1000000;
-- Syntax to Set value to a Session variable:
SET sort_buffer_size=1000000;
SET SESSION sort_buffer_size=1000000;
SET @@sort_buffer_size=1000000;
SET @@local.sort_buffer_size=10000;=โอเปอร์เรเตอร์ไม่ได้ผลสำหรับฉัน มันใช้งานได้ดีเมื่อฉันใช้:=โอเปอเรเตอร์
                    =ผู้ประกอบการใช้งานได้เฉพาะในSETข้อ สำหรับการกำหนดค่าให้กับตัวแปรในSELECTเคียวรีคุณสามารถใช้:=โอเปอเรเตอร์เช่นSELECT @start := 1
                    ตลาดหลักทรัพย์
SET @var_name = value 
หรือ
SET @var := value
ทั้งผู้ประกอบการ=และ=ได้รับการยอมรับ
เลือก
SELECT col1, @var_name := col2 from tb_name WHERE "conditon";
หากพบหลายชุดเร็กคอร์ดเฉพาะค่าสุดท้ายใน col2 คือ keep (override);
SELECT col1, col2 INTO @var_name, col3 FROM .....
ในกรณีนี้ผลลัพธ์ของการเลือกไม่มีค่า col2
ใช้ทั้งสองวิธี
- TRIGGER_BEFORE_INSERT --- การตั้งค่าคอลัมน์จากการคำนวณ
...
SELECT count(*) INTO @NR FROM a_table WHERE a_condition;
SET NEW.ord_col =  IFNULL( @NR, 0 ) + 1;
...
              =และ:=คืออะไร?
                    SELECT DISTINCT IFNULL(@var:=Name,'unknown') FROM Customers ORDER BY <some non-indexed expression> LIMIT 10ปรากฏขึ้นเพื่อประเมินการกำหนดตัวแปรก่อนที่จะดำเนินการตามลำดับเพื่อให้ค่าที่ส่งคืนของ @var อาจไม่เกี่ยวข้องกับแถวใด ๆ ที่ส่งคืน แม้ว่าเอกสารจะไม่พูดภายใต้เงื่อนไขว่าสิ่งนี้สามารถเกิดขึ้นได้
                    ใช้ชุดหรือเลือก
SET @counter := 100;
SELECT @variable_name := value;
ตัวอย่าง:
SELECT @price := MAX(product.price)
FROM product 
              ตัวแปรประเภทต่างๆ:
DECLARE ได้รับอนุญาตเฉพาะในคำสั่งผสม BEGIN ... END และจะต้องอยู่ที่จุดเริ่มต้นก่อนที่จะมีคำสั่งอื่นใด
ดังนั้นหากคุณกำหนดโปรแกรมที่เก็บไว้และต้องการ "ตัวแปรท้องถิ่น" คุณจะต้องวางอักขระ @ และตรวจสอบให้แน่ใจว่าคำสั่ง DECLARE ของคุณอยู่ที่จุดเริ่มต้นของบล็อกโปรแกรมของคุณ มิฉะนั้นหากต้องการใช้ "ตัวแปรผู้ใช้" ให้วางคำสั่ง DECLARE
นอกจากนี้คุณจะต้องล้อมรอบแบบสอบถามของคุณในวงเล็บเพื่อดำเนินการเป็นแบบสอบถามย่อย:
SET @countTotal = (เลือก COUNT (*) จาก nGrams);
มิฉะนั้นคุณสามารถใช้ SELECT ... เข้าสู่:
เลือก COUNT (*) เข้าสู่ @countTotal จาก nGrams;
สำหรับบุคคลใดก็ตามที่ใช้ @variable ในฟังก์ชัน concat_ws เพื่อรับค่าที่ต่อกันอย่าลืมกำหนดค่าเริ่มต้นใหม่ด้วยค่าว่าง มิฉะนั้นจะสามารถใช้ค่าเก่าสำหรับเซสชันเดียวกัน
Set @Ids = '';
select 
  @Ids := concat_ws(',',@Ids,tbl.Id),
  tbl.Col1,
  ...
from mytable tbl;
              ประกาศ:
SET @a = 1;
การใช้งาน:
INSERT INTO `t` (`c`) VALUES (@a);
 declare Regione int;   
 set Regione=(select  id from users
 where id=1) ;
 select Regione ;