【MySQL初心者向け】予約語を列名に使いたい?エスケープの方法と注意点
MySQLで予約語を列名として使用する際のエスケープ方法
エスケープ方法
予約語をエスケープするには、バッククォート(`)で囲みます。
CREATE TABLE users (
`user_id` INT PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL,
`email` VARCHAR(255) UNIQUE NOT NULL,
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
);
上記例では、user_id
、created_at
がMySQLの予約語ですが、バッククォートで囲むことで問題なく使用できます。
- バッククォートは、テーブル名、列名、エイリアス名に使用できます。
- バッククォートを使用する場合は、識別子の名前付け規則に従う必要があります。
- 識別子名の長さには制限がありますので、MySQLのマニュアルを確認してください。
-- テーブルの作成
CREATE TABLE users (
`user_id` INT PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL,
`email` VARCHAR(255) UNIQUE NOT NULL,
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
);
-- データの挿入
INSERT INTO users (`user_id`, `name`, `email`, `created_at`)
VALUES (1, 'Taro Yamada', '[email protected]', NOW());
-- データの選択
SELECT `user_id`, `name`, `email`, `created_at` FROM users;
このコードでは、以下の点に注意してください。
- テーブル名、列名、エイリアス名にもバッククォートを使用できます。
リソース
予約語の代わりに、その意味を連想させる別の名前を使用することができます。
例えば、user
という予約語のかわりに、username
やuser_name
などの名前を使用することができます。
CREATE TABLE users (
user_id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(255) NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
);
複合識別子を使用する
2つ以上の単語を組み合わせて、列名を作成することができます。
CREATE TABLE users (
user_id INT PRIMARY KEY AUTO_INCREMENT,
user_name VARCHAR(255) NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
);
シノニムを使用する
MySQL 5.7以降では、シノニムを使用して、予約語を別の名前に置き換えることができます。
CREATE SYNONYM FOR user AS user_name;
CREATE TABLE users (
user_id INT PRIMARY KEY AUTO_INCREMENT,
user_name VARCHAR(255) NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
);
大文字と小文字の違いを利用する
MySQLは、大文字と小文字を区別します。そのため、予約語と同じスペルであっても、大文字と小文字を逆にすれば、識別子として使用することができます。
CREATE TABLE users (
USER_ID INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
);
注意事項
上記の方法を使用する場合は、以下の点に注意する必要があります。
- 識別子の名前付け規則に従う必要があります。
- 他のユーザーとの互換性を考慮する必要があります。
mysql escaping