我尝试运行我的代码来为我的学校年终项目制作表格,但它说外键约束的形成不正确。而且它是马来语的,因为这是我学校使用的语言。
create table `Kehadiran` (
`IC_Guru` int(12) auto_increment,
`Kod_Aktiviti` varchar(10),
`IC_Murid` varchar(12),
`Masa_hadir` varchar(20),
primary key(`IC_Guru`)
foreign key(`IC_Murid`)
REFERENCES `kelas` (`IC_Murid`)
on update cascade on delete CASCADE
)
一个问题是主键定义后缺少一个逗号。我不知道这是否在您的原始代码中,或者只是在您将其发布到 Stack Overflow 时丢失了。
create table `Kehadiran` (
`IC_Guru` int(12) auto_increment,
`Kod_Aktiviti` varchar(10),
`IC_Murid` varchar(12),
`Masa_hadir` varchar(20),
primary key(`IC_Guru`)
^ missing comma here
foreign key(`IC_Murid`)
REFERENCES `kelas` (`IC_Murid`)
on update cascade on delete CASCADE
)
除此之外,除非满足以下所有条件,否则您会收到错误:
kelas
。IC_Murid
表中的kelas
列是该表的主键或唯一键。IC_Murid
与在外键中引用它的 varchar(12)
列具有相同的数据类型 (Kehadiran
) 和字符集。您可能想在这里阅读更完整的外键要求清单:https://stackoverflow.com/a/4673775/20860
我还在我的书SQL反模式卷1:避免数据库编程的陷阱中写了一章解释可能的外键错误。