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は文字セットのメソッドを表示および変更します
- データテーブルエンジンのエンジニアリングの不一致が発生しました
参照: