mySql errno:150在里面创建表语句

时间:2011-05-07 00:50:06

标签: mysql sql mysql-error-1005

DROP TABLE IF EXISTS members;
CREATE TABLE members (
    Member_ID char(10) NOT NULL default '',
    Provider_ID char(10) NOT NULL default '',
    First_Name varchar(30) NOT NULL default '',
    Middle_Initial char(1) NOT NULL default '',
    Last_Name varchar(40) NOT NULL default '',
    Address varchar(100) NOT NULL default '',
    City varchar(100) NOT NULL default '',
    State char(2) NOT NULL default '',
    Zip varchar(5) NOT NULL default '',
    PRIMARY KEY  (Member_ID),
    FOREIGN KEY (PROVIDER_ID) REFERENCES PROVIDER(PROVIDER_ID)
) ;

DROP TABLE IF EXISTS提供者; CREATE TABLE提供程序(     Provider_ID char(10)NOT NULL default'',     Provider_Name varchar(50)NOT NULL default'',     地址varchar(100)NOT NULL default'',     City varchar(100)NOT NULL default'',     State char(2)NOT NULL default'',     Zip char(5)NOT NULL default'',     主键(Provider_ID) );

DROP TABLE IF EXISTS程序; CREATE TABLE程序(     Procedure_ID char(10)NOT NULL default'',     Doctor_ID char(10)NOT NULL default'',     Member_ID char(10)NOT NULL default'',     Procedure_Type_ID char(10)NOT NULL default'',     Procedure_Name varchar(50)NOT NULL default'',     Cost int(10)NOT NULL默认为'0',     Date_Executed date NOT NULL默认'2000-01-01',     PRIMARY KEY(Procedure_ID),     外键(DOCTOR_ID)参考文献医生(DOCTOR_ID),     外键(MEMBER_ID)参考成员(MEMBER_ID),     FOREIGN KEY(PROCEDURE_TYPE_ID)参考PROCEDURE_TYPE(PROCEDURE_TYPE_ID) );

DROP TABLE IF EXISTS procedure_type; CREATE TABLE procedure_type(     Procedure_Type_ID char(10)NOT NULL default'',     Procedre_Type_Name varchar(50)NOT NULL default'',     Procedure_Description varchar(255)NOT NULL default'',     Procedure_ID char(10)NOT NULL default'',     PRIMARY KEY(Procedure_Type_ID),     FOREIGN KEY(PROCEDURE_ID)参考程序(PROCEDURE_ID) );

DROP TABLE IF EXISTS doctor_type; CREATE TABLE doctor_type(     Type_ID char(10)NOT NULL default'',     Type_Name varchar(50)NOT NULL default'',     Type_Description varchar(255)NOT NULL default'',     主键(Type_ID) );

DROP TABLE IF EXISTS医生; CREATE TABLE医生(     Doctor_ID char(10)NOT NULL default'',     Type_ID char(10)NOT NULL default'',     Doctor_Name varchar(50)NOT NULL default'',     地址varchar(100)NOT NULL default'',     City varchar(100)NOT NULL default'',     State char(2)NOT NULL default'',     Zip char(5)NOT NULL default'',     PRIMARY KEY(Doctor_ID),     FOREIGN KEY(TYPE_ID)参考DOCTOR_TYPE(TYPE_ID) );

ERROR 1005(HY000):无法创建表'thunderhawk.members'(错误号:150)

有什么想法吗?

EDIT添加了其余表格。我知道这是一个外键问题。我似乎遵循外键语法...

3 个答案:

答案 0 :(得分:0)

通常,如果dbms无法创建表,则意味着以下事情可能出错: a)dbms进程没有写入数据目录的写入权限,或者超出了文件夹的磁盘配额。 b)文件系统已满,没有空间将任何数据写入文件。

检查mysqld.log以获取更多详细信息。

答案 1 :(得分:0)

首先要确保检查两个表是否需要具有相同的存储类型,如InnoDB。

请参阅此处参考:http://verysimple.com/2006/10/22/mysql-error-number-1005-cant-create-table-mydbsql-328_45frm-errno-150/

答案 2 :(得分:0)

试试这段代码:

DROP TABLE IF EXISTS成员;

CREATE TABLE members (
    Member_ID char(10) NOT NULL default 0,
    Provider_ID char(10) NOT NULL default 0,
    First_Name varchar(30) NOT NULL default 0,
    Middle_Initial char(1) NOT NULL default 0,
    Last_Name varchar(40) NOT NULL default 0,
    Address varchar(100) NOT NULL default 0,
    City varchar(100) NOT NULL default 0,
    State char(2) NOT NULL default 0,
    Zip varchar(5) NOT NULL default 0,
    PRIMARY KEY  (Member_ID),
     FOREIGN KEY (PROVIDER_ID) REFERENCES PROVIDER(PROVIDER_ID)
) ;