Mysqlはエラー1215(HY000)を報告します/テーブルの作成時に外部キー制約を追加できません

1.エラープロンプト

エラー1215(HY000):外部キー制約を追加できません

2.プロセスの説明

1.最初に次のテーブルを作成します
#创建学生表 
Create TABLE Student
	(Sno CHAR(9) PRIMARY KEY not null,	/*列级完整性约束,Sno是主码*/
   Sname CHAR(20) not null,
   Ssex CHAR(2),
   Sage SMALLINT,
   Sdept CHAR(20)
  )ENGINE=InnoDB DEFAULT CHARSET=utf8;/*指定字符集的编码方式为utf8,以便后续插入汉字型元组数据*/
2.次に、次のテーブルを作成します
#创建课程表
create table Course
	(Cno CHAR(4) PRIMARY KEY not null,	/*列级完整性约束,Sno是主码*/
   Cname char(40) NOT NULL,
   Cpno CHAR(4),										  /*Cpno是先修课*/
   Ccredit SMALLINT,
   FOREIGN KEY (Cpno) REFERENCES Course(Cno) /*表级完整性约束条件,Cpno是外码,被参照对象是Cource,被参照列是Cno*/
  )ENGINE=InnoDB DEFAULT CHARSET=utf8;
3.次に、次のテーブルを作成します
#创建选课表
CREATE TABLE SC
	(Sno CHAR(9)  not null ,
   Cno CHAR(4)  not null ,
   Grade SMALLINT,
   primary key (sno,cno),
   foreign key (Sno) references Student(sno),
   foreign key (Cno) references Course(cno)
  );
4. SCデータテーブルを作成すると、エラーが次のように報告されます。
ERROR 1215 (HY000): Cannot add foreign key constraint
  • エラー解釈:外部キー制約を追加できません
  • エラーの理由:SCデータテーブルはStudentテーブルとCourseテーブルに依存しますが、StudentテーブルとCourseテーブルの文字セットエンコーディングはutf8(中国語を含むタプルデータを挿入するため)、およびデフォルトの文字セットとして指定されているためです。 SCテーブルのエンコーディングはlatin1です。データテーブルエンジンのエンコーディングが一致しないため、エラーが報告されます。

三、解く

1. SCデータテーブルを作成するときは、文字セットエンコーディングもutf8として指定します
#创建选课表
CREATE TABLE SC
	(Sno CHAR(9)  not null ,
   Cno CHAR(4)  not null ,
   Grade SMALLINT,
   primary key (sno,cno),
   foreign key (Sno) references student(sno),
   foreign key (Cno) references Course(cno)
  )ENGINE=InnoDB DEFAULT CHARSET=utf8;

ERROR 1215(HY000)エラーレポートの4つの他の考えられる原因

  • データテーブルの単一の属性列のデータ型に一貫性がないため、エラーが発生します。現時点では、一貫性を保つために単一の属性列のデータ型を変更するだけで済みます。
  • データベースマスターテーブルとスレーブテーブルの異なる文字セット
    • 上記のプロセスの説明で報告されたエラーは、テーブルの作成時にデータテーブル全体の文字セットエンコーディング方法に一貫性がないことが原因です。つまり、複数のテーブルの関連する列のデータ型に一貫性がありません。
    • MySQLは文字セットのメソッドを表示および変更します
  • データテーブルエンジンのエンジニアリングの不一致が発生しました

参照:

1. MySQL:エラー1215(HY000):外部キー制約を追加できません

2.エラー1215(HY000):外部キー制約を追加できません

おすすめ

転載: blog.csdn.net/szw_yx/article/details/104695320