mysql - 无法添加外键 MySQL :errno 150

标签 mysql sql

我尝试添加外键:

   CREATE TABLE `invoices` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
  ` name` varchar(255) NOT NULL,
   `code_text` text NOT NULL,
   PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;




  CREATE TABLE `leads` (
  `lead_id` int(11) NOT NULL AUTO_INCREMENT,
   ...
   PRIMARY KEY (`lead_id`)
  );



CREATE TABLE `leads_invoices` (
leads_invoice_id int(11) AUTO_INCREMENT NOT NULL,
   invoice_id int(11) NOT NULL,
   lead_id_i  int(11) NOT NULL,
   PRIMARY KEY(leads_invoice_id),
    FOREIGN KEY (invoice_id) REFERENCES invoices(id),
    FOREIGN KEY (lead_id_i) REFERENCES leads(lead_id)
    ON UPDATE CASCADE
    ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8

但是我的 lead_id_i key 出错了:

Can't create table crm_test.leads_invoices (errno: 150 "Foreign key constraint is incorrectly formed")

我检查了所有类型和表格,似乎它们是正确的.. 我怎么解决这个问题?希望你能帮助我。谢谢!

最佳答案

您必须将 ENGINE=InnoDB DEFAULT CHARSET=utf8 添加到 leads 表

CREATE TABLE `leads` (
  `lead_id` int(11) NOT NULL AUTO_INCREMENT,
   ...
   PRIMARY KEY (`lead_id`)
  )ENGINE=InnoDB DEFAULT CHARSET=utf8;

因为如果要加外键,两个表必须有相同的引擎

关于mysql - 无法添加外键 MySQL :errno 150,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45938496/

相关文章:

mysql - SELECT by A列OR B列在数据库中的数据比较顺序是什么

sql - 使用子查询更新 - 更新超过所需的记录

mysql - 获取两个日期之间的数据

mysql - 从代码循环到 Sql 查询?

php - 为什么 PHP 和 MySQL 的 unix 时间戳在 1983 年 10 月 29 日不同?

javascript - 404 not found - JS 未向 PHP 发送变量

mysql - 表的性能增强

mysql - 从表格中查找几个月的连续数据

mysql - 更新表中的重复值

SQL查询一对多关系