Frage

Nachdem ich hier ein paar Antworten und Kommentare zu einigen SQL -Fragen gelesen und auch gehört habe, dass ein Freund von mir an einem Ort arbeitet, der eine Richtlinie hat, die sie verbietet .

Das ist:

SELECT `id`, `name`, `anotherfield` ...
-- vs --
SELECT id, name, anotherfield ...
War es hilfreich?

Lösung

Durch die Verwendung von Backticks können Sie alternative Zeichen verwenden. In der Abfrage ist es kein solches Problem, aber wenn man davon ausgeht

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

Was natürlich schlecht benannte Tische erzeugt.

Wenn Sie nur präzise sind, sehe ich kein Problem damit, wenn Sie Ihre Anfrage als solche ausführen

EXPLAIN EXTENDED Select foo,bar,baz 

Die erzeugte Warnung, die zurückkommt und Vollqualifizierte Tabellennamen. Wenn Sie also Funktionen für die Erzeugung von Abfragen und die automatisierte Neubeschreibung von Abfragen verwenden, würde Backticks alles weniger verwirrt machen, was Ihren Code weniger analysiert hat.

Ich denke jedoch, anstatt vorzuschreiben, ob Sie Backticks verwenden können oder nicht, sollten sie einen Standard für Namen haben. Es löst mehr "echte" Probleme.

Andere Tipps

Das einzige Problem bei Backticks ist, dass sie nicht ANSI-SQL-konform sind, z. B. sie arbeiten nicht in SQL Server.

Wenn Sie Ihre SQL in eine andere Datenbank portieren müssten, verwenden Sie doppelte Zitate.

Für mich ist es sehr sinnvoll, sie jederzeit beim Umgang mit Feldnamen zu verwenden.

  • Erstens schadet es nicht, nur den Backtick -Schlüssel zu treffen.
  • Zweitens erleichtert es mir einfacher zu sehen, was genau die Felder in Ihrer Abfrage sind und welche Schlüsselwörter oder Methoden sind.
  • Zuletzt können Sie beim Entwerfen Ihrer Tabelle den von Ihnen gewünschten Feldnamen verwenden. Manchmal ist es sehr sinnvoll, ein Feld "Schlüssel", "Ordnung" oder "Werte" zu nennen ... alle erfordern Backticks, wenn sie sich darauf beziehen.

Backticks sind nicht Teil von Standard ANSI SQL. Aus Das MySQL -Handbuch:

Wenn der SQL -Modus von ANSI_QUOTES aktiviert ist, ist es auch zulässig, Identifikatoren innerhalb von Doppelzitaten zu zitieren

Wenn Sie also Backticks verwenden und sich dann von MySQL entscheiden, haben Sie ein Problem (obwohl Sie wahrscheinlich auch viele größere Probleme haben)

Es ist nichts falsch, wenn Sie MySQL weiter verwenden, außer vielleicht die visuelle Fuziness der Abfragen. Sie ermöglichen jedoch die Verwendung reservierter Schlüsselwörter oder eingebetteter Räume als Tabellen- und Spaltennamen. Dies ist ein Nein-Nein bei den meisten Datenbankmotoren und verhindern eine Migration zu einem späteren Zeitpunkt.

Für das einfache Lesen verwenden viele Menschen CAPS für SQL -Schlüsselwörter, z.

SELECT some_fied, some_other_field FROM whatever WHERE id IS NULL;

Wenn Sie mich fragen, sollten immer Backticks verwendet werden. Es gibt jedoch einige Gründe, warum ein Team es vorzieht, sie nicht zu verwenden.

Vorteile:

  • Mit ihnen gibt es keine reservierten Wörter oder verbotenen Zeichen.
  • In einigen Fällen erhalten Sie mehr beschreibende Fehlermeldungen.
  • Wenn Sie schlechte Praktiken vermeiden, ist es Ihnen egal, aber ... bei echtem Wort, manchmal sind sie eine anständige Möglichkeit, SQL -Injektionen zu vermeiden.

Nachteile:

  • Sie sind nicht Standard und normalerweise nicht tragbar. Solange Sie jedoch keinen Backtick als Teil einer Kennung verwenden (was die schlechteste Praxis ist, die ich mir vorstellen kann), können Sie Ihre Abfrage durch automatische Entfernen von Backstricks portieren.
  • Wenn einige Ihrer Abfragen vom Zugriff stammen, können sie Tabellennamen zitieren "(und vielleicht können Sie nicht alle" blind) entfernen. Mischungen von Backticks und Doppelzitaten sind jedoch erlaubt.
  • Einige dumme Software oder Funktionsfunktionen filtern Ihre Fragen und haben Probleme mit Backticks. Sie sind jedoch Teil von ASCII. Dies bedeutet, dass Ihre Software/Funktion sehr schlecht ist.

Soweit ich weiß, ist der gesamte Zweck der Verwendung von Backticks so, dass Sie Namen verwenden können, die mit reservierten Schlüsselwörtern zusammenfallen. Wenn der Name also nicht mit einem reservierten Keyword kollidiert, sehe ich keinen Grund, Backticks zu verwenden. Aber das ist auch kein Grund, sie zu verbieten.

Es ist viel einfacher, Ihre Code-Basis nach etwas in Backticks zu durchsuchen. Sagen Sie, Sie haben einen Tisch mit dem Namen event. grep -r "event" * Könnte Hunderte von Ergebnissen zurückgeben. grep -r "\`event\`" * Wird etwas zurückgeben, das wahrscheinlich auf Ihre Datenbank verweist.

Einfache Sache über Backtick `` wird für die Bezeichnung von Kennung wie Datenbank_Name, Table_Name usw. und einzelnem Zitat verwendet '', doppeltes Zitat "" Für String -Literale, während "" für den Druckwert verwendet wird, wie er ist und die Wertvariable gedruckt oder in einem anderen Fall den Text drucken.

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..

Wenn Sie einige Feldnamen als Standard -MySQL- oder MSSQL -Werte zum Beispiel "Status" verwenden, müssen Sie Backticks verwenden ("Wählen Sie aus status aus table_name "oder" id aus table_name where wählen status= 1 "). Weil MySQL Fehler zurückgibt oder die Abfrage nicht funktioniert.

Die Hauptverwendung von Backticks (`) in SQL besteht darin, sie in Situationen zu verwenden, in denen Sie sie in bevorstehenden Klauseln erneut anrufen werden. In jedem anderen Mal wird empfohlen, Doppelzitate ("") zu verwenden.

Zum Beispiel

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;

In der obigen Aussage sehen Sie wie Publisher and Location wird wieder in verwendet GROUP BY Klausel.

Anstatt zu verwenden

Gruppe mit Namen, Stadt, Stillecode

Ich habe gerade verwendet

GRUPPIERE NACH Publisher and Location

Nur wenn solche Situationen auftreten, ist es nützlich, Backticks zu verwenden. In allen anderen Zeiten wird die Verwendung von Doppelzitaten empfohlen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top