简体   繁体   English

外键问题:错误1005(HY000):无法创建表(错误号:150)

[英]Foreign key issue:ERROR 1005 (HY000): Can't create table (errno: 150)

I'm getting this error: ERROR 1005 (HY000): Can't create table (errno: 150); 我收到此错误: ERROR 1005 (HY000): Can't create table (errno: 150); I know it has something to do with the foreign keys but I have checked to see if they have the same info types etc and I can't find the problem. 我知道这与外键有关,但是我检查了它们是否具有相同的信息类型,等等,但我找不到问题。 The video, director actor, role and member create; 视频,导演演员,角色和成员创建; the rest do not. 其余的不。

CREATE TABLE IF NOT EXISTS actor (
  actorNo VARCHAR(15) NOT NULL,
  actorName VARCHAR(40) NOT NULL,
  PRIMARY KEY (actorNo)
) ENGINE=InnoDB;


CREATE TABLE IF NOT EXISTS staff (
  StaffNo VARCHAR (15) NOT NULL,
  name VARCHAR(40) NOT NULL,
  position VARCHAR(40) ,
  salary FLOAT(5,2) ,
  branchNo VARCHAR(15) NOT NULL,
FOREIGN KEY (branchNo) REFERENCES branch(branchNo),
  UNIQUE KEY (name,branchNo)
) ENGINE=InnoDB;

SHOW TABLES;

CREATE TABLE IF NOT EXISTS branch (
  branchNo VARCHAR(15) NOT NULL,
  Street VARCHAR (40) ,
  City VARCHAR (20) ,
  State VARCHAR (40) ,
  zipCode VARCHAR (6) NOT NULL,
  StaffNo VARCHAR (15) NOT NULL,
  PRIMARY KEY (branchNo),
  UNIQUE KEY (zipCode), FOREIGN KEY (StaffNo) REFERENCES staff (StaffNo) ON DELETE NO ACTION ON UPDATE 
CASCADE) ENGINE=InnoDB; 

CREATE TABLE IF NOT EXISTS director (
  directorNo VARCHAR(15) NOT NULL,
  directorName VARCHAR(40) NOT NULL,
  PRIMARY KEY (directorNo)
) ENGINE=InnoDB;   

CREATE TABLE IF NOT EXISTS member (
  fName VARCHAR(20) ,
  lName VARCHAR(20) ,
  address VARCHAR (100) ,
  memberNo VARCHAR(15) NOT NULL,
  PRIMARY KEY (memberNo),
  UNIQUE KEY `CCfnmLnmAddr` (fName,lName,address)
) ENGINE=InnoDB;  

CREATE TABLE IF NOT EXISTS registration (
  branchNo VARCHAR (15) NOT NULL,
  memberNo VARCHAR (15) NOT NULL,
  StaffNo VARCHAR (15) NOT NULL,
  dateJoined date NOT NULL,
  PRIMARY KEY (branchNo, memberNo), 
FOREIGN KEY (memberNo) REFERENCES member (memberNo) ON DELETE SET NULL ON UPDATE 
CASCADE, FOREIGN KEY (StaffNo) REFERENCES staff (StaffNo) ON DELETE SET NULL ON UPDATE 
CASCADE
) ENGINE=InnoDB;

CREATE TABLE IF NOT EXISTS videoforrent (
  videoNo INT(15) NOT NULL,
  available CHAR(1) NOT NULL,
  catalogNo VARCHAR (15) ,
  branchNo  VARCHAR(15) NOT NULL,
  PRIMARY KEY (videoNo),
  UNIQUE KEY CCAvailBrnchNoCatNo (available, branchNo,catalogNo), FOREIGN KEY (catalogNo) REFERENCES video (catalogNo) ON DELETE CASCADE ON UPDATE 
CASCADE, FOREIGN KEY (branchNo) REFERENCES branch (branchNo) ON DELETE CASCADE ON UPDATE 
CASCADE
) ENGINE=InnoDB;

CREATE TABLE IF NOT EXISTS video (
  catalogNo VARCHAR(10) ,
  title VARCHAR(100) NOT NULL,
  category VARCHAR(30) ,
  dailyRental FLOAT(4,2) ,
  price FLOAT(5,2) ,
  directorNo VARCHAR(10) NOT NULL,
  PRIMARY KEY (catalogNo),
  UNIQUE KEY `CCTitleDrNo` (title,directorNo)
) ENGINE=InnoDB;

