2010-07-16 14 views
8

In qualche codice vedo persone che si mettono attorno alle loro colonne. Perché? C'è qualche differenza dal non usarli?Perché mettere `attorno alle colonne?

SELECT `players`.`name`, `houses`.`id` FROM `players`, `houses` 
WHERE `houses`.`owner` = `players`.`id` 
+0

Si noti che questo non si applica solo alle colonne ma anche alle tabelle. – BoltClock

+0

Mi sono spesso chiesto questo: la risposta di KennTM qui sotto è corretta, ma quanto spesso ci imbattiamo in questo? Mai ... ma è ancora molto popolare usare i backtick. Penso che forse le persone apprezzino esattamente come designano visivamente le diverse parti della grammatica. (Forse sono d'accordo ... specialmente se non sono in grado di capitalizzare le parole chiave, che è anche bello, ma mi viene strappato). –

risposta

19

L'utilizzo delle retroquote consente di utilizzare parole riservate come nomi di colonne o tabelle, ad es.

SELECT `values` FROM `references` WHERE `precision` > 0 

e nomi con nonalumerici devono essere inclusi anche tra i "` ", ad es.

SELECT `user name` FROM `registered users` WHERE `total score` > 0 

Vedere http://dev.mysql.com/doc/refman/5.1/en/identifiers.html per dettagli.


Penso che questo sia visto spesso quando quei nomi sono usati dinamicamente, per es. (Esempio artificiale)

mysql_prepare_statement("SELECT `%q` FROM `%q` WHERE `%q` > 0", col, tbl, col_cond); 

in questa forma, qualsiasi tipo di nomi di colonna e di tabella può essere gestito in modo identico, e tentativi di iniezione dannosi come col = "1; DROP TABLE users--" può essere evitato.

3

Alcuni nomi di colonne potrebbero essere parole riservate in MySQL. In questi casi puoi citarli con `. Per motivi di coerenza e a prova di futuro, alcuni sviluppatori citano tutti gli identificatori.

1

Un termine comune per i backtick utilizzati in questo modo è "virgolette identificative". Sono usati per racchiudere i nomi degli oggetti schema (tabelle, colonne, procedure, trigger, ecc. Ecc.). Vengono utilizzati perché consentono la visualizzazione di caratteri altrimenti illegali (spazi, caratteri di punteggiatura, ecc.) E parole SQL riservate all'interno (o nella totalità del) nome dell'oggetto.

L'utilizzo di backtick per questo scopo è specifico per MySQL. Nello standard ANSI per SQL, gli identificatori devono essere racchiusi tra virgolette ". MySQL considera " come un delimitatore di stringhe per impostazione predefinita, ma se si imposta la modalità SQL per includere , verrà considerato come un segno di virgoletta di identificazione alternativa (gli apici continueranno a funzionare anche). Anche altri RDBMS hanno caratteri identificativi proprietari; ad esempio SQL Server consente di utilizzare [...] e "...".

Problemi correlati