2010-07-16 24 views
8

Trong một số mã, tôi thấy mọi người đặt `quanh cột của họ. Tại sao? Có sự khác biệt nào khi không sử dụng chúng không?Tại sao đặt `quanh cột?

SELECT `players`.`name`, `houses`.`id` FROM `players`, `houses` 
WHERE `houses`.`owner` = `players`.`id` 
+0

Lưu ý rằng điều này không chỉ áp dụng cho các cột mà còn cả các bảng. – BoltClock

+0

Tôi thường tự hỏi bản thân mình - Câu trả lời của KennTM dưới đây là chính xác, nhưng chúng ta thường gặp phải như thế nào? Không bao giờ ... nhưng nó vẫn còn rất phổ biến để sử dụng backticks. Tôi nghĩ có lẽ mọi người giống như cách nó trực quan chỉ định các phần khác nhau của ngữ pháp. (Tôi có lẽ đồng ý - đặc biệt là nếu không viết hoa từ khóa, cũng tốt, nhưng tôi bị rách). –

Trả lời

19

Sử dụng backquotes cho phép các từ dành riêng được sử dụng làm tên cột hoặc bảng, ví dụ:

SELECT `values` FROM `references` WHERE `precision` > 0 

và các tên có số không phải chữ số phải được đính kèm giữa "` ", ví dụ:

SELECT `user name` FROM `registered users` WHERE `total score` > 0 

Xem chi tiết http://dev.mysql.com/doc/refman/5.1/en/identifiers.html.


Tôi nghĩ điều này thường được thấy khi các tên đó được sử dụng động, ví dụ: (Ví dụ nhân tạo)

mysql_prepare_statement("SELECT `%q` FROM `%q` WHERE `%q` > 0", col, tbl, col_cond); 

theo hình thức này, bất kỳ loại tên cột và bảng có thể được xử lý hệt, và nỗ lực tiêm độc hại như col = "1; DROP TABLE users--" có thể tránh được.

3

Một số tên cột có thể là các từ dành riêng trong MySQL. Trong những trường hợp như vậy, bạn có thể báo giá chúng bằng `. Để đảm bảo tính nhất quán và chống lại tương lai, một số nhà phát triển báo giá tất cả các số nhận dạng.

1

Thuật ngữ phổ biến cho backticks được sử dụng trong thời trang này là "dấu ngoặc kép định danh". Chúng được sử dụng để kèm theo tên của các đối tượng lược đồ (bảng, cột, thủ tục, trình kích hoạt, v.v.). Chúng được sử dụng vì chúng cho phép các ký tự không hợp lệ khác (dấu cách, ký tự dấu chấm câu, v.v.) và các từ dành riêng cho SQL xuất hiện bên trong (hoặc toàn bộ) tên đối tượng.

Sử dụng backticks cho mục đích này là dành riêng cho MySQL. Trong tiêu chuẩn ANSI cho SQL, các định danh được cho là được đặt trong dấu nháy kép ". Theo mặc định, MySQL coi " là dấu phân cách chuỗi, nhưng nếu bạn đặt chế độ SQL thành ANSI_QUOTES, nó sẽ coi " làm dấu thay thế dấu nhận dạng thay thế (dấu gạch chéo ngược sẽ vẫn hoạt động). Các RDBMS khác cũng có các ký tự định danh độc quyền; ví dụ: SQL Server cho phép bạn sử dụng [...] cũng như "...".

Các vấn đề liên quan