Folosind backticks în jurul valorii de câmpul nume

După ce a citit câteva răspunsuri și comentarii la unele întrebări SQL aici, și, de asemenea, a auzit că un prieten de-al meu lucrează într-un loc care are o politică care interzice ei, am'm întrebam dacă nu's ceva în neregulă cu ajutorul backticks în jurul valorii de câmpul nume din MySQL.

Asta este:

SELECT `id`, `name`, `anotherfield` ...
-- vs --
SELECT id, name, anotherfield ...
Comentarii la întrebare (4)
Soluția

Folosind backticks vă permite să utilizați caractere alternative. În query scris de l's nu e o problemă, dar dacă cineva presupune că puteți folosi doar backticks, cred că te lasă să scapi cu ridicole chestii de genul

SELECT `id`, `my name`, `another field` , `field,with,comma` 

Care este, desigur, de a genera prost numit mese.

Daca're doar a fi concis nu't vedea o problema cu ea, te'll notă dacă executați interogarea ca atare

EXPLAIN EXTENDED Select foo,bar,baz 

Generate de avertizare care vine din spate va avea back-căpușe și calificat pe deplin numele de masă. Deci, dacă te're folosind generație de interogare caracteristici și automat re-scrierea de interogări, backticks ar face orice pentru parsarea codul mai puțin confuz.

Cred cu toate acestea, în loc de mandatare dacă este sau nu puteți utiliza backticks, acestea ar trebui să aibă un standard pentru nume. Se rezolvă mai 'real' probleme.

Comentarii (2)

Singura problema cu backticks este că ei nu sunt ANSI-SQL compatibil, de exemplu, ei nu't de muncă în SQL Server.

Dacă există o șansă ar fi să port SQL la o altă bază de date, utilizați ghilimele duble.

Comentarii (4)

Mi se face o mulțime de sens să le folosească în orice moment atunci când se ocupă cu nume de câmp.

  • În primul rând, odată ce ai ajuns în obiceiul, nu't rănit a lovit doar backtick cheie.
  • În al doilea rând, pentru mine, ea face mai ușor pentru a vedea exact ceea ce sunt câmpurile din interogare, și ce cuvinte cheie sau metode.
  • În cele din urmă, acesta vă permite să utilizați oricare ar fi domeniul pe numele pe care doriți atunci când proiectarea de masă. Uneori se face o mulțime de sens pentru a numi un câmp "cheie", "pentru", sau "valori"... toate care necesită backticks atunci când se referă la ei.
Comentarii (3)

Backticks nu't o parte din standard ANSI SQL. De la mysql manual:

Dacă ANSI_QUOTES SQL modul este activat, acesta este, de asemenea, admisibilă pentru a cita identificatori intre ghilimele duble

Deci, dacă utilizați backticks și apoi decide să se mute departe de MySQL, ai o problemă (deși probabil că aveți o mulțime de probleme mai mari, precum și)

Comentarii (0)

Nu e't nimic rău, dacă vă păstrați folosind MYSQL, cu excepția, poate, vizual fuziness de interogări. Dar ele nu permit utilizarea de cuvinte cheie rezervate sau încorporate spații de masă și coloana nume. Acesta este un nu-nu și cu cele mai multe motoare de baze de date și va preveni orice migrației la o dată ulterioară.

Ca pentru o citire ușoară, mulți oameni folosesc capace pentru SQL cuvinte cheie, de exemplu.

SELECT some_fied, some_other_field FROM whatever WHERE id IS NULL;
Comentarii (0)

Dacă vă întreb pentru mine, backticks ar trebui să fie întotdeauna utilizate. Dar există unele motive pentru care o echipa poate prefera să nu le folosească.

Avantaje:

  • Folosindu-le, nu sunt cuvinte rezervate sau interzis de caractere.
  • În unele cazuri, veți obține mai mult descriptiv mesaje de eroare.
  • Dacă ați evita rele practici nu't de îngrijire, dar... în cuvânt, uneori, ele sunt un mod decent de a evita injecții SQL.

Dezavantaje:

  • Acestea nu sunt standard și, de obicei, nu portabil. Cu toate acestea, atâta timp cât nu't folosi un backtick ca parte a unui identificator (care este cel mai rău practică sunt capabil să-mi imaginez), puteți port interogare de mod automat eliminarea backticks.
  • Dacă unele dintre interogare vin de Acces, acestea pot cita numele de masă cu " (și poate't a elimina toate " orbește). Cu toate acestea, amestecuri de backticks și ghilimele duble sunt permise.
  • Unele prost software sau funcția filtre întrebările dumneavoastră, și are probleme cu backticks. Cu toate acestea, ele sunt parte din ASCII deci, acest lucru înseamnă că software-ul/funcția este foarte rău.
Comentarii (2)

L's mult mai ușor pentru a căuta cod-bază pentru ceva în backticks. Spune că ai un tabel numit "eveniment". grep -r "eveniment" * ar putea reveni sute de rezultate. grep -r "\caz`" *` va reveni nimic, probabil corelarea bazei de date.

Comentarii (1)

Ei bine, din câte știu, în scopul de a utiliza backticks este astfel încât să puteți utiliza numele pe care coincide cu cuvinte cheie rezervate. Deci, dacă numele e't coliziune cu un cuvânt cheie rezervat, nu't vedea nici un motiv pentru a utiliza backticks. Dar, ca's nici un motiv să le interzică, fie.

Comentarii (0)

Lucru simplu despre backtick ` este utilizat pentru a desemna identificator ca database_name, table_name etc, și singur citat '', citat dublu "" pentru literali șir, în timp ce "" utilizați pentru a imprima valoarea ca este si '' print valoarea variabilă continuu sau într-un alt caz imprima textul lui au.

i.e 1.-> use `model`;   
    here `model` is database name not conflict with reserve keyword 'model'
2- $age = 27;
insert into `tbl_people`(`name`,`age`,`address`) values ('Ashoka','$age',"Delhi");

here i used both quote for all type of requirement. If anything not clear let me know..
Comentarii (1)

dacă utilizați un nume de domeniu implicit mysql sau mssql valorile de exemplu "starea", va trebui să utilizați backticks ( "selectați "stare" din table_name" sau "select id from table_name unde "stare" =1" ). deoarece mysql returnează erori sau nu funcționează interogare.

Comentarii (0)

Principala utilizare a backticks (`) în SQL este de a le folosi în situații în care aveți de gând pentru a apela din nou în viitoarea clauze. De fiecare dată este recomandat să utilizați ghilimele duble("").

De exemplu

SELECT CONCAT(Name, ' in ', city, ', ', statecode) AS `Publisher and Location`,
    COUNT(ISBN) AS "# Books",
    MAX(LENGTH(title)) AS "Longest Title",
    MIN(LENGTH(title)) AS "Shortest Title"
FROM Publisher JOIN Book
ON Publisher.PublisherID = Book.PublisherID WHERE INSTR(name, 'read')>0
GROUP BY `Publisher and Location`
HAVING COUNT(ISBN) > 1;

În declarația de mai sus vezi cum Persoana și de Locație este folosit din nou în `GROUP BY clauza.

În loc de a folosi

GRUP DE Nume, oraș, statecode

Am folosit

GRUP DE Editură și Locație

Numai atunci când apar astfel de situații, este util de a folosi backticks. În toate celelalte momente, folosind ghilimele duble este recomandat.

Comentarii (0)