ใน MySQL เราสามารถสร้างคิวรีที่มีหรือไม่มี`
สัญลักษณ์backtick ( ) ตัวอย่าง:
SELECT * FROM TEST;
SELECT * FROM `TEST`;
ทั้งสองทำงานได้ดีใน mysql-console
มีความแตกต่างทางเทคนิคหรือไม่?
มีประโยชน์ในการใช้ ( `
) มากกว่าการค้นหาอย่างง่ายหรือไม่
ใน MySQL เราสามารถสร้างคิวรีที่มีหรือไม่มี`
สัญลักษณ์backtick ( ) ตัวอย่าง:
SELECT * FROM TEST;
SELECT * FROM `TEST`;
ทั้งสองทำงานได้ดีใน mysql-console
มีความแตกต่างทางเทคนิคหรือไม่?
มีประโยชน์ในการใช้ ( `
) มากกว่าการค้นหาอย่างง่ายหรือไม่
คำตอบ:
พวกเขาถูกเรียกตัวระบุที่ยกมาและพวกเขาบอก parser เพื่อจัดการข้อความระหว่างพวกเขาเป็นสตริงตัวอักษร มีประโยชน์เมื่อคุณมีคอลัมน์หรือตารางที่มีคำหลักหรือช่องว่าง ตัวอย่างเช่นต่อไปนี้จะไม่ทำงาน:
CREATE TABLE my table (id INT);
แต่ต่อไปนี้จะ:
CREATE TABLE `my table` (id INT);
นอกจากนี้ข้อมูลต่อไปนี้จะได้รับข้อผิดพลาดเนื่องจากCOUNT
เป็นคำหลักที่สงวนไว้:
SELECT count FROM some_table
แต่จะแยกวิเคราะห์ต่อไปนี้อย่างถูกต้อง:
SELECT `count` FROM some_table
ฉันหวังว่านี่จะช่วยคุณได้
หากคุณต้องการใช้สิ่งรอบตัวระบุวัตถุให้ใช้เครื่องหมายคำพูดคู่มาตรฐานอย่างน้อย: "
สิ่งนี้ใช้งานได้ใน MySQL, PostgreSQL, SQL Server, Oracle เป็นต้นสำหรับ MySQL คุณอาจต้องใช้โหมด SQL ansi_quotesขึ้นอยู่กับการกำหนดค่าเริ่มต้น:
SET sql_mode = 'ANSI_QUOTES';
Backticks `ใช้ใน MySQL เท่านั้นคุณเรียนรู้ SQL ชนิดหนึ่งที่ไม่สามารถใช้กับ DBMS ยี่ห้ออื่นได้
มันหมายความว่าคุณสามารถมีช่องว่างในชื่อตาราง ไม่น่าดึงดูดอย่างแน่นอน เหมือนกันกับ SQL Server ของ []
มันจะมีประโยชน์หากคุณมีคอลัมน์ที่มีชื่อที่สงวนไว้
เช่น: คุณสามารถสืบค้นข้อความเช่นนี้:
select * from tablename group by `group`;
จากมุมมองของฉันคำตอบ @ Mr.Brownstone นั้นถูกต้องเพียงบางส่วนเท่านั้น
Backtick `
ใช้ใน MySQL เพื่อกำหนดตัวอักษรที่แสดงตัวระบุ (ไม่ใช่สตริง)
วิธีนี้ช่วยให้คุณสามารถใช้อักขระที่ไม่ได้รับการยอมรับเช่นช่องว่างคำสงวน ฯลฯ เป็นตัวระบุ ตัวอย่างเช่น:
SELECT * FROM `Strange table name`;
ที่สำคัญคือมันช่วยให้โปรแกรมแยกวิเคราะห์ทราบว่าคุณกำลังทำสิ่งผิดปกติหรือไม่เช่นการเลือกคอลัมน์ที่ไม่มีอยู่ ตัวอย่างเช่น:
SELECT notexistingcolumn FROM atable;
หากatable
มีอยู่ แต่notexistingcolumn
ไม่มีคอลัมน์คอลัมน์นั้นจะถูกตีความเป็นสตริงตัวอักษร "notexistingcolumn" โดยเลือกเป็นค่า (และอาจเปล่งคำเตือน)
หากคุณใช้:
SELECT `notexistingcolumn` FROM `atable`;
มันจะรับรู้ว่าnotexistingcolumn
เป็นชื่อของคอลัมน์ที่ไม่มีอยู่และเกิดข้อผิดพลาด
ฉันคิดว่าเป็นการดีกว่าที่จะล้อมรอบตัวระบุด้วย backticks รวมถึงนามแฝงและพยายามหลีกเลี่ยงการใช้คำสงวนและอักขระแปลก ๆ สำหรับตัวระบุ
คุณสามารถอ่านเพิ่มเติมเกี่ยวกับ backtick ของ MySQL ในhttps://dev.mysql.com/doc/refman/8.0/en/identifiers.html