MySQL テーブル作成外部キー エラーの解決方法

MySQL テーブル作成外部キー エラーの解決方法

データベーステーブルA:

テーブル task_desc_tab を作成します
(
  id INT(11) PRIMARY KEY NOT NULL COMMENT '自動増分主キー' AUTO_INCREMENT,
  <strong>taskname</strong> VARCHAR(200) NOT NULL COMMENT 'タスク名',
  sqlname VARCHAR(20) NOT NULL COMMENT 'sqlファイル名',
  params VARCHAR(5000) NOT NULL COMMENT 'タスクパラメータ(JSON文字列形式)',
  updatetime TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '更新時刻',
  詳細 VARCHAR(3000) COMMENT 'タスクの説明情報(メモ用)'
)
 エンジン = InnoDB
 デフォルト文字セット = utf8;

データベースB:

テーブル exec_plan_tab を作成する
(
  id INT(11) 主キー NOT NULL AUTO_INCREMENT,
  <strong>タスク名</strong> VARCHAR(200) NOT NULL、
  開始日 DATE NOT NULL、
  終了日 DATE NOT NULL、
  updatetime TIMESTAMP デフォルト CURRENT_TIMESTAMP、
  制約 exec_plan_tab_task_desc_tab_taskname_fk 外部キー (taskname) 参照 task_desc_tab (taskname)
)
 エンジン = InnoDB
 デフォルト文字セット = utf8;

目標: テーブル B の taskname が外部キーとなるようにテーブルを作成します。テーブル A の taskname フィールドを参照してください。テーブルを作成すると、次のエラーが報告されます。

[2018-07-19 15:02:29] [HY000][150] 外部キー制約を持つテーブル 'daxin/#sql-5d_30' の作成に失敗しました。参照列が最初の列として表示される参照テーブルにインデックスがありません。
[2018-07-19 15:02:29] [HY000][1215] 外部キー制約を追加できません
[2018-07-19 15:02:29] [HY000][1215] 外部キー制約を追加できません

トラブルシューティングの結果、問題の原因が判明しました。テーブル A の taskname は、レコードの一意性を確保し、テーブル B で参照されるときに曖昧さを避けるために、UNIQUE フィールドを使用して変更する必要があります。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • MySQLは実際には3つの関係テーブルを作成します
  • MySQL で 800 万エントリのテスト データ テーブルをすばやく作成する方法
  • MySQL と PHP の基礎と応用トピック: データベース テーブルの作成
  • Pythonはdict辞書型のデータをMysqlに保存し、テーブルと列を自動的に作成します
  • 初心者向けのMySQLデータベースとテーブルDDLの作成と操作の学習
  • MySQLデータベースを使い始めるための最初のステップはテーブルを作成することです
  • MySQLでテーブルを作成し、フィールドコメントを追加する方法
  • MySQL テーブル作成操作コマンドの共有

<<:  スライディングカルーセル効果を実現する js

>>:  Linux crontab コマンドの使用

推薦する

MySQL インデックス プッシュダウンを 5 分で理解する

目次インデックス プッシュダウンとは何ですか?インデックスプッシュダウン最適化の原理インデックスプッ...

Windows で MySQL マスター スレーブ レプリケーションを構成する方法

MySQL マスター/スレーブ レプリケーションを使用すると、1 つのデータベース (マスター デー...

CSS3 タイムラインアニメーション

成果を達成する html <h2>CSS3 タイムライン</h2> <...

proxy_pass がパス パスに従って転送する場合の "/" 問題の詳細な説明

nginx で proxy_pass を設定するときに、^~ に従ってパスを一致させる場合は、pro...

jQuery を使用してカルーセル効果を実装する

この記事では、jQueryでカルーセルチャートを実装するための具体的なコードを参考までに共有します。...

Linux ディスク パーティションの実装の原理と方法の分析

覚えて: IDE ディスク: 最初のディスクは hda、2 番目のディスクは hdb...最初のディ...

ノードをMySQLデータベースに接続する際に発生する問題と解決策

今日、MySQL の新しいバージョン (8.0.21) をインストールしましたが、ノード フレームワ...

ウェブ上の模倣と盗作に関する議論

2005年に業界に入ってから数か月後、労働者の日休みの期間中、1か月以上毎日12時まで残業をしました...

MySQL 8.0 の新機能: ハッシュ結合

MySQL 開発チームは、2019 年 10 月 14 日に MySQL 8.0.18 GA バージ...

VueはAmapを使用して都市の位置特定を実現

この記事では、Amapを使用して都市の位置特定を実現するVueの具体的なコードを参考までに共有します...

Linux は、Deepin がルートユーザーとして Google Chrome ブラウザを起動できない問題を解決します

Deepin がルートユーザーとして Google Chrome ブラウザを起動できない問題を解決す...

Nginxの書き換えモジュールの詳細な説明

書き換えモジュールは ngx_http_rewrite_module モジュールです。その主な機能は...

プロジェクトにaxiosをカプセル化する実際のプロセス

目次序文axiosカプセル化の利点パッケージのアイデア設定の優先順位axiosインスタンス構成1. ...

Node.jsをゼロから学ぶ

目次URL モジュール1. 解析メソッド2. フォーマット方法3. 解決方法イベントモジュール(イベ...

Dockerカスタムネットワークの詳細な紹介

目次Dockerカスタムネットワーク1. カスタムネットワークの紹介2. カスタムネットワークを作成...