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 ...
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.
Mi se face o mulțime de sens să le folosească în orice moment atunci când se ocupă cu nume de câmp.
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)
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;
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:
Dezavantaje:
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.
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.
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..
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.
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.