【问题标题】:#1005 - Can't create table `agenceassurance`.`operation` (errno: 150 "Foreign key constraint is incorrectly formed")#1005 - 无法创建表 `agenceassurance`.`operation` (errno: 150 "外键约束格式不正确")
【发布时间】:2018-05-09 13:20:24
【问题描述】:

errno: 150 "外键约束格式不正确")

DROP DATABASE IF EXISTS AgenceAssurance;
CREATE DATABASE IF NOT EXISTS AgenceAssurance;
USE AgenceAssurance;

CREATE TABLE Logininfo (
  idLogin    INT(3)  PRIMARY KEY  NOT NULL AUTO_INCREMENT,
  userName       VARCHAR(50) NOT NULL,
  pass       VARCHAR(50),
  usertype   VARCHAR(50)          DEFAULT NULL,
  GrantedKey VARCHAR(8)           DEFAULT NULL
)ENGINE = InnoDB;

CREATE TABLE Operation (
  idOpt    INT PRIMARY KEY  NOT NULL AUTO_INCREMENT,
  libelOpt TEXT,
  dateOpt  DATETIME DEFAULT now(),
  userName VARCHAR(50),
   CONSTRAINT fk_login FOREIGN KEY (userName) REFERENCES Logininfo (userName)
)ENGINE = InnoDB;
 

错误 SQL 查询:

CREATE TABLE Operation (
  idOpt    INT PRIMARY KEY  NOT NULL AUTO_INCREMENT,
  libelOpt TEXT,
  dateOpt  DATETIME DEFAULT now(),
  userName VARCHAR(50),
  CONSTRAINT fk_login FOREIGN KEY (userName) REFERENCES Logininfo (userName)
)ENGINE = InnoDB

MySQL 说:

1005 - 无法创建表 agenceassurance.operation (errno: 150 "外键约束格式不正确") (详情...)

【问题讨论】:

标签: mysql foreign-keys constraints create-table


【解决方案1】:

CONSTRAINT pk_Log PRIMARY KEY(idLogin,用户名): 尝试如下: 约束 pk_Log 主键(用户名) 因为:一次两个字段有PK,不能用作FK。

【讨论】:

  • 我只对一个主键进行了一些更改,但仍然遇到同样的问题
  • 你能分享2个sql吗
  • 表应该是 ENGINE = InnoDB ;
  • 请检查以上更改
  • 您应该为 userName 而不是 idLogin 设置 pk。试试看。
【解决方案2】:

Logininfo 表中的userName 字段必须是唯一的。您只能有一个引用唯一字段的外键。

就像这样:

userName VARCHAR(50) NOT NULL UNIQUE

【讨论】:

    猜你喜欢
    • 2018-02-04
    • 2022-01-25
    • 2020-07-05
    • 1970-01-01
    • 2018-06-19
    • 2018-03-02
    • 2020-07-07
    • 1970-01-01
    • 2021-09-23
    相关资源
    最近更新 更多