Domanda

Dopo aver letto un paio di risposte e commenti su alcune domande SQL qui, e anche sentito che un mio amico lavora in un posto che ha una politica che li vieta, mi chiedo se c'è qualcosa di sbagliato nell'usare i backtick nel campo nomi in MySQL.

Cioè:

SELECT `id`, `name`, `anotherfield` ...
-- vs --
SELECT id, name, anotherfield ...
È stato utile?

Soluzione

L'uso dei backtick ti consente di usare caratteri alternativi. Nella scrittura di query non è un problema del genere, ma se si presume che si possano semplicemente usare i backtick, suppongo che ti permetta di cavartela con cose ridicole come

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

Che ovviamente genera tabelle con nomi errati.

Se sei solo conciso, non vedo alcun problema, noterai se esegui la tua query in quanto tale

EXPLAIN EXTENDED Select foo,bar,baz 

L'avviso generato che ritorna avrà i segni di spunta indietro e nomi di tabella completi. Pertanto, se si utilizzano le funzionalità di generazione delle query e la riscrittura automatica delle query, i backtick renderebbero meno confuso qualsiasi cosa che analizza il codice.

Penso tuttavia che, invece di imporre se è possibile utilizzare o meno i backtick, dovrebbero avere uno standard per i nomi. Risolve problemi più "reali".

Altri suggerimenti

L'unico problema con i backtick è che non sono conformi ANSI-SQL, ad es. non funzionano in SQL Server.

Se esiste la possibilità che tu debba trasferire il tuo SQL su un altro database, usa le doppie virgolette.

Per me ha molto senso usarli in ogni momento quando si ha a che fare con i nomi dei campi.

  • In primo luogo, una volta presa l'abitudine, non fa male solo premere il tasto backtick.
  • In secondo luogo, per me, rende più semplice vedere quali sono esattamente i campi nella query e quali sono parole chiave o metodi.
  • Infine, ti consente di utilizzare qualsiasi nome di campo desideri durante la progettazione della tabella. A volte ha molto senso nominare un campo "chiave", "ordine", o "valori" ... tutto ciò richiede backtick quando ci si riferisce ad essi.

I backtick non fanno parte dello standard ANSI SQL. Da il manuale di mysql :

  

Se la modalità SQL ANSI_QUOTES è   abilitato, è anche possibile citare   identificatori tra virgolette doppie

Quindi, se usi i backtick e poi decidi di allontanarti da MySQL, hai un problema (anche se probabilmente hai anche problemi molto più grandi)

Non c'è niente di sbagliato se continui a usare MYSQL, tranne forse la confusione visiva delle query. Tuttavia, consentono l'uso di parole chiave riservate o spazi incorporati come nomi di tabelle e colonne. Questo è un no-no con la maggior parte dei motori di database e impedirà qualsiasi migrazione in un secondo momento.

Per quanto riguarda la facile lettura, molte persone usano i cap per le parole chiave SQL, ad es.

SELECT some_fied, some_other_field FROM whatever WHERE id IS NULL;

Se me lo chiedi, dovresti sempre usare i backtick. Ma ci sono alcuni motivi per cui una squadra potrebbe preferire non usarli.

I vantaggi:

  • Usandoli, non ci sono parole riservate o caratteri proibiti.
  • In alcuni casi, ricevi messaggi di errore più descrittivi.
  • Se eviti le cattive pratiche non ti interessano, ma ... in parole reali, a volte sono un modo decente per evitare iniezioni di SQL.

Svantaggi:

  • Non sono standard e di solito non portatili. Tuttavia, finché non si utilizza un backtick come parte di un identificatore (che è la peggiore pratica che io sia in grado di immaginare), è possibile eseguire il porting della query rimuovendo automaticamente i backtick.
  • Se alcune delle tue query provengono da Access, possono citare i nomi delle tabelle con " (e forse non puoi rimuovere tutto " alla cieca). Tuttavia, sono consentite miscele di backtick e doppie virgolette.
  • Alcuni stupidi software o funzioni filtrano le tue query e hanno problemi con i backtick. Tuttavia, fanno parte di ASCII, quindi questo significa che il tuo software / funzione è pessimo.

Bene, per quanto ne so, l'intero scopo dell'utilizzo dei backtick è di poter usare nomi che coincidono con parole chiave riservate. Quindi, se il nome non si scontra con una parola chiave riservata, non vedo alcun motivo per utilizzare i backtick. Ma non è nemmeno una ragione per vietarli.

È molto più facile cercare nella base di codice qualcosa nei backtick. Supponi di avere una tabella denominata event . grep -r " event " * potrebbe restituire centinaia di risultati. grep -r " \ `event \` " * restituirà tutto ciò che probabilmente fa riferimento al tuo database.

La cosa semplice sul backtick `` è l'uso per indicare identificatore come database_name, table_name ecc. e virgoletta singola '' , virgoletta doppia " " per letterali stringa, mentre " " usa per stampare il valore così com'è e '' stampa il valore della variabile hold o in un altro caso stampa il testo che ha.

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

se si utilizzano alcuni nomi di campo come valori mysql o mssql predefiniti, ad esempio " status " ;, è necessario utilizzare i backtick (& ??quot; selezionare status da table_name " oppure " selezionare id da table_name dove status = 1 "). perché mysql restituisce errori o non funziona la query.

L'uso principale dei backtick (`) in SQL è di usarli in situazioni in cui li richiamerai nuovamente nelle clausole imminenti. In ogni altro momento, si consiglia di utilizzare virgolette doppie (" ").

Ad esempio

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;

Nell'affermazione precedente vedi come Editore e posizione viene riutilizzato nella clausola GROUP BY .

Invece di usare

  

Raggruppa per nome, città, codice statale

Ho appena usato

  

Raggruppa per editore e posizione

Solo quando si presentano tali situazioni, è utile usare i backtick. In tutte le altre volte si consiglia di utilizzare virgolette doppie.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top