以下是我的代码,在建第三张表的时候会提示can't create table(errno:150),麻烦大家帮我看一下,谢谢大家O(∩_∩)O
CREATE TABLE rm(
  id int NOT NULL auto_increment,
  num varchar(10) NOT NULL,
  type varchar(8) character set utf8 NOT NULL,
  cost int NOT NULL,
  state varchar(8) character set utf8 NOT NULL,
  PRIMARY KEY(id,num)
)ENGINE=INNODB default charset=utf8;CREATE TABLE pe(
  id int NOT NULL auto_increment,
  name varchar(6) character set utf8 NOT NULL,
  sex varchar(2) character set utf8 NOT NULL,
  idnum varchar(20) NOT NULL UNIQUE,
  PRIMARY KEY(id,name)
)ENGINE=INNODB default charset=utf8;
CREATE TABLE gl (
  id int NOT NULL auto_increment,
  num varchar(10),
  name varchar(6),
  indate varchar(20) NOT NULL,
  outdate varchar(20) NOT NULL,
  pay int NOT NULL,
  yajin int NOT NULL,
  INDEX (num),
  PRIMARY KEY(id,num,name),
  FOREIGN KEY (name) REFERENCES pe(name),
  FOREIGN KEY (num) REFERENCES rm(num)
)ENGINE=INNODB default charset=utf8;

解决方案 »

  1.   

     FOREIGN KEY (name) REFERENCES pe(name),
    FOREIGN KEY (num) REFERENCES rm(num)在PE,RM表中均不是主键或者唯一键。
      

  2.   

    在这两个表中为这两个字段添加unique键。
      

  3.   

    mysql> CREATE TABLE rm(
        ->   id int NOT NULL auto_increment,
        ->   num varchar(10) unique NOT NULL,
        ->   type varchar(8) character set utf8 NOT NULL,
        ->   cost int NOT NULL,
        ->   state varchar(8) character set utf8 NOT NULL,
        ->   PRIMARY KEY(id,num)
        -> )ENGINE=INNODB default charset=utf8;
    Query OK, 0 rows affected (0.13 sec)mysql> CREATE TABLE pe(
        ->   id int NOT NULL auto_increment,
        ->   name varchar(6) character set utf8 unique NOT NULL,
        ->   sex varchar(2) character set utf8 NOT NULL,
        ->   idnum varchar(20) NOT NULL UNIQUE,
        ->   PRIMARY KEY(id,name)
        -> )ENGINE=INNODB default charset=utf8;
    Query OK, 0 rows affected (0.11 sec)mysql> CREATE TABLE gl (
        ->   id int NOT NULL auto_increment,
        ->   num varchar(10),
        ->   name varchar(6),
        ->   indate varchar(20) NOT NULL,
        ->   outdate varchar(20) NOT NULL,
        ->   pay int NOT NULL,
        ->   yajin int NOT NULL,
        ->   INDEX (num),
        ->   PRIMARY KEY(id,num,name),
        ->   FOREIGN KEY (name) REFERENCES pe(name),
        ->   FOREIGN KEY (num) REFERENCES rm(num)
        -> )ENGINE=INNODB default charset=utf8;
    Query OK, 0 rows affected (0.14 sec)