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のタイプを学びます。
つまり、テーブル名にスペースを含めることができます。もちろん、特に魅力的ではありません。 SQL Serverの[]と同じです。
予約されている名前の列がある場合に役立ちます。
例:次のようなステートメントをクエリできます。
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 で読むことができます。