[解決済み] エラーコードです。1005. テーブル'...'を作成できません。(errno: 150)
2022-10-28 22:22:06
質問
この問題の解決策をインターネットで検索し、Stack Overflowの質問を確認しましたが、私のケースではどの解決策もうまくいきませんでした。
私はテーブルsira_noからmetal_kodへの外部キーを作成したいです。
ALTER TABLE sira_no
ADD CONSTRAINT METAL_KODU FOREIGN KEY(METAL_KODU)
REFERENCES metal_kod(METAL_KODU)
ON DELETE SET NULL
ON UPDATE SET NULL ;
このスクリプトは返します。
Error Code: 1005. Can't create table 'ebs.#sql-f48_1a3' (errno: 150)
参照されるテーブルにインデックスを追加してみました。
CREATE INDEX METAL_KODU_INDEX ON metal_kod (METAL_KODU);
両方のテーブルでMETAL_KODUをチェックしましたが(文字セットと照合順序)、この問題の解決策を見つけることができませんでした。どうすればこの問題を解決できるでしょうか?
ここに、metal_kod テーブルがあります。
METAL_KODU varchar(4) NO PRI
DURUM bit(1) NO
METAL_ISMI varchar(30) NO
AYAR_YOGUNLUK smallint(6) YES 100
どのように解決するのですか?
エラーコードです。1005 -- あなたのコードに間違った主キーの参照があります。
通常、存在しない外部キーフィールドが参照されていることが原因です。タイプミスがあるか、同じであるべきケースをチェックしているか、フィールドタイプの不一致があるのかもしれません。外部キーにリンクされたフィールドは、定義と正確に一致する必要があります。
いくつかの既知の原因が考えられます。
-
2 つのキー フィールドのタイプおよび/またはサイズが正確に一致しない。例えば、一方が
INT(10)
である場合、キーフィールドはINT
である必要がありBIGINT
またはSMALLINT
またはTINYINT
. また、一方がSIGNED
であること、そしてもう一方がUNSIGNED
. どちらも全く同じである必要があります。 - 参照しようとしているキー フィールドの 1 つにインデックスがないか、またはプライマリ キーでありません。リレーションシップのフィールドの 1 つが主キーでない場合、そのフィールドにインデックスを作成する必要があります。
- 外部キー名がすでに存在するキーと重複している。外部キーの名前がデータベース内で一意であることを確認します。キー名の末尾にランダムな文字を数文字追加して、これをテストしてください。
-
1 つまたは両方のテーブルが
MyISAM
テーブルでなければなりません。外部キーを使うには、テーブルの両方がInnoDB
. (実際には、もし両方のテーブルがMyISAM
である場合、エラーメッセージは表示されません - キーが作成されないだけです)。クエリブラウザでは、テーブルの種類を指定することができます。 -
カスケードが指定されている
ON
DELETE
SET
NULL
となっていますが、関連するキーフィールドにはNOT
NULL
. この問題は、カスケードを変更するか、フィールドでNULL
の値を許可するように設定することです。 - Charset と Collate のオプションが、テーブル レベルとキー列の個々のフィールド レベルの両方で同じであることを確認します。
- 外部キー列にデフォルト値 (つまり、default=0) が設定されています。
- リレーションシップのフィールドの 1 つが複合 (コンポジット) キーの一部であり、それ自身の個別のインデックスを持っていない。フィールドが複合キーの一部としてインデックスを持っていても、制約で使用するには、そのキーフィールドだけのために個別のインデックスを作成する必要があります。
-
に構文エラーがあります。
ALTER
ステートメントに構文エラーがあるか、リレーションシップのフィールド名のひとつを間違えています。 - 外部キーの名前が最大長である 64 文字を超えています。
詳細は、以下を参照してください。 MySQL エラー番号 1005 テーブルを作成できません。
関連
-
MySQL インタビューの質問 - ハッシュインデックスを設定する方法
-
[解決済み] [GROUP BY句に含まれるか、集約関数で使用される必要があります。
-
Mysql がエラー 1241 を報告 オペランドは 1 つのカラムを含む必要があります。
-
SQLException。オペランドは1列でなければなりません。
-
'INSERT文はFOREIGN KEY制約「FK_TourismReservation_Users」と競合していました。その
-
群関数解の無効な使用
-
[解決済み] ユーザー 'root'@'localhost' (パスワード: YES を使用) のアクセス拒否 - 特権がない?
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] SQLでカラムに最大値を持つ行のみを選択する [重複]。
-
[解決済み】既存テーブルへの外部キー追加
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
MySqlの整数インデックスと文字列インデックスの失敗または暗黙の変換問題
-
MySQLのLike演算子に関する詳細
-
SQL集計、グループ化、ソート
-
MySQL サービスとデータベース管理
-
MySql認証ベースのvsftpd仮想ユーザー
-
[解決済み】MySQL - オペランドは1つのカラムを含む必要があります。
-
[解決済み】DynamoDB : 提供されたキー要素がスキーマと一致しません。
-
'INSERT文はFOREIGN KEY制約「FK_TourismReservation_Users」と競合していました。その
-
msql クエリでのエラー 'where 節' の不明な列 'yellow fruit'
-
[解決済み] SQLを使用してSUMとSUBTRACTを行うには?