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

推薦する

Vueプロジェクトをパッケージ化してリリースする手順

目次1. 開発環境から本番環境への移行2. 統一されたリクエストパスを設定する3. パッケージ化コマ...

MySQL を暗号化および復号化するいくつかの方法 (要約)

目次前面に書かれた双方向暗号化エンコード/デコードAES_ENCRYPT/AES_DECRYPT D...

JavaScript Canvas で三目並べゲームを実装

この記事では、JavaScript Canvasで三目並べゲームを実装するための具体的なコードを参考...

MySQL における Datetime と Timestamp の使用の概要

目次1. MySQL で現在の時刻を表現するにはどうすればよいでしょうか? 2. TIMESTAMP...

セマンティック XHTML タグの紹介

まず最初に指摘しておきたいのは、人間は視覚的な区分を通じてコン​​テンツの意味を判断できるが、検索エ...

docker を使用して Windows 10 Home バージョンで Laravel 開発環境を構築する方法の詳細なチュートリアル

オペレーティング·システム: Win10 ホームエディションDockerをインストールします:公式サ...

Linux システムで grub.cfg ファイルの破損を修復する手順

目次1. grub.cfg ファイルの紹介1. grub.cfg ファイルの場所2. grub.cf...

uniapp エントリーレベル nvue クライミングピット記録の分析

目次序文こんにちは世界画像 境界線の半径を設定する実ピクセルを設定する外部CSSをインポートttfフ...

React.js フレームワーク Redux 基本ケースの詳細な説明

react.js フレームワーク Redux https://github.com/reactjs/...

MySQL における単一テーブルと複数テーブル、およびビューと一時テーブルに対する Update と Select の違い

1. テーブルAのデータを使用してMySQLのテーブルBの内容を更新するたとえば、データ テーブル内...

MySQL分離の使用手順を読む

現在のトランザクションはどの履歴バージョンを読み取ることができますか?読み取りビューは、トランザクシ...

MySQL MHA 操作ステータス監視の概要

目次1. プロジェクトの説明1.1 背景1.2 実装設計1.2.1 従来の方法1.2.2 最適化され...

MySQL における explain の役割の詳細な説明

1. MYSQLインデックスインデックス: MySQL がデータを効率的に取得するのに役立つデータ構...

Linux での chmod コマンドの使用方法の詳細な説明

chmod コマンド構文chmod コマンドを使用する場合の正しい構文は次のとおりです。 chmod...

Vueコンポーネントドキュメント生成ツールライブラリのメソッド

目次.vue ファイルの解析文書情報を抽出するコンポーネント名、説明、プロパティ、メソッド、モデルを...