无法添加外键约束 - MySQL错误1215(HY000) [英] Cannot add foreign key constraint - MySQL ERROR 1215 (HY000)

查看:153
本文介绍了无法添加外键约束 - MySQL错误1215(HY000)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图为健身房管理系统创建数据库,但我无法弄清楚为什么我得到这个错误。

 错误1215(HY000):Can not not find it。

添加外键约束

CREATE TABLE销售(
saleId int(100)NOT NULL AUTO_INCREMENT,
accountNo int(100)NOT NULL,
payName VARCHAR(100) NOT NULL,
nextPayment DATE,
supplementName VARCHAR(250),
qty int(11),
workoutName VARCHAR(100),
sDate datetime NOT NULL DEFAULT NOW (),
totalAmount DECIMAL(11,2)NOT NULL,
CONSTRAINT PRIMARY KEY(saleId,accountNo,payName),
CONSTRAINT FOREIGN KEY(accountNo)REFERENCES accounts(accountNo)ON DELETE CASCADE ON UPDATE CASCADE
CONSTRAINT FOREIGN KEY(payName)REFERENCECES paymentFor(payName)ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT FOREIGN KEY(supplementName)REFERENCES Supplements(supplementName)ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT FOREIGN KEY(workoutName)REFERENCES锻炼(worko utName)ON DELETE CASCADE ON UPDATE CASCADE
);
ALTER TABLE sales AUTO_INCREMENT = 2001;

以下是父表。



<$ p (100)NOT NULL AUTO_INCREMENT,
accountType VARCHAR(100)NOT NULL,
firstName VARCHAR(50)NOT NULL,$ b $ CREATE TABLE accounts(
accountNo int
lastName VARCHAR(60)NOT NULL,
birthdate DATE NOT NULL,
性别VARCHAR(7),
city VARCHAR(50)NOT NULL,
street VARCHAR 50),
cellPhone VARCHAR(10),
emergencyPhone VARCHAR(10),
email VARCHAR(150)NOT NULL,
description VARCHAR(350),
VARCHAR(50),
createdOn datetime NOT NULL DEFAULT NOW(),
CONSTRAINT PRIMARY KEY(accountNo)
);
ALTER TABLE accounts AUTO_INCREMENT = 1001;


CREATE TABLE补充(
supplementaryId int(100)NOT NULL AUTO_INCREMENT,
supplementName VARCHAR(250)NOT NULL $ b $ manufacture VARCHAR(100) ,
description VARCHAR(150),
qtyOnHand INT(5),
unitPrice DECIMAL(11,2),
manufactureDate DATE,
expirationDate DATE,
CONSTRAINT PRIMARY KEY(supplementId,supplementName)
);
ALTER TABLE补充AUTO_INCREMENT = 3001;

CREATE TABLE workouts(
workoutId int(100)NOT NULL AUTO_INCREMENT,
workoutName VARCHAR(100)NOT NULL,
description VARCHAR(7500)NOT NULL,
duration VARCHAR(30),
CONSTRAINT PRIMARY KEY(workoutId,workoutName)
);
ALTER TABLE锻炼AUTO_INCREMENT = 4001;



CREATE TABLE paymentFor(
payId int(100)NOT NULL AUTO_INCREMENT,
payName VARCHAR(100)NOT NULL,
amount DECIMAL(11,2),
CONSTRAINT PRIMARY KEY(payId,payName)
);
ALTER TABLE paymentFor AUTO_INCREMENT = 5001;

你们可以帮我解决这个问题吗?感谢。

解决方案

对于一个字段被定义为外键 ,所引用的父字段必须定义一个索引。



根据外键约束的文档: / b>
$ b


参考资料parent_tbl_name(index_col_name,...)

workouts.workoutName paymentFor.paymentName 上定义 INDEX $ c>和 supplemental.supplementName 。并确保子列的定义必须与其父列定义匹配。



更改锻炼表格定义如下:

<$ p (100)NOT NULL AUTO_INCREMENT,
workoutName VARCHAR(100)NOT NULL,
description VARCHAR(7500)NOT NULL,$ b $ CREATE TABLE workouts(
workoutId int
duration VARCHAR(30),

KEY(workoutName), - < ----这是新添加的索引键

CONSTRAINT PRIMARY KEY(workoutId ,workoutName)
);

更改补充表格定义如下: / b>

  CREATE TABLE补充(
supplementaryId int(100)NOT NULL AUTO_INCREMENT,
supplementName VARCHAR(250)NOT NULL,
manufacture VARCHAR(100),
description VARCHAR(150),
qtyOnHand INT(5),
unitPrice DECIMAL(11,2),
manufactureDate DATE ,
expirationDate DATE,

KEY(supplementName), - < ----这是新添加的索引键

CONSTRAINT PRIMARY KEY(supplementId,supplementName )
);

更改 paymentFor 表格定义如下: / b>

  CREATE TABLE paymentFor(
payId int(100)NOT NULL AUTO_INCREMENT,
payName VARCHAR(100)NOT NULL,
amount DECIMAL(11,2),

KEY(payName), - < ----这是新添加的索引键

CONSTRAINT主键(payId,payName)
);

现在,更改子表定义如下:

  CREATE TABLE sales(
saleId int(100)NOT NULL AUTO_INCREMENT,
accountNo int(100)NOT NULL,
payName VARCHAR(100) NOT NULL,
nextPayment DATE,
supplementName VARCHAR(250)NOT NULL,
qty int(11),
workoutName VARCHAR(100)NOT NULL,
sDate datetime NOT NULL DEFAULT NOW(),
totalAmount DECIMAL(11,2)NOT NULL,
CONSTRAINT PRIMARY KEY(saleId,accountNo,payName),
CONSTRAINT FOREIGN KEY(accountNo)
参考账户(accountNo)
ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT FOREIGN KEY(payName)
REFERENCES paymentFor(payName)
ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT FOREIGN KEY(supplementName)
REFERENCES补充(supplementName)
ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT FOREIGN KEY(workoutName)
REFERENCES workouts(workoutName)
ON DELETE CASCADE ON UPDATE CASCADE
);

请参阅

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