MySQLのCREATE TABLE文で発生するエラーの解決方法|正しい記述と修正ポイント

データベース

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文を作成しましょう!

コメント

タイトルとURLをコピーしました