CREATE TABLE IF NOT EXISTS rentalagreement (
  rentalNo VARCHAR(15) NOT NULL,
  dateOut DATE NOT NULL,
  dateReturn DATE ,
  memberNo VARCHAR(15) NOT NULL,
  videoNo INT(15) NOT NULL,
  PRIMARY KEY (rentalNo),
  UNIQUE KEY `CCdtOutMembrNoVidNo` (dateOut,memberNo,videoNo),
  FOREIGN KEY (videoNo) REFERENCES videoforrent (videoNo) ON DELETE SET NULL ON UPDATE 
CASCADE, FOREIGN KEY (memberNo) REFERENCES member (memberNo) ON DELETE NO ACTION ON UPDATE 
CASCADE) ENGINE=InnoDB;

CREATE TABLE IF NOT EXISTS role (
    actorNo VARCHAR(15) NOT NULL,
  catalogNo INT(11) NOT NULL,
  charachter VARCHAR(40),
  PRIMARY KEY (actorNo, catalogNo)
) ENGINE=InnoDB;

You have FK definitions that will try to set a null value on non null columns. 您具有FK定义,它们将尝试在非null列上设置null值。 Therefore that FK declaration is impossible. 因此,不可能进行FK声明。

CREATE TABLE IF NOT EXISTS registration (
  branchNo VARCHAR (15) NOT NULL,
  memberNo VARCHAR (15) **NOT NULL**,
  StaffNo VARCHAR (15) **NOT NULL**,
  dateJoined date NOT NULL,
  PRIMARY KEY (branchNo, memberNo), 
FOREIGN KEY (memberNo) REFERENCES member (memberNo) ON DELETE **SET NULL** ON UPDATE 
CASCADE, 
FOREIGN KEY (StaffNo) REFERENCES staff (StaffNo) ON DELETE **SET NULL** ON UPDATE 
CASCADE
) ENGINE=InnoDB;

you can either set "on DELETE CASCADE" or allow those fields to be null. 您可以设置“在DELETE CASCADE上”或允许这些字段为空。

You might have the same error on other tables. 您在其他表上可能有相同的错误。 I just stopped at the first error I found :) 我只是停在发现的第一个错误:)

Solved: 解决了:

Check to make sure Primary_Key and Foreign_Key are exact match with data types.

If one is signed another one unsigned, it will be failed.
Good practice is to make sure both are unsigned INT.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 外键错误 - 错误 1005 (HY000) … 无法创建表 … `stored_on` (errno: 150) - Foreign Key Error - ERROR 1005 (HY000) … Can't create table … `stored_on` (errno: 150) SQLSTATE[HY000]: 一般错误: 1005 Can't create table `test`.`members` (errno: 150 “Foreign key constraint is misformed”) - SQLSTATE[HY000]: General error: 1005 Can't create table `test`.`members` (errno: 150 “Foreign key constraint is incorrectly formed”) SQLSTATE[HY000]: 一般错误: 1005 Can't create table `school`.`posts` (errno: 150 "Foreign key constraint is wrongly forms") - SQLSTATE[HY000]: General error: 1005 Can't create table `school`.`posts` (errno: 150 "Foreign key constraint is incorrectly formed") 错误1005(HY000):无法创建表“登录”(错误号:150) - ERROR 1005 (HY000): Can't create table 'login' (errno: 150) 错误1005(HY000):无法创建表“ ./quotes/actions.frm”(错误号:150) - ERROR 1005 (HY000): Can't create table './quotes/actions.frm' (errno: 150) 错误1005(HY000):无法创建表“ project2.fulltime”(错误号:150) - ERROR 1005 (HY000): Can't create table 'project2.fulltime' (errno: 150) 错误1005(HY000):无法创建表“ test.sports”(错误号:150) - ERROR 1005 (HY000): Can't create table 'test.sports' (errno: 150) 错误1005(HY000):无法创建表“ CBDB.Subsystem”(错误号:150) - ERROR 1005 (HY000): Can't create table 'CBDB.Subsystem' (errno: 150) 错误1005(HY000):无法创建表GSRS.ussr(错误号:150) - ERROR 1005 (HY000): Can't create table 'GSRS.ussr' (errno: 150) 错误 1005 (hy000) 无法在 mysql 中创建表 (errno 150) - error 1005 (hy000) can't create table (errno 150) in mysql
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM