【问题标题】:MySQL ERROR: 1005 Can't create table (errno : 150) [duplicate]MySQL 错误:1005 无法创建表(错误号:150)[重复]
【发布时间】:2020-04-10 10:26:48
【问题描述】:

当我想更改“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 上面的语法我忘了输入大小,谢谢你的帮助

【问题讨论】:

  • 这能回答你的问题吗? MySQL: Can't create table (errno: 150)
  • 是的,它是一样的,但我是 mysql 的新手,我不知道解决这个问题的 sql 语法
  • ALTER TABLE matkul_list ADD INDEX (nama_matkul)
  • 外键引用主键通常更好,而不是另一列。
  • @Barmar 我已经 alrd dd 索引到 nama_matkul,但它仍然错误,我试图从第一个评论中创建 sql 语法但它的错误,你介意检查我的 sintax 吗?生病编辑这篇文章

标签: mysql foreign-keys


【解决方案1】:

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

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

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

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

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

 SHOW CREATE TABLE matkul_list

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

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

【讨论】:

  • 为什么我只能得到这些 CREATE TABLE matkul_list (no int(11) NOT NU...如何获得完整的结果?
  • 错误信息明确表示问题在于FK中引用的列上没有索引。为什么你认为这意味着数据类型不匹配?
  • @Barmar,错误信息继续:"...或者表中的数据类型与引用表中的数据类型不匹配..."跨度>
  • @Barmar:InnoDB 存储引擎会向 MySQL 报告错误 150 有几个原因。根据我的经验,错误的最常见原因是数据类型不匹配(例如 BIGINT 与 INT UNSIGNED、VARCHAR 的最大长度或字符集等)。我的回答还指出了其他常见原因:缺少索引,引用的表不是 InnoDB 存储引擎。我不打算做出准确的诊断(信息不足),也不打算全面。我规定了我们首先检查的内容的简短清单。但如果问题不在那个短名单上,我会有些惊讶。
  • 是的,我没有在错误消息中进一步阅读。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-17
  • 2013-11-29
  • 1970-01-01
  • 2013-07-22
  • 2012-02-19
  • 2013-02-07
  • 1970-01-01
相关资源
最近更新 更多