Po przeczytaniu kilku odpowiedzi i komentarzy do niektórych pytań SQL tutaj, a także usłyszeniu, że mój przyjaciel pracuje w miejscu, w którym obowiązuje polityka, która go zakazuje, zastanawiam się, czy jest coś złego w używaniu odwrotnych apostrofów wokół nazw pól w MySQL .
To jest:
SELECT `id`, `name`, `anotherfield` ...
-- vs --
SELECT id, name, anotherfield ...
count
,type
,table
lub podobnycount
,type
itable
. Są to okropnie niejednoznaczne terminy i prawie w każdym przypadku te nazwy można by poprawić, aby były bardziej szczegółowe. Nazywanie kolumn takich rzeczy jest również niebezpieczne i potencjalne źródło błędów, ponieważ nigdy nie wiadomo, kiedy ktoś może zapomnieć o dodaniu znaków odwrotnych lub nie zdaje sobie sprawy, że musi. Myślę, że lepszą praktyką jest unikanie używania zastrzeżonych terminów jako nazw kolumn.Odpowiedzi:
Korzystanie z lewych apostrofów pozwala na używanie alternatywnych znaków. Przy pisaniu zapytań nie jest to taki problem, ale jeśli przyjmie się, że można po prostu używać odwrotnych apostrofów, zakładam, że pozwala to uciec z absurdalnymi rzeczami, takimi jak
Co oczywiście generuje źle nazwane tabele.
Jeśli jesteś tylko zwięzły, nie widzę z tym problemu, zauważysz, że uruchomisz zapytanie jako takie
Wygenerowane ostrzeżenie, które powróci, będzie zawierało znaczniki wsteczne i w pełni kwalifikowane nazwy tabel. Więc jeśli korzystasz z funkcji generowania zapytań i automatycznego ponownego pisania zapytań, lewe apostrofy sprawią, że wszystko, co analizuje kod, będzie mniej zagmatwane.
Myślę jednak, że zamiast narzucać możliwość używania znaków odwrotnych, powinny one mieć standard nazw. Rozwiązuje bardziej „rzeczywiste” problemy.
źródło
select count from foo
vsselect "count" from foo
da zupełnie inne wyniki. Ale postgres różni się od mysql na dwa sposoby: 1. Pola są cytowane przez""
. 2. W polach bez cudzysłowów wielkość liter nie jest rozróżniana postgresql.org/docs/current/static/ ...Jedynym problemem związanym z odwrotnymi znakami jest to, że nie są one zgodne z ANSI-SQL, np. Nie działają w SQL Server.
Jeśli istnieje szansa, że będziesz musiał przenieść swój kod SQL do innej bazy danych, użyj podwójnych cudzysłowów.
źródło
range
lub coś w tym rodzaju. Kiedy zaktualizowaliśmy MySQL 5, nie udało się, ponieważ było to nowe słowo zastrzeżone!app_key_stores
WHERE ("key" = 'c5cc4f30-31f3-0130-505e-14dae9da9fc5_range'); Zapytanie OK, dotyczy 0 wierszy (0,00 s) DELETE FROMapp_key_stores
WHERE (key
= 'c5cc4f30-31f3-0130-505e-14dae9da9fc5_range'); Zapytanie OK, dotyczy 5 wierszy (0,00 s)Uważam, że używanie ich przez cały czas, gdy mamy do czynienia z nazwami pól, ma sens.
źródło
Backticks nie są częścią standardowego ANSI SQL. Z podręcznika mysql :
Więc jeśli użyjesz odwrotnych znaków, a następnie zdecydujesz się odejść od MySQL, masz problem (chociaż prawdopodobnie masz też dużo większe problemy)
źródło
Nie ma nic złego, jeśli nadal używasz MYSQL, z wyjątkiem może wizualnej niejasności zapytań. Ale pozwalają na użycie zastrzeżonych słów kluczowych lub osadzonych spacji jako nazw tabel i kolumn. W przypadku większości silników baz danych jest to nie-nie, które uniemożliwi późniejszą migrację.
Jeśli chodzi o łatwość czytania, wiele osób używa wielkich liter w słowach kluczowych SQL, np.
źródło
Jeśli o mnie chodzi, zawsze należy używać grawitacji. Ale jest kilka powodów, dla których zespół może chcieć ich nie używać.
Zalety:
Niedogodności:
źródło
O wiele łatwiej jest przeszukać bazę kodu w celu znalezienia czegoś w odwrotnych znakach. Powiedzmy, że masz tabelę o nazwie
event
.grep -r "event" *
może zwrócić setki wyników.grep -r "\`event\`" *
zwróci wszystko, co prawdopodobnie odnosi się do Twojej bazy danych.źródło
Cóż, o ile wiem, głównym celem używania grawisów jest to, że możesz używać nazw, które pokrywają się z zastrzeżonymi słowami kluczowymi. Tak więc, jeśli nazwa nie koliduje z zastrzeżonym słowem kluczowym, nie widzę powodu, aby używać odwrotnych apostrofów. Ale to też nie powód, by ich zakazać.
źródło
Prosta rzecz dotycząca znaku wstecznego `` jest używana do oznaczenia identyfikatora, takiego jak nazwa_bazy_danych, nazwa_tabeli itp., I pojedynczego cudzysłowu '' , podwójnego cudzysłowu "" dla literałów łańcuchowych, natomiast "" użyj do wypisania wartości bez zmian i '' wydrukuj zmienną wartości trzymaj lub w innym przypadku wydrukuj jego tekst.
źródło
jeśli używasz niektórych nazw pól jako domyślnych wartości mysql lub mssql, na przykład „status”, musisz użyć odwrotnych apostrofów („wybierz
status
z nazwa_tabeli” lub „wybierz id z nazwa_tabeli, gdziestatus
= 1”). ponieważ mysql zwraca błędy lub nie działa na zapytanie.źródło
Głównym zastosowaniem backticks (`) w SQL jest użycie ich w sytuacjach, w których zamierzasz wywołać je ponownie w nadchodzących klauzulach. W każdym innym przypadku zaleca się używanie cudzysłowów („”).
Na przykład
W powyższym stwierdzeniu widzisz, jak
Publisher and Location
jest używany ponownie wGROUP BY
klauzuli.Zamiast używać
Właśnie użyłem
Dopiero w takich sytuacjach warto używać lewych cudzysłowów. We wszystkich innych przypadkach zalecane jest używanie podwójnych cudzysłowów.
źródło