Lợi ích của việc sử dụng backtick (`) trong các truy vấn MySQL?


25

Trong MySQL, chúng ta có thể tạo các truy vấn có hoặc không có `ký hiệu backtick ( ). Thí dụ:

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

Cả hai đều hoạt động tốt trong mysql-console.

Có sự khác biệt kỹ thuật giữa chúng?

Có bất kỳ lợi ích bằng cách sử dụng ( `) trên các truy vấn đơn giản?

Câu trả lời:


32

Chúng được gọi là định danh trích dẫn và chúng bảo trình phân tích cú pháp xử lý văn bản giữa chúng dưới dạng một chuỗi ký tự. Chúng rất hữu ích khi bạn có một cột hoặc bảng có chứa từ khóa hoặc dấu cách. Ví dụ, những điều sau đây sẽ không hoạt động:

CREATE TABLE my table (id INT);

Nhưng sau đây sẽ:

CREATE TABLE `my table` (id INT);

Ngoài ra, sau đây sẽ có một lỗi, bởi vì COUNTlà một từ khóa dành riêng:

SELECT count FROM some_table

Nhưng sau đây sẽ được phân tích cú pháp chính xác:

SELECT `count` FROM some_table

Tôi hy vọng cái này sẽ giúp bạn.


24

Nếu bạn muốn sử dụng một cái gì đó xung quanh các định danh đối tượng, hãy sử dụng ít nhất các dấu ngoặc kép tiêu chuẩn: "

Điều này hoạt động trong MySQL, PostgreSQL, SQL Server, Oracle, v.v. Đối với MySQL, bạn có thể cần chế độ SQL ansi_quotes , tùy thuộc vào cấu hình mặc định:

SET sql_mode = 'ANSI_QUOTES';

Backticks `chỉ được sử dụng trong MySQL, bạn học một loại SQL không hoạt động trong bất kỳ thương hiệu DBMS nào khác.


6

Nó có nghĩa là bạn có thể có khoảng trắng trong tên bảng. Không đặc biệt hấp dẫn, tất nhiên. Tương tự với [] của SQL Server.


3

Nó có thể hữu ích nếu bạn có một cột với tên được dành riêng,

ví dụ: Bạn có thể truy vấn một câu như thế này:

select * from tablename group by `group`;

1

Theo quan điểm của tôi, câu trả lời @ Mr.Brownstone chỉ đúng một phần.

Backtick `được sử dụng trong MySQL để phân định các chữ đại diện cho các định danh (không phải chuỗi).

Điều này cho phép bạn sử dụng các ký tự không thường được chấp nhận như dấu cách, từ dành riêng, v.v. làm định danh. Ví dụ:

SELECT * FROM `Strange table name`;

Ngoài ra, điều quan trọng là nó cũng cho phép trình phân tích cú pháp biết nếu bạn đang làm gì đó sai như chọn một cột không tồn tại. Ví dụ:

SELECT notexistingcolumn FROM atable;

Nếu atabletồn tại nhưng notexistingcolumncột không tồn tại, nó sẽ được hiểu là chuỗi ký tự "không tồn tại" chọn nó làm giá trị (và có thể phát ra cảnh báo).

Thay vào đó, nếu bạn sử dụng:

SELECT `notexistingcolumn` FROM `atable`;

Nó sẽ nhận ra đó notexistingcolumnlà tên của một cột không tồn tại và gây ra lỗi.

Tôi nghĩ luôn thích hợp hơn để bao quanh các định danh với backticks bao gồm bí danh và cố gắng tránh sử dụng các từ dành riêng và các ký tự lạ cho các định danh.

Bạn có thể đọc thêm về backtick của MySQL trên https://dev.mysql.com/doc/refman/8.0/en/identifier.html .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.