Manfaat menggunakan backtick (`) dalam permintaan MySQL?

25

Di MySQL kita bisa membuat kueri dengan atau tanpa `simbol backtick ( ). Contoh:

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

Keduanya bekerja dengan baik di mysql-console.

Apakah ada perbedaan teknis di antara mereka?

Apakah ada manfaat menggunakan ( `) lebih dari pertanyaan sederhana?

Satish Pandey
sumber

Jawaban:

32

Mereka disebut pengidentifikasi yang dikutip dan mereka memberitahu parser untuk menangani teks di antara mereka sebagai string literal. Mereka berguna ketika Anda memiliki kolom atau tabel yang berisi kata kunci atau ruang. Misalnya, yang berikut ini tidak akan berfungsi:

CREATE TABLE my table (id INT);

Tetapi yang berikut ini akan:

CREATE TABLE `my table` (id INT);

Juga, berikut ini akan mendapatkan kesalahan, karena COUNTkata kunci yang dipesan:

SELECT count FROM some_table

Tetapi yang berikut ini akan diuraikan dengan benar:

SELECT `count` FROM some_table

Saya harap ini membantu Anda.

Mr.Brownstone
sumber
24

Jika Anda ingin menggunakan sesuatu di sekitar pengidentifikasi objek, gunakan setidaknya tanda kutip ganda standar: "

Ini berfungsi di MySQL, PostgreSQL, SQL Server, Oracle, dll. Untuk MySQL Anda mungkin memerlukan mode SQL ansi_quotes , tergantung pada konfigurasi default:

SET sql_mode = 'ANSI_QUOTES';

Backticks `hanya digunakan di MySQL, Anda mempelajari jenis SQL yang tidak akan berfungsi di merek DBMS lainnya.

Frank Heikens
sumber
6

Ini berarti Anda dapat memiliki spasi dalam nama tabel. Tidak terlalu menarik, tentu saja. Sama dengan SQL Server [].

Rob Farley
sumber
3

Akan sangat membantu jika Anda memiliki kolom dengan nama yang dicadangkan,

mis: Anda dapat meminta pernyataan seperti ini:

select * from tablename group by `group`;
HVNMencintai
sumber
1

Dari sudut pandang saya, jawaban @ Mr.Brownstone hanya sebagian yang benar.

Backtick `digunakan di MySQL untuk membatasi literal yang mewakili pengidentifikasi (bukan string).

Ini memungkinkan Anda untuk menggunakan karakter yang biasanya tidak diterima seperti spasi, kata-kata yang dicadangkan, dll. Sebagai pengidentifikasi. Sebagai contoh:

SELECT * FROM `Strange table name`;

Juga penting adalah itu juga memungkinkan parser untuk mengetahui jika Anda melakukan sesuatu yang salah seperti memilih kolom yang tidak ada. Sebagai contoh:

SELECT notexistingcolumn FROM atable;

Jika atableada tapi notexistingcolumnkolom tidak ada itu akan ditafsirkan sebagai string literal "notexistingcolumn" memilihnya sebagai nilai (dan mungkin memancarkan peringatan).

Sebaliknya, jika Anda menggunakan:

SELECT `notexistingcolumn` FROM `atable`;

Ini akan mengenali bahwa itu notexistingcolumnadalah nama kolom yang tidak ada dan melemparkan kesalahan.

Saya pikir selalu lebih baik untuk mengelilingi pengidentifikasi dengan backticks termasuk alias dan mencoba untuk menghindari menggunakan kata-kata yang dicadangkan dan karakter aneh untuk pengidentifikasi.

Anda dapat membaca lebih lanjut tentang backtick MySQL di https://dev.mysql.com/doc/refman/8.0/en/identifiers.html .

PhoneixS
sumber