ประโยชน์ของการใช้ backtick (`) ในแบบสอบถาม MySQL?


25

ใน MySQL เราสามารถสร้างคิวรีที่มีหรือไม่มี`สัญลักษณ์backtick ( ) ตัวอย่าง:

  1. SELECT * FROM TEST;
  2. SELECT * FROM `TEST`;

ทั้งสองทำงานได้ดีใน mysql-console

มีความแตกต่างทางเทคนิคหรือไม่?

มีประโยชน์ในการใช้ ( `) มากกว่าการค้นหาอย่างง่ายหรือไม่

คำตอบ:


32

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

CREATE TABLE my table (id INT);

แต่ต่อไปนี้จะ:

CREATE TABLE `my table` (id INT);

นอกจากนี้ข้อมูลต่อไปนี้จะได้รับข้อผิดพลาดเนื่องจากCOUNTเป็นคำหลักที่สงวนไว้:

SELECT count FROM some_table

แต่จะแยกวิเคราะห์ต่อไปนี้อย่างถูกต้อง:

SELECT `count` FROM some_table

ฉันหวังว่านี่จะช่วยคุณได้


24

หากคุณต้องการใช้สิ่งรอบตัวระบุวัตถุให้ใช้เครื่องหมายคำพูดคู่มาตรฐานอย่างน้อย: "

สิ่งนี้ใช้งานได้ใน MySQL, PostgreSQL, SQL Server, Oracle เป็นต้นสำหรับ MySQL คุณอาจต้องใช้โหมด SQL ansi_quotesขึ้นอยู่กับการกำหนดค่าเริ่มต้น:

SET sql_mode = 'ANSI_QUOTES';

Backticks `ใช้ใน MySQL เท่านั้นคุณเรียนรู้ SQL ชนิดหนึ่งที่ไม่สามารถใช้กับ DBMS ยี่ห้ออื่นได้


6

มันหมายความว่าคุณสามารถมีช่องว่างในชื่อตาราง ไม่น่าดึงดูดอย่างแน่นอน เหมือนกันกับ SQL Server ของ []


3

มันจะมีประโยชน์หากคุณมีคอลัมน์ที่มีชื่อที่สงวนไว้

เช่น: คุณสามารถสืบค้นข้อความเช่นนี้:

select * from tablename group by `group`;

1

จากมุมมองของฉันคำตอบ @ 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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.