Nachdem ich hier einige Antworten und Kommentare zu einigen SQL-Fragen gelesen und gehört habe, dass ein Freund von mir an einem Ort arbeitet, an dem eine Richtlinie dies verbietet, frage ich mich, ob bei der Verwendung von Backticks um Feldnamen in MySQL etwas nicht stimmt .
Das ist:
SELECT `id`, `name`, `anotherfield` ...
-- vs --
SELECT id, name, anotherfield ...
count
,type
,table
oder ähnlichcount
,type
, undtable
. Das sind schrecklich mehrdeutige Begriffe, und in fast allen Fällen könnten diese Namen verbessert werden, um genauer zu sein. Das Benennen Ihrer Spalten ist ebenfalls gefährlich und eine potenzielle Fehlerquelle, da Sie nie wissen, wann jemand vergessen könnte, die Backticks hinzuzufügen, oder nicht merkt, dass dies erforderlich ist. Ich denke, es ist besser, nur zu vermeiden, reservierte Begriffe als Spaltennamen zu verwenden.Antworten:
Mit Backticks können Sie alternative Zeichen verwenden. Beim Schreiben von Abfragen ist das kein Problem, aber wenn man davon ausgeht, dass man nur Backticks verwenden kann, würde ich davon ausgehen, dass man damit mit lächerlichen Dingen wie z
Was natürlich schlecht benannte Tabellen erzeugt.
Wenn Sie nur präzise sind, sehe ich kein Problem damit. Sie werden feststellen, ob Sie Ihre Abfrage als solche ausführen
Die generierte Warnung, die zurückkommt, enthält Back-Ticks und vollständig qualifizierte Tabellennamen. Wenn Sie also Funktionen zur Generierung von Abfragen und das automatische Umschreiben von Abfragen verwenden, würden Backticks alles, was Ihren Code analysiert, weniger verwirren.
Ich denke jedoch, anstatt zu bestimmen, ob Sie Backticks verwenden können oder nicht, sollten sie einen Standard für Namen haben. Es löst mehr "echte" Probleme.
quelle
select count from foo
select "count" from foo
""
Das einzige Problem mit Backticks ist, dass sie nicht ANSI-SQL-kompatibel sind, z. B. nicht in SQL Server funktionieren.
Wenn die Möglichkeit besteht, dass Sie Ihre SQL in eine andere Datenbank portieren müssen, verwenden Sie doppelte Anführungszeichen.
quelle
range
oder ähnliches benannt. Beim Upgrade auf MySQL 5 ist dies fehlgeschlagen, da es sich um ein neues reserviertes Wort handelt!app_key_stores
WHERE ("key" = 'c5cc4f30-31f3-0130-505e-14dae9da9fc5_range'); Abfrage OK, 0 Zeilen betroffen (0,00 Sek.) DELETE FROMapp_key_stores
WHERE (key
= 'c5cc4f30-31f3-0130-505e-14dae9da9fc5_range'); Abfrage OK, 5 Zeilen betroffen (0,00 Sek.)Für mich ist es sehr sinnvoll, sie beim Umgang mit Feldnamen immer zu verwenden.
quelle
Backticks sind nicht Teil von Standard-ANSI-SQL. Aus dem MySQL-Handbuch :
Wenn Sie also Backticks verwenden und sich dann von MySQL entfernen, haben Sie ein Problem (obwohl Sie wahrscheinlich auch viel größere Probleme haben).
quelle
Es ist nichts falsch, wenn Sie weiterhin MYSQL verwenden, außer vielleicht der visuellen Unschärfe der Abfragen. Sie erlauben jedoch die Verwendung reservierter Schlüsselwörter oder eingebetteter Leerzeichen als Tabellen- und Spaltennamen. Dies ist bei den meisten Datenbank-Engines ein No-No und verhindert eine spätere Migration.
Zum einfachen Lesen verwenden viele Leute Großbuchstaben für SQL-Schlüsselwörter, z.
quelle
Wenn Sie mich fragen, sollten immer Backticks verwendet werden. Es gibt jedoch einige Gründe, warum ein Team es vorziehen könnte, sie nicht zu verwenden.
Vorteile:
Nachteile:
quelle
Es ist viel einfacher, Ihre Codebasis nach etwas in Backticks zu durchsuchen. Angenommen, Sie haben eine Tabelle mit dem Namen
event
.grep -r "event" *
kann Hunderte von Ergebnissen zurückgeben.grep -r "\`event\`" *
gibt alles zurück, was wahrscheinlich auf Ihre Datenbank verweist.quelle
Soweit ich weiß, besteht der gesamte Zweck der Verwendung von Backticks darin, dass Sie Namen verwenden können, die mit reservierten Schlüsselwörtern übereinstimmen. Wenn der Name nicht mit einem reservierten Schlüsselwort kollidiert, sehe ich keinen Grund, Backticks zu verwenden. Aber das ist auch kein Grund, sie zu verbieten.
quelle
Einfache Sache über Graviszeichen `` ist die Verwendung für bezeichnen Bezeichner wie database_name, table_name usw. und Apostroph ‚‘ , doppelte Anführungszeichen „“ für Stringliterale, während „“ Verwendung für Druckwert , wie es ist und ‚‘ druckt den Wert Variable halten oder in einem anderen Fall drucken Sie den Text aus, den er hat.
quelle
Wenn Sie einige Feldnamen als Standardwerte für MySQL oder MSSQL verwenden, z. B. "Status", müssen Sie Backticks verwenden ("
status
Aus Tabellenname auswählen " oder "ID aus Tabellenname auswählen, wobeistatus
= 1"). weil MySQL Fehler zurückgibt oder die Abfrage nicht funktioniert.quelle
Die Hauptverwendung von Backticks (`) in SQL besteht darin, sie in Situationen zu verwenden, in denen Sie sie in den nächsten Klauseln erneut aufrufen werden. In jeder zweiten Zeit wird empfohlen, doppelte Anführungszeichen ("") zu verwenden.
Beispielsweise
In der obigen Anweisung sehen Sie, wie
Publisher and Location
inGROUP BY
Klausel wieder verwendet wird.Anstatt zu verwenden
Ich habe es gerade benutzt
Nur wenn solche Situationen auftreten, ist es nützlich, Backticks zu verwenden. In allen anderen Fällen wird die Verwendung von doppelten Anführungszeichen empfohlen.
quelle