MySQL
エラーコード
サーチ…
エラーコード1064:構文エラー
select LastName, FirstName,
from Person
返信メッセージ:
エラーコード:1064. SQL構文にエラーがあります。正しい構文についてはMySQLサーバのバージョンに対応するマニュアルをチェックし、2行目の 'from Person'の近くで使用してください。
MySQLから「1064エラー」メッセージを受け取ると、構文エラーなしではクエリを解析できません。言い換えれば、クエリの意味を理解できません。
エラーメッセージの引用は、MySQLが解析する方法を理解できないクエリの最初の文字で始まります。この例では、MySQLは文脈でfrom Person
意味をなさない。この場合、 from Person
直前に余分なカンマがあります。コンマは、 SELECT
節に別の列の記述があるとMySQLに指示します
構文エラーは、常に... near '...'
ます。引用符の冒頭にあるものは、エラーがある場所に非常に近いところにあります。エラーを見つけるには、引用符の最初のトークンと引用符の前の最後のトークンを見てください。
時々、あなたは... near ''
来るでしょう。つまり、引用符では何も表示されません。つまり、MySQLが理解できない最初の文字は、ステートメントの最後または最初に当てはまります。これは、クエリがアンバランス引用符が含まれている示唆して( '
または"
)またはアンバランス括弧またはあなたが前に正しく文を終了しなかったこと。
ストアドルーチンの場合、 DELIMITER
を正しく使用するのを忘れているかもしれません。
したがって、エラー1064が発生した場合は、クエリのテキストを見て、エラーメッセージに記載されている箇所を見つけます。その点を中心としたクエリのテキストを視覚的に調べます。
誰かにエラー1064のトラブルシューティングを依頼する場合は、クエリ全体のテキストとエラーメッセージのテキストの両方を入力することをお勧めします。
エラーコード1175:セーフアップデート
このエラーは、 KEY
列を使用するWHERE
句を含めずにレコードを更新または削除しようとしているときに表示されます。
削除または更新を実行するには、次のように入力します。
SET SQL_SAFE_UPDATES = 0;
セーフモードを再度有効にするには、次のように入力します。
SET SQL_SAFE_UPDATES = 1;
エラーコード1215:外部キー制約を追加できません。
このエラーは、開発者が義務付けている外部キー( FK
)要件の迅速なルックアップ検証を処理するために、テーブルが適切に構成されていない場合に発生します。
CREATE TABLE `gtType` (
`type` char(2) NOT NULL,
`description` varchar(1000) NOT NULL,
PRIMARY KEY (`type`)
) ENGINE=InnoDB;
CREATE TABLE `getTogethers` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`type` char(2) NOT NULL,
`eventDT` datetime NOT NULL,
`location` varchar(1000) NOT NULL,
PRIMARY KEY (`id`),
KEY `fk_gt2type` (`type`), -- see Note1 below
CONSTRAINT `gettogethers_ibfk_1` FOREIGN KEY (`type`) REFERENCES `gtType` (`type`)
) ENGINE=InnoDB;
注1:このようなKEYは、それに続く行のFK定義のために必要に応じて自動的に作成されます。開発者はスキップすることができ、必要に応じてKEY(別名インデックス)が追加されます。開発者がスキップしている例をsomeOther
示します。
これまでのところとても良い、以下の呼び出しまで。
CREATE TABLE `someOther` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`someDT` datetime NOT NULL,
PRIMARY KEY (`id`),
CONSTRAINT `someOther_dt` FOREIGN KEY (`someDT`) REFERENCES `getTogethers` (`eventDT`)
) ENGINE=InnoDB;
エラーコード:1215.外部キー制約を追加できません
この場合、 eventDT
高速検索を処理するために、 参照されるテーブルgetTogethers
にインデックスがないために失敗します。次の声明で解決される。
CREATE INDEX `gt_eventdt` ON getTogethers (`eventDT`);
テーブルgetTogethers
が変更され、 someOther
の作成が成功するようになりました。
FOREIGN KEY制約を使用したMySQLマニュアルページから:
MySQLでは、外部キーのチェックが高速でテーブルスキャンを必要としないように、外部キーと参照キーのインデックスが必要です。参照表では、外部キー列が同じ順序で最初の列としてリストされる索引が必要です。このような索引は、参照表に存在しない場合は自動的に作成されます。
外部キーと参照キーの対応する列には、同様のデータ型が必要です。整数型のサイズと符号は同じでなければなりません。文字列型の長さは同じである必要はありません。非バイナリ(文字)文字列の場合、文字セットと照合は同じでなければなりません。
InnoDBは、外部キーがインデックスカラムまたはカラムのグループを参照することを許可します。ただし、参照先の表には、参照先の列が同じ順序で最初の列としてリストされる索引が必要です。
最初の(一番左の)列の上の最後の点、および主キー要件の欠如(大いにアドバイスされています)に注意してください。
参照元 (子)テーブルが正常に作成されると、自動的に作成されたキーは、次のようなコマンドで表示されます。
SHOW CREATE TABLE someOther;
このエラーを経験する他の一般的なケースには、前述のようにドキュメントが含まれますが、強調表示する必要があります。
INT UNSIGNED
指して署名されたINT
見かけ上の些細な違い。マルチカラム(複合)キーおよび最初の(最も左の)注文要件の理解に問題がある開発者。
1045アクセスが拒否されました
「GRANT」と「rootパスワードの回復」の説明を参照してください。
1236「複製不可能な位置」
通常これはマスターがクラッシュし、 sync_binlog
がオフであったことを意味します 。解決策は、スレーブ上の次のbinlogファイル(マスターを参照)のCHANGE MASTER to POS=0
にCHANGE MASTER to POS=0
変更することです。
原因:マスタは、( sync_binlog=OFF
場合)そのバイナリログにフラッシュする前にスレーブにレプリケーションアイテムを送信します。フラッシュの前にマスタがクラッシュした場合、スレーブはすでに論理的にバイナリログのファイルの最後を通過しています。マスタが再び起動すると、新しいバイナリログが開始されるので、そのバイナリログの先頭に変更することが最良の解決方法です。
余分なI / Oが発生する可能性がある場合、長期的な解決策はsync_binlog=ON
です。
(GTIDを使用している場合は...?)
2002年、2003年接続できません
ファイアウォールの問題をブロックするポート3306を確認します。
いくつかの可能な診断および/または解決策
- サーバーは実際に動作していますか?
- "service firewalld stop"および "systemctl disable firewalld"
- Telnetマスター3306
-
bind-address
確認する - check
skip-name-resolve
- ソケットを確認してください。
1067、1292、1366、1411 - 数字、日付、デフォルトなどの値が不正
1067これはおそらくTIMESTAMP
デフォルトに関連しており、時間が経つにつれて変化しています。 Dates&TimesページのTIMESTAMP defaults
を参照してください。 (まだ存在しない)
1292/1366 DOUBLE / Integer文字やその他の構文エラーをチェックします。列が揃っていることを確認します。おそらく、あなたはVARCHAR
入れていると思うかもしれませんが、それは数値の列に揃えられています。
1292 DATETIME過去または未来が遠すぎるかどうかをチェックします。夏時間が変更された午前2時から午前3時までをチェックしてください。 +00
タイムゾーンのような不正な構文がないか確認してください。
1292 VARIABLE SET
しようとしているVARIABLE
許容値を確認してください。
1292 LOAD DATA 「悪い」行を見てください。エスケープ記号などを確認します。データ型を確認します。
1411 STR_TO_DATEフォーマットされた日付が間違っていますか?
126,127,134,144,145
MySQLデータベースからレコードにアクセスしようとすると、これらのエラーメッセージが表示されることがあります。これらのエラーメッセージは、MySQLデータベースの破損のために発生しました。以下はタイプです
MySQL error code 126 = Index file is crashed
MySQL error code 127 = Record-file is crashed
MySQL error code 134 = Record was already deleted (or record file crashed)
MySQL error code 144 = Table is crashed and last repair failed
MySQL error code 145 = Table was marked as crashed and should be repaired
MySQLのバグ、ウイルス攻撃、サーバークラッシュ、不適切なシャットダウン、破損したテーブルがこの破損の原因です。それが壊れてしまうと、アクセス不能になり、もはやアクセスできなくなります。アクセシビリティを得るには、更新されたバックアップからデータを取得する最善の方法です。ただし、更新されたバックアップや有効なバックアップがない場合は、MySQLの修復に進むことができます。
テーブルエンジンタイプがMyISAM
場合は、 CHECK TABLE
適用し、次にREPAIR TABLE
を適用します。
InnoDBへの変換について真剣に考えてください。このエラーは再び起こりません。
構文
CHECK TABLE <table name> ////To check the extent of database corruption
REPAIR TABLE <table name> ////To repair table
139
エラー139は、テーブル定義内のフィールドの数とサイズがある制限を超えていることを意味する場合があります。回避策:
- スキーマを再考する
- いくつかのフィールドを正規化する
- テーブルを垂直方向に分割する
1366年
これは、通常、文字セットの処理がクライアントとサーバーの間で一貫していないことを意味します。詳細はこちらをご覧ください。
126巻、1054巻、1146巻、1062巻、24巻
(休憩を取る)これらの4つのエラー番号を含めると、このページではユーザーの典型的なエラーの約50%をカバーすると思います。
(はい、この「例」にはリビジョンが必要です)。
24ファイルを開くことができません(開いているファイルが多すぎます)
open_files_limit
はOSの設定に由来します。 table_open_cache
はそれよりtable_open_cache
する必要があります。
これらのエラーが発生する可能性があります:
ストアドプロシージャの
DEALLOCATE PREPARE
に失敗しました。多数のパーティションとinnodb_file_per_table = ONのPARTITIONEDテーブル。与えられたテーブルに50以上のパーティションを持たないようにしてください(さまざまな理由で)。 (「ネイティブパーティション」が利用可能になると、このアドバイスは変更される可能性があります)。
明らかに回避策は、OSの制限を増やすことです:より多くのファイルを許可するには、 ulimit
または/etc/security/limits.conf
変更するか、 sysctl.conf
(kern.maxfiles&kern.maxfilesperproc)または別のもの(OSに依存)を変更します。次に、 open_files_limit
とtable_open_cache
ます。
5.6.8以降、 open_files_limit
はmax_connections
に基づいて自動サイズ設定されていますが、デフォルトから変更することは可能です。
1062 - 重複エントリ
このエラーは、主に次の2つの理由により発生します
重複値 -
Error Code: 1062. Duplicate entry '12' for key 'PRIMARY'
主キー列は一意であり、重複エントリを受け入れません。したがって、すでに存在する新しい行を挿入しようとすると、このエラーが発生します。
これを解決するには、主キー列を
AUTO_INCREMENT
に設定します。また、新しい行を挿入しようとするときは、主キー列を無視するか、NULL
値を主キーに挿入しNULL
。
CREATE TABLE userDetails(
userId INT(10) NOT NULL AUTO_INCREMENT,
firstName VARCHAR(50),
lastName VARCHAR(50),
isActive INT(1) DEFAULT 0,
PRIMARY KEY (userId) );
--->and now while inserting
INSERT INTO userDetails VALUES (NULL ,'John', 'Doe', 1);
ユニークなデータフィールド -
Error Code: 1062. Duplicate entry 'A' for key 'code'
一意の列を割り当てて、その列に既に存在する値を持つ新しい行を挿入しようとすると、このエラーが発生します。
このエラーを解決するには、通常の
INSERT
ではなくINSERT IGNORE
を使用しINSERT IGNORE
。挿入しようとしている新しい行が既存のレコードを複製していない場合、MySQLはそれを通常通り挿入します。レコードが重複している場合、IGNORE
キーワードはエラーを生成せずに破棄します。
INSERT IGNORE INTO userDetails VALUES (NULL ,'John', 'Doe', 1);