phpMyAdmin错误1005

时间:2015-02-21 03:26:45

标签: mysql sql phpmyadmin mysql-error-1005

这是我的代码......我不知道我做错了什么因为我是新手。我收到1005错误,说我无法创建表bookauthor。

CREATE TABLE Book_Author(
    BID INTEGER(7) NOT NULL,
    B_TITLE VARCHAR(25) NOT NULL,
    AID INTEGER(7) NOT NULL,
    A_NAME VARCHAR(25) NOT NULL,
        CONSTRAINT PRIMARY KEY(BID),
        CONSTRAINT BID_FK
          FOREIGN KEY(BID)
          REFERENCES Book_Info(BID)
          ON DELETE CASCADE
);

5 个答案:

答案 0 :(得分:0)

你应该按照以下方式尝试

CREATE TABLE IF NOT EXISTS `Book_Author` (
  `BID` int(7) NOT NULL,
  `B_TITLE` varchar(25) NOT NULL,
  `AID` int(7) NOT NULL,
  `A_NAME` varchar(25) NOT NULL,
  PRIMARY KEY (`BID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

然后使用CASCADE

ALTER TABLE `Book_Author`
      ADD CONSTRAINT `BookAuthor` FOREIGN KEY (`BID`) 
REFERENCES Book_Info(BID) ON DELETE CASCADE;

答案 1 :(得分:0)

  

1005(ER_CANT_CREATE_TABLE)

     

无法创建表格。如果错误消息引用错误150,表   创建失败,因为外键约束不正确   形成。如果错误消息引用错误-1,则表创建   可能失败,因为该表包含匹配的列名称   内部InnoDB表的名称。

我的猜测是,这是因为您还没有为PRIMARY KEY表创建Book_Info。您正在尝试创建外键约束,并且要求两个表都具有有效索引。您可以在Book_Info表格中添加主键,如下所示:

ALTER TABLE Book_Info ADD PRIMARY KEY BID_PK(BID);

@NoDisplayName指出的另一件事是你应该检查两列是否具有相同的类型和长度。

您可以检查引擎的状态,并尝试找出有关此错误的更多信息:

SHOW ENGINE INNODB STATUS\G

然后您可能会看到更具描述性的错误消息:

  

------------------------最新的外键错误------------------- -----
  2015-02-21 05:13:34 1116b0000表test / book_author的外键约束出错:
             FOREIGN KEY(BID)参考书Book_Info(BID)ON DELETE CASCADE):
  在引用的表中找不到索引   其中引用的列显示为第一列或列   表中的类型与引用的表不匹配   约束。
  请注意ENUM和SET的内部存储类型   在使用> = InnoDB-4.1.12创建的表格中更改了此类列   新表中的这些列不能引用旧表   看到   http://dev.mysql.com/doc/refman/5.6/en/innodb-foreign-key-constraints.html   正确的外键定义。

答案 2 :(得分:0)

您的案例有两种可能性

您可能没有使用与data type表格列相同的parent例如:父表BIDvarchar,子表BIDInteger(7)

或Referenced列不是父表

上的primary key

试试这个

create table Book_Info(BID INTEGER(7) NOT NULL,
                      CONSTRAINT PRIMARY KEY(BID));

CREATE TABLE Book_Author(
    BID INTEGER(7) NOT NULL,
    B_TITLE VARCHAR(25) NOT NULL,
    AID INTEGER(7) NOT NULL,
    A_NAME VARCHAR(25) NOT NULL,
        CONSTRAINT PRIMARY KEY(BID),
        CONSTRAINT BID_FK
          FOREIGN KEY(BID)
          REFERENCES Book_Info(BID)
          ON DELETE CASCADE
);

答案 3 :(得分:0)

您拥有访问数据库的正确权限非常重要。您应该让系统管理员为您的访问权限授予权限,如果您是管理员,请确保执行此操作为 root

答案 4 :(得分:0)

#1005错误 已解决: - 父表// CREATE TABLE性别(

 id int not null AUTO_INCREMENT PRIMARY KEY,
 name varchar(50)

);

儿童表// CREATE TABLE学生(

id int not null AUTO_INCREMENT PRIMARY KEY,
name varchar(50),
fatherName varchar(50),
gender_id int not null,
CONSTRAINT fk_gender_id FOREIGN KEY (gender_id) REFERENCES gender(id) on DELETE SET null

); 在Child表中,您写入非空意味着此列不允许空值,而在外键中您说从父表删除记录后在列(gender_id)中放置NULL但该列不允许使用NULL值为什么错误#1005发生:)