ここでいくつかの SQL の質問に対するいくつかの回答とコメントを読み、私の友人がそれらを禁止するポリシーを持つ場所で働いていると聞いた後、MySQL でフィールド名の周りにバッククォートを使用することに問題があるかどうか疑問に思っています.
あれは:
SELECT `id`, `name`, `anotherfield` ...
-- vs --
SELECT id, name, anotherfield ...
バッククォートを使用すると、代替文字を使用できます。クエリの作成ではそれほど問題ではありませんが、バッククォートを使用できると仮定すると、次のようなばかげたもので逃げることができると思います
SELECT `id`, `my name`, `another field` , `field,with,comma`
もちろん、これは不適切な名前のテーブルを生成します。
簡潔に言うと、問題はありません。クエリをそのまま実行すると、次のようになります。
EXPLAIN EXTENDED Select foo,bar,baz
返される生成された警告には、バックティックと完全修飾テーブル名が含まれます。したがって、クエリ生成機能とクエリの自動再書き込みを使用している場合、バッククォートを使用すると、コードの解析が混乱しにくくなります。
ただし、バッククォートを使用できるかどうかを強制するのではなく、名前の基準を設定する必要があると思います。より「現実的な」問題を解決します。
バッククォートの唯一の問題は、ANSI-SQL に準拠していないことです。たとえば、SQL Server では機能しません。
SQL を別のデータベースに移植する必要がある場合は、二重引用符を使用してください。
私にとって、フィールド名を扱うときに常にそれらを使用することは非常に理にかなっています。
バッククォートは、標準の ANSI SQL の一部ではありません。mysqlマニュアルから:
ANSI_QUOTES SQL モードが有効になっている場合は、二重引用符で識別子を引用することもできます
したがって、バックティックを使用してから MySQL から離れることを決定した場合、問題が発生します (ただし、おそらくもっと大きな問題も発生する可能性があります)。
MYSQLを使い続けても、クエリの視覚的な曖昧さを除けば、何も問題はありません。ただし、テーブル名および列名として予約済みキーワードまたは埋め込みスペースを使用することはできます。これはほとんどのデータベースエンジンではノーノーであり、後で移行することはできません。
読みやすさに関しては、多くの人がSQLキーワードにキャップを使用しています。
SELECT some_fied, some_other_field FROM whatever WHERE id IS NULL;
私に尋ねると、常にバッククォートを使用する必要があります。しかし、チームがそれらを使用したくない理由がいくつかあります。
利点:
短所:
バッククォートでコードベースを検索する方がはるかに簡単です。という名前のテーブルがあるとしますevent
。grep -r "event" *
何百もの結果が返される可能性があります。grep -r "\`event\`" *
おそらくあなたのデータベースを参照しているものを返します。
私の知る限り、バッククォートを使用する目的は、予約済みのキーワードと一致する名前を使用できるようにすることです。そのため、名前が予約済みのキーワードと衝突していない場合、バッククォートを使用する理由がわかりません。しかし、それはそれらを禁止する理由にもなりません。
バックティック``についての簡単なことは、database_name、table_name などの識別子を示すために使用され、文字列リテラルには一重引用符''、二重引用符""が使用されますが、 "" は値をそのまま出力するために使用され、 '' 値変数は保持または保持されます。別のケースでは、彼が持っているテキストを印刷します。
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..
"status" などのデフォルトの mysql または mssql 値としていくつかのフィールド名を使用している場合は、バッククォート ( "select status
from table_name" または "select id from table_name where status
=1" ) を使用する必要があります。mysql がエラーを返すか、クエリが機能しないためです。