MySQL创建含外键表时遇1064语法错误,求排查解决
解决MySQL/MariaDB创建含外键表的1064语法错误
我一眼就定位到问题啦,你的SQL脚本里主键定义的语法有误,这直接导致了MariaDB解析器报错。
错误根源
你写的主键定义是:
PRIMARY KEY KD_AUTO
在MySQL和MariaDB中,不管是单个列还是多个列作为主键,都必须把列名放在圆括号内。正确的写法应该是:
PRIMARY KEY (KD_AUTO)
这个语法错误让解析器无法正确识别后续的外键定义语句,所以报错指向了外键行,但实际问题出在前面的主键定义上。
修正后的完整SQL脚本
CREATE TABLE tbl_mt_kuliah ( KD_AUTO INT(4) NOT NULL AUTO_INCREMENT, NIM INT(10) NOT NULL, KD_MATA_KULIAH INT(4) NOT NULL, RUANG VARCHAR(4) NOT NULL, KD_DOSEN INT(4) NOT NULL, JAM TIME NOT NULL, HARI DATE NOT NULL, TH_AJARAN YEAR NOT NULL, SMESTER INT(2) NOT NULL, PRIMARY KEY (KD_AUTO), FOREIGN KEY FK_MATKUL(KD_MATA_KULIAH) REFERENCES mt_kuliah(KD_MATA_KULIAH), FOREIGN KEY FK_MHS(NIM) REFERENCES tbl_mahasiswa(NIM), FOREIGN KEY FK_DOSEN(KD_DOSEN) REFERENCES tbl_dosen(KD_DOSEN) );
额外注意事项
- 确保被引用的表(
mt_kuliah、tbl_mahasiswa、tbl_dosen)已经提前创建,不存在的话外键会创建失败。 - 被引用的列(比如
mt_kuliah.KD_MATA_KULIAH)必须是对应表的主键或唯一约束列,否则外键关联不成立。 - 确认当前表的外键列和被引用列的数据类型完全一致(比如都是
INT(4)),数据类型不匹配也会导致外键创建失败。
内容的提问来源于stack exchange,提问作者asqa
相关产品推荐
相关产品推荐

