MySQLでテーブルを作成する際、構文エラーが発生することがあります。特に、ターミナル上で直接SQL文を実行すると、細かいミスがエラーの原因になることが少なくありません。本記事では、CREATE TABLE文の間違いを修正し、正しくデータベースを作成する方法を解説します。
1. エラーの原因となるSQLの間違い
以下のSQLコードは、一見正しく見えますが、いくつかの問題があります。
CREATE TABLE mst_user ( id int(11) NOT NULL AUTO_INCREMENT, user_name varchar(25) unique NOT NULL, password varchar(25) NOT NULL, full_name varchar(50) NOT NULL, is_admin tinyint(1) NOT NULL DEFAULT 0, PRIMARY KEY (id) )ENGINE=InnoDB DAFAULT CHARSET=utf8;
問題点。
- 「DAFAULT」が誤字(正しくは「DEFAULT」)
- 「unique」の位置が間違っている(「UNIQUE (user_name)」として定義すべき)
- 「int(11)」の(11)は表示幅の指定であり、MySQL 8.0では意味がない
2. 正しいCREATE TABLE文の記述
上記のエラーを修正し、正しく動作するSQL文を以下に示します。
CREATE TABLE mst_user ( id INT NOT NULL AUTO_INCREMENT, user_name VARCHAR(25) NOT NULL, password VARCHAR(25) NOT NULL, full_name VARCHAR(50) NOT NULL, is_admin TINYINT(1) NOT NULL DEFAULT 0, PRIMARY KEY (id), UNIQUE (user_name) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
修正ポイント。
- 「DAFAULT」→「DEFAULT」に修正
- 「user_name」のUNIQUE制約を適切な位置に移動
- 「int(11)」の(11)を削除(データ型のサイズには影響しないため)
3. ターミナルで実行する際の注意点
ターミナルでSQLを実行する際、以下の点に注意しましょう。
- MySQLにログインする:「mysql -u ユーザー名 -p」
- 使用するデータベースを選択:「USE データベース名;」
- SQL文の最後に「;」を忘れない
例えば、以下の手順で実行できます。
mysql -u root -p
USE my_database; CREATE TABLE mst_user ( id INT NOT NULL AUTO_INCREMENT, user_name VARCHAR(25) NOT NULL, password VARCHAR(25) NOT NULL, full_name VARCHAR(50) NOT NULL, is_admin TINYINT(1) NOT NULL DEFAULT 0, PRIMARY KEY (id), UNIQUE (user_name) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
4. エラーを防ぐためのSQL実行チェック方法
MySQLでエラーを防ぐために、以下の方法を活用しましょう。
- 「EXPLAIN」文を活用する(実行前にSQLを検証)
- エラーメッセージを確認する(「SHOW ERRORS;」を実行)
- 「MySQL Workbench」などのGUIツールを活用(エラーを視覚的に確認できる)
例えば、構文チェックをしたい場合は、以下のコマンドを実行すると詳細なエラー情報が得られます。
SHOW ERRORS;
まとめ:正しいSQL文でエラーを防ごう
MySQLのCREATE TABLE文でエラーが発生する場合は、以下のポイントを確認しましょう。
- スペルミスがないか(「DAFAULT」ではなく「DEFAULT」)
- UNIQUE制約の位置が正しいか
- 「int(11)」の(11)は不要
- ターミナルで実行する前に「USE データベース名;」を実行
これらのポイントを意識して、正しいSQL文を作成しましょう!
コメント