Mysql phpMyAdmin错误1005
这是我的代码…我不知道我做错了什么,因为我是新手。我收到一个1005错误,说明我无法创建bookauthor表Mysql phpMyAdmin错误1005,mysql,sql,phpmyadmin,mysql-error-1005,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),
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
);
你应该按下面的方法试试
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;
1005(无法创建表格)
无法创建表。如果错误消息指的是错误150,请参阅表
创建失败,因为外键约束不正确
形成。如果错误消息引用错误–1,则创建表
可能失败,因为该表包含匹配的列名
内部InnoDB表的名称
我猜这是因为您没有为Book\u Info
表创建PRIMARY KEY
。您正在尝试创建外键约束,这要求两个表都有有效的索引。您可以在Book\u Info
表中添加主键,如下所示:
ALTER TABLE Book_Info ADD PRIMARY KEY BID_PK(BID);
需要指出的另一点是,您应该检查这两列的类型和长度是否相同
您可以检查引擎的状态,并尝试了解有关此错误的更多信息:
SHOW ENGINE INNODB STATUS\G
然后,您可能会看到更具描述性的错误消息,如下所示:
ALTER TABLE Book_Info ADD PRIMARY KEY BID_PK(BID);
------------------------最新外键错误--------------------2015-02-21 05:13:34 1116b0000表测试/书的外键约束错误作者:
外键(投标)参考书\u删除级联信息(投标):
在引用的表中找不到索引 其中引用的列显示为第一列,或 表中的类型与引用的表中的类型不匹配 约束。
请注意,枚举和集合的内部存储类型 在使用>=InnoDB-4.1.12创建的表中以及中的此类列中进行了更改 新表中的这些列无法引用旧表。
看见 获取正确的外键定义
你的情况有两种可能 您可能没有使用与父表列相同的
数据类型
(ex:父表BID
为varchar
,子表BID
为Integer(7)
)
或引用的列不是父表上的主键
试试这个
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
);
在子表中,write not null表示该列不允许null值,在外键中,表示从父表中删除记录后,将null放入列(性别\ id)但是该列不允许空值,这就是发生错误的原因:)确保
Book\u Info
表中BID
列的数据类型也是INTEGER(7)
您确定已将BID
作为Book\u Info
表中的主键添加了吗?如果没有,您应该可以这样添加:altertablebook\u Info添加主键BID\u PK(BID)代码>
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