补充,tbl_basic的ID字段是主键字段

解决方案 »

  1.   

    MySQL没有外键,只不过为了兼容便准SQL的语法才能够识别你那些外键的定义
      

  2.   

    加上 TYPE = InnoDB 创表选项
    目前只有 InnoDB 表支持外键约束create table 'tbl_basic'(
    `ID` INT (3) UNSIGNED DEFAULT '0' NOT NULL,
    `GoodsName` VARCHAR (50)
    ) TYPE = InnoDB
       
    CREATE TABLE `tbl_goods` (
    `ID` INT (3) UNSIGNED DEFAULT '0' NOT NULL,
    `RID` INT (3) UNSIGNED DEFAULT '0', 
    `GoodsName` VARCHAR (50) DEFAULT '0',
     PRIMARY KEY(`ID`),
    foreign key(`RID`) REFERENCES  `tbl_basic`(`ID`) 
    ) TYPE = InnoDB
      

  3.   

    我一直以为innodb只是用来支持回滚,没想到还有外键的支持
    mysql> create table test_for(
        -> student_id int,
        -> class_id int,
        -> primary key(student_id,class_id),
        -> foreign key(student_id) REFERENCES student(ID),
        -> foreign key(class_id) REFERENCES class(ID))type=innodb;
    ERROR 1005: Can't create table '.\test\test_for.frm' (errno: 150)
    ERROR 1005:???????
      

  4.   

    各相关表的字段索引必须先建立起来.
    MySQL  不会自动地为你添加你可以先建出所有的表与索引,然后,在最后一步进行 ALTER TABLE 加上外键约束 ,
    这样就不会错了.