MySQL错误:1005无法创建表(错误号:150)

时间:2019-12-17 21:27:59

标签: mysql foreign-keys

当我想更改“ matkul_prasyarat”表的约束时突然出现错误,而mysql删除“ matkul_prasyarat”表,然后当我尝试再次创建它时,错误号为150 这是错误

there is no index in the table which would contain
the columns as the first columns, or the data types in the
table do not match the ones in the referenced table
or one of the ON ... SET NULL columns is declared NOT NULL. Constraint:
,
  CONSTRAINT `matkul_prasyarat_ibfk_2` FOREIGN KEY (`nama_matkul`) REFERENCES `matkul_list` (`nama_matkul`) ON DELETE CASCADE ON UPDATE CASCADE

如何解决这个问题?

我想制作表格“ matkul_prasyarat”

PK no tinyint 20 AI 
   no_id_matkul int 20
   nama_matkul VARCHAR 50

这是我可以从MySQL: Can't create table (errno: 150)想到的语法 但这是错误

CREATE TABLE matkul_prasyarat (
    no INT,
    nama_matkul VARCHAR,
    INDEX matkul_prasyarat_ibfk_2 (nama_matkul),
    FOREIGN KEY (nama_matkul)
        REFERENCES matkul_list(nama_matkul)
        ON DELETE CASCADE
) ENGINE=INNODB;

编辑:alrd上面的语法有效,我忘了输入大小,感谢您的帮助

1 个答案:

答案 0 :(得分:0)

最可能的错误原因是数据类型不匹配。

检查nama_matkul中引用列(matkul_prasyarat)的数据类型

并将其与nama_matkul表中的数据类型引用列(matkul_list)进行比较。

验证matkul_list表是否存在,并且它具有一个以nama_matkul作为前导(第一)列的索引。

我们可以通过检查以下内容的输出来检查列的数据类型以及是否存在合适的索引:

 SHOW CREATE TABLE matkul_list

nama_matkul列的数据类型必须与引用列的数据类型完全匹配。

如果这些都不是问题,请确保matkul_list表正在使用InnoDB存储引擎。