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 圧縮パッケージ版 zip インストール設定方法

圧縮版の記事ではデータの初期化がされていないなどいくつか問題があったため、Windows にインスト...

Node.js を使用して C# のデータ テーブル エンティティ クラス生成ツールを作成する方法

Microsoft は T4 テンプレートを提供していますが、使用するのが非常に難しいと思います。ス...

NavicatがMySQL8.0.11に接続するとエラー2059が発生する

間違いNavicat Premium を使用して MySQL に接続すると、次のエラーが発生します。...

DockerでGDBを使用するときにブレークポイントを入力できない問題を解決する

質問docker で gdb を実行すると、ブレークポイントに到達しますが、ブレークポイントに入るこ...

Jenkins の docker-compose デプロイメントと構成に関する詳細なチュートリアル

Docker-compose デプロイメント構成 Jenkins 1. Docker-compose...

Vue イベントの $event パラメータ = イベント値の場合

テンプレート <el-table :data="データリスト"> &...

Vueのミックスインと継承について詳しく説明します

目次序文ミキシンMixin ノート (重複名)ローカルミックスイングローバル ミックスイン継承するミ...

要素テーブルヘッダー行の高さの問題の解決

目次序文1. 問題の原因2. 解決策VueはelementUIテーブルtr thの高さと背景色を変更...

Nginx を使用して rtmp ライブ サーバーを実行する方法

今回は、コンピューターや携帯電話用の rtmp ライブ ブロードキャスト サーバーを設定し、ライブ ...

レンダリング関数と JSX の詳細

目次1. 基本2. ノード、ツリー、仮想DOM 1. 仮想DOM 3. createElementパ...

VMWare14.0.0のUbuntu仮想マシンで共有フォルダを設定する

これは私の最初のブログ投稿です。時間の制約があるため、どのようにフォーマットすればよいかわかりません...

ローカルのMySQLをサーバーデータベースに移行する方法

Linux の scp コマンド (Windows では scp は使用できません) と、mysql...

Linuxダイナミックリンクライブラリの使用

通常のプログラムと比較すると、ダイナミック リンク ライブラリにはメイン関数がなく、一連の関数の実装...

JavaScriptでよく使われる配列重複排除実戦ソースコード

アレイの重複排除は、通常、就職面接中に遭遇し、アレイの重複排除方法のコードを手動で記述することが求め...

Ubuntu 18.0.4 は mysql をインストールし、エラー 1698 (28000): ユーザー ''root''@''localhost'' のアクセスが拒否されましたを解決します

序文最近 Linux を学び、その後 Win から Ubuntu に変更しました。以前インストールし...