这是我的代码......我不知道我做错了什么因为我是新手。我收到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
);
答案 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
(例如:父表BID
为varchar
,子表BID
为Integer(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发生:)