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 コマンドの使用

推薦する

ランダムな文字を生成する Java サンプルコード

サンプルコード: java.util.Random をインポートします。 java.util.UUI...

FirefoxでCookieとお気に入りをインポートおよびエクスポートする方法

Firefox は、多くの拡張機能とプラグインを備えた、よく使用されるブラウザです。IE に比べて多...

Vue プロジェクトのパッケージ化、マージ、圧縮により、Web ページの応答速度を最適化します。

目次序文1. リクエスト内容が大きすぎる解決: CDN の紹介リクエストリソースを圧縮する1. HT...

Dockerfile における ENV 命令の具体的な使用法の詳細な説明

1. Dockerfile 内の ENV 命令は、イメージの環境変数を定義するために使用されます。次...

Linux マルチスレッドにおけるフォークとミューテックス ロック プロセスの例

目次質問: 1. 最初の試み2. 合理的な分析3. 問題解決(1) pthread_join()の使...

Zabbix パスワードをリセットする方法 (ワンステップ)

問題の説明長い間アカウントパスワードを入力して Zabbix にログインしていないため、管理者パスワ...

CSS で 3 列レイアウトを実装するいくつかの方法と利点と欠点

序文3 列レイアウトは、その名前が示すように、両側が固定され、中央が適応します。実際の開発では、3 ...

Dockerコンテナとホストマシン間の8時間の差の問題を解決する

デプロイに docker-compose を使用すると、出力ログと関連イベントが検証されて出力される...

CSS中級者向けアダプティブレイアウトの5つのソリューションの詳細な説明

序文ページを作っていく上で、ページレイアウトに関する内容に遭遇することが多く、面接でも聞かれることも...

Dockerコンテナを停止または強制終了できない問題の解決策

Docker バージョン 1.13.1問題プロセス特定の環境のMySQLコンテナを停止、強制終了、ま...

Vue+flaskで動画合成機能を実現(ドラッグ&ドロップアップロード)

目次ドラッグアンドドロップアップロードについては以前の記事で書きました。ファイルをアップロードするF...

優れたユーザー インターフェース デザインのための 37 のヒント (画像付き)

1. 複数列レイアウトではなく、単一列レイアウトを使用する1 列のレイアウトにより、全体的な状況をよ...

Centos7 での MySQL 5.7.20 のインストールと設定に関する詳細なチュートリアル

1. 公式 Web サイトから MySQL 5.7 インストール パッケージ (mysql-5.7....

ゲーム開発におけるサウンド処理にCocosCreatorを使用する方法

目次1. Cocos Creatorでのオーディオ再生の基本1. 基本2. 一般的な方法2. Coc...

MySQLはフィールドからカンマ区切りの値を取り出して新しいフィールドを形成します

1例: 図1のフィールドを図2に分割するには アカウントIDを選択、 サブストリングインデックス(サ...