Setelah membaca beberapa jawaban dan komentar pada beberapa pertanyaan SQL di sini, dan juga mendengar bahwa seorang teman saya bekerja di tempat yang memiliki kebijakan yang melarang mereka, saya bertanya-tanya apakah ada yang salah dengan menggunakan backticks di sekitar nama field di MySQL .
Itu adalah:
SELECT `id`, `name`, `anotherfield` ...
-- vs --
SELECT id, name, anotherfield ...
count
,type
,table
atau serupacount
,type
, dantable
. Itu adalah istilah yang sangat ambigu dan dalam hampir setiap kasus nama-nama itu dapat ditingkatkan menjadi lebih spesifik. Memberi nama pada kolom Anda hal-hal seperti itu juga berbahaya dan berpotensi menjadi sumber kesalahan, karena Anda tidak pernah tahu kapan seseorang mungkin lupa menambahkan backtick atau tidak menyadari mereka harus melakukannya. Saya pikir ini praktik yang lebih baik untuk menghindari penggunaan istilah yang dicadangkan sebagai nama kolom.Jawaban:
Menggunakan backticks memungkinkan Anda untuk menggunakan karakter alternatif. Dalam penulisan kueri itu bukan masalah seperti itu, tetapi jika orang menganggap Anda hanya dapat menggunakan backticks, saya akan menganggap itu memungkinkan Anda lolos dengan hal-hal konyol seperti
Yang tentu saja menghasilkan tabel dengan nama buruk.
Jika Anda hanya ringkas saya tidak melihat masalah dengan itu, Anda akan perhatikan jika Anda menjalankan kueri Anda seperti itu
Peringatan yang dihasilkan yang kembali akan memiliki tanda centang kembali dan nama tabel yang memenuhi syarat. Jadi, jika Anda menggunakan fitur pembuatan kueri dan penulisan ulang kueri secara otomatis, backticks akan membuat apa pun yang menguraikan kode Anda menjadi kurang membingungkan.
Namun saya pikir, alih-alih mengamanatkan apakah Anda dapat menggunakan backticks atau tidak, mereka harus memiliki standar untuk nama. Ini memecahkan lebih banyak masalah 'nyata'.
sumber
select count from foo
vsselect "count" from foo
akan memberikan hasil yang sangat berbeda. Tetapi postgres berbeda dari mysql dalam 2 cara: 1. Fields dikutip oleh""
. 2. Kolom yang tidak dikutip adalah case-sensitive postgresql.org/docs/current/static/…Satu-satunya masalah dengan backticks adalah bahwa mereka tidak sesuai dengan ANSI-SQL, misalnya mereka tidak bekerja di SQL Server.
Jika ada kemungkinan Anda harus mem-porting SQL Anda ke database lain, gunakan tanda kutip ganda.
sumber
range
atau semacamnya. Ketika kami memutakhirkan ke MySQL 5, gagal karena itu kata cadangan baru!app_key_stores
MANA ("key" = 'c5cc4f30-31f3-0130-505e-14dae9da9fc5_range'); Kueri OK, 0 baris terpengaruh (0,00 dtk) HAPUS DARIapp_key_stores
MANA (key
= 'c5cc4f30-31f3-0130-505e-14dae9da9fc5_range'); Kueri OK, 5 baris terpengaruh (0,00 dtk)Bagi saya, sangat masuk akal untuk menggunakannya setiap saat ketika berhadapan dengan nama-nama bidang.
sumber
Backticks bukan bagian dari standar ANSI SQL. Dari manual mysql :
Jadi jika Anda menggunakan backticks dan kemudian memutuskan untuk menjauh dari MySQL, Anda memiliki masalah (walaupun Anda mungkin memiliki masalah yang jauh lebih besar juga)
sumber
Tidak ada yang salah jika Anda terus menggunakan MYSQL, kecuali mungkin keseruan visual dari pertanyaan. Tetapi mereka mengizinkan penggunaan kata kunci yang dipesan atau ruang yang disematkan sebagai nama tabel dan kolom. Ini adalah tidak-tidak pada kebanyakan mesin basis data dan akan mencegah migrasi apa pun di lain waktu.
Adapun untuk membaca mudah, banyak orang menggunakan huruf besar untuk kata kunci SQL, misalnya.
sumber
Jika Anda bertanya kepada saya, backticks harus selalu digunakan. Tetapi ada beberapa alasan mengapa tim lebih suka tidak menggunakannya.
Keuntungan:
Kekurangan:
sumber
Jauh lebih mudah untuk mencari basis kode Anda untuk sesuatu di backtick. Katakanlah Anda memiliki tabel bernama
event
.grep -r "event" *
mungkin mengembalikan ratusan hasil.grep -r "\`event\`" *
akan mengembalikan apa pun yang mungkin merujuk pada basis data Anda.sumber
Yah, sejauh yang saya tahu, seluruh tujuan menggunakan backticks adalah agar Anda dapat menggunakan nama yang bertepatan dengan kata kunci yang dipesan. Jadi, jika namanya tidak bertabrakan dengan kata kunci yang dipesan, saya tidak melihat alasan untuk menggunakan backticks. Tapi, itu juga bukan alasan untuk melarang mereka.
sumber
Hal sederhana tentang backtick `` digunakan untuk menunjukkan pengidentifikasi seperti database_name, table_name dll, dan kutipan tunggal "" , tanda kutip ganda "" untuk string literal, sedangkan "" digunakan untuk nilai cetak apa adanya dan "" cetak variabel nilai tahan atau dalam kasus lain cetak teks yang dimilikinya.
sumber
jika Anda menggunakan beberapa nama bidang sebagai nilai mysql atau mssql default misalnya "status", Anda harus menggunakan backticks ("pilih
status
dari nama_kabel" atau "pilih id dari nama_kotak manastatus
= 1"). karena mysql mengembalikan kesalahan atau tidak berfungsi permintaan.sumber
Penggunaan utama backticks (`) dalam SQL adalah menggunakannya dalam situasi di mana Anda akan memanggil mereka lagi dalam klausa yang akan datang. Di setiap waktu lain disarankan untuk menggunakan tanda kutip ganda ("").
Sebagai contoh
Dalam pernyataan di atas apakah Anda melihat bagaimana
Publisher and Location
digunakan lagi dalamGROUP BY
klausa.Alih-alih menggunakan
Saya baru saja digunakan
Hanya ketika situasi seperti itu muncul, berguna untuk menggunakan backticks. Di lain waktu dianjurkan menggunakan tanda kutip ganda.
sumber