MySQLでは、バックティック(`
)記号の有無にかかわらずクエリを作成できます。例:
SELECT * FROM TEST;
SELECT * FROM `TEST`;
両方ともmysql-consoleで正常に動作します。
それらの間に技術的な違いはありますか?
`
単純なクエリよりも()を使用する利点はありますか?
MySQLでは、バックティック(`
)記号の有無にかかわらずクエリを作成できます。例:
SELECT * FROM TEST;
SELECT * FROM `TEST`;
両方ともmysql-consoleで正常に動作します。
それらの間に技術的な違いはありますか?
`
単純なクエリよりも()を使用する利点はありますか?
回答:
これらは引用識別子と呼ばれ、それらの間のテキストをリテラル文字列として処理するようにパーサーに指示します。キーワードまたはスペースを含む列またはテーブルがある場合に役立ちます。たとえば、次は機能しません。
CREATE TABLE my table (id INT);
しかし、次のようになります:
CREATE TABLE `my table` (id INT);
また、次はCOUNT
予約キーワードであるためエラーが発生します。
SELECT count FROM some_table
ただし、以下は正しく解析されます。
SELECT `count` FROM some_table
これがあなたのお役に立てば幸いです。
オブジェクト識別子の周りに何かを使用したい場合は、少なくとも標準の二重引用符を使用してください: "
これは、MySQL、PostgreSQL、SQL Server、Oracleなどで機能します 。MySQLの場合、デフォルト構成に応じてSQLモードansi_quotesが必要になる場合があります。
SET sql_mode = 'ANSI_QUOTES';
バックティックはMySQLでのみ使用され、他のブランドのDBMSでは機能しないタイプのSQLを学習します。
予約されている名前の列がある場合に役立ちます。
例:次のようなステートメントを照会できます。
select * from tablename group by `group`;
私の観点からは、@ Mr.Brownstoneの答えは部分的に正しいだけです。
`
MySQLでは、バックティックを使用して、文字列ではなく識別子を表すリテラルを区切ります。
これにより、スペース、予約語など、通常は受け入れられない文字を識別子として使用できます。例えば:
SELECT * FROM `Strange table name`;
また重要なことは、存在しない列を選択するなど、あなたが何か間違ったことをしているかどうかをパーサーが認識できることです。例えば:
SELECT notexistingcolumn FROM atable;
もしatable
存在しますが、notexistingcolumn
列が、それは価値としてそれを選択する(そしておそらく警告を発する)「notexistingcolumn」文字列リテラルとして解釈されますが存在しません。
代わりに、次を使用する場合:
SELECT `notexistingcolumn` FROM `atable`;
それがnotexistingcolumn
存在しない列の名前であることを認識し、エラーをスローします。
エイリアスを含むバッククォートで識別子を囲み、識別子に予約語や奇妙な文字を使用しないようにすることが常に望ましいと思います。
MySQLのバックティックの詳細については、https: //dev.mysql.com/doc/refman/8.0/en/identifiers.htmlをご覧ください。