数据库建表时候总是报错:Can't create table '.\s\store.frm' (errno: 150)我感觉有点儿像是外键或者数据类型是不是不匹配,可是改了之后还是不管用吖!!
我纠结了很久了,望大家帮帮忙!!!
以下是代码————CREATE DATABASE q;
use q;
CREATE  TABLE Supplier (
supplierID char(6) not null primary key,
sName varchar(50) not null,
contactPerson varchar(8) not null,
phone varchar(11) not null,
address varchar(50) not null,
openingBank varchar(40) null,
accountID varchar(15) null);
CREATE  TABLE Goods (
goodsID char(6) not null primary key,
supplierID char(6) not null,
gName varchar(80) not null,
barCode varchar(15) not null,
metricUnit varchar(4) not null,
kind varchar(8) null,
birthPlace varchar(50) null,
unitCost double not null,
foreign key (supplierID) REFERENCES Supplier(supplierID)
);CREATE  TABLE Store(
goodsID char(6) not null primary key,
gName varchar(80) not null,
storeNum int(4) not null,
foreign key (goodsID) REFERENCES Goods(goodsID)
);PS:错误出现在Store表,总是建立失败!!!

解决方案 »

  1.   


    按照您的推理,前两个表没有出错吖,第三表应该是能成功的,可是为什么它就是不成功呢?还有突然想到了第三个表我少加了
    foreign key (gName) REFERENCES Goods(gName)
    加上之后还是第三个表不能建立吖!!!
      

  2.   

    直接用你的代码测试如下。 建议你按相同的方法,贴出你的执行结果和错误信息。问题说明越详细,回答也会越准确!参见如何提问。(提问的智慧
    mysql> CREATE  TABLE Supplier (
        -> supplierID char(6) not null primary key,
        -> sName varchar(50) not null,
        -> contactPerson varchar(8) not null,
        -> phone varchar(11) not null,
        -> address varchar(50) not null,
        -> openingBank varchar(40) null,
        -> accountID varchar(15) null
        ->
        -> );
    Query OK, 0 rows affected (0.16 sec)mysql> CREATE  TABLE Goods (
        -> goodsID char(6) not null primary key,
        -> supplierID char(6) not null,
        -> gName varchar(80) not null,
        -> barCode varchar(15) not null,
        -> metricUnit varchar(4) not null,
        -> kind varchar(8) null,
        -> birthPlace varchar(50) null,
        -> unitCost double not null,
        -> foreign key (supplierID) REFERENCES Supplier(supplierID)
        -> );
    Query OK, 0 rows affected (0.13 sec)mysql> CREATE  TABLE Store(
        -> goodsID char(6) not null primary key,
        -> gName varchar(80) not null,
        -> storeNum int(4) not null,
        -> foreign key (goodsID) REFERENCES Goods(goodsID)
        -> );
    Query OK, 0 rows affected (0.11 sec)mysql>
      

  3.   

    还有你的默认表存储引擎是什么,只有innodb是支持外键的,myisam 是不支持的。mysql> show create table Supplier;
    +----------+---------------------------------
    ---------------------------------------------
    ---------------------------------------------
    ---------------------------------------------
    ---------------------------------------+
    | Table    | Create Table                                       |
    +----------+---------------------------------
    ---------------------------------------------
    ---------------------------------------------
    ---------------------------------------------
    ---------------------------------------+
    | Supplier | CREATE TABLE `supplier` (
      `supplierID` char(6) NOT NULL,
      `sName` varchar(50) NOT NULL,
      `contactPerson` varchar(8) NOT NULL,
      `phone` varchar(11) NOT NULL,
      `address` varchar(50) NOT NULL,
      `openingBank` varchar(40) DEFAULT NULL,
      `accountID` varchar(15) DEFAULT NULL,
      PRIMARY KEY (`supplierID`)
    ENGINE=InnoDB DEFAULT CHARSET=latin1 |
    +----------+---------------------------------
    ---------------------------------------------
    ---------------------------------------------
    ---------------------------------------------
    ---------------------------------------+
    1 row in set (0.06 sec)mysql>
      

  4.   


    我刚刚学习这个,不太清楚你说的是什么,我把错误结果给你吧~~谢谢了!执行的代码就是上面给出的
    错误如下——mysql> source d:\s.sql
    Query OK, 1 row affected (0.27 sec)Database changed
    Query OK, 0 rows affected (0.09 sec)Query OK, 0 rows affected (0.08 sec)ERROR 1005 (HY000): Can't create table '.\ww\store.frm' (errno: 150)这样看就是第三个的问题吧!!!
      

  5.   


    我试了————| Supplier | CREATE TABLE `supplier` (
      `supplierID` char(6) NOT NULL,
      `sName` varchar(50) NOT NULL,
      `contactPerson` varchar(8) NOT NULL,
      `phone` varchar(11) NOT NULL,
      `address` varchar(50) NOT NULL,
      `openingBank` varchar(40) default NULL,
      `accountID` varchar(15) default NULL,
      PRIMARY KEY  (`supplierID`)
    ) ENGINE=InnoDB DEFAULT CHARSET=gb2312 |默认表存储引擎是InnoDB吖!!可是为什么还是错误呢?