作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
您能否说明为什么 CHARGEITEM、INVOICE 和 PAYMENT 可能会失败?我在这里缺少什么?
我检查了这些:
这是完整的脚本(表 6、8 和 9 失败):
CREATE TABLE `BUILDING` (
`ID` BIGINT NOT NULL AUTO_INCREMENT,
`NAME` varchar(255) DEFAULT NULL,
`ADDRESS` varchar(255) DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `ROOM` (
`ID` BIGINT NOT NULL AUTO_INCREMENT,
`BUILDINGID` BIGINT NULL DEFAULT NULL,
`FLOORNUM` varchar(255) DEFAULT NULL,
`DOORNUM` varchar(255) DEFAULT NULL,
`TYPE` varchar(255) DEFAULT NULL,
PRIMARY KEY (`ID`),
KEY `BUILDINGID` (`BUILDINGID`),
FOREIGN KEY (`BUILDINGID`) REFERENCES `BUILDING` (`ID`) ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `BOOKING` (
`ID` BIGINT NOT NULL AUTO_INCREMENT,
`ENTRYDATE` datetime DEFAULT NULL,
`GUESTNAME` varchar(255) DEFAULT NULL,
`GUESTCONTACT` varchar(255) DEFAULT NULL,
`GUESTADDRESS` varchar(255) DEFAULT NULL,
`GUESTIDTYPE` varchar(255) DEFAULT NULL,
`GUESTIDNUM` varchar(255) DEFAULT NULL,
`GUESTPASSPORTNUM` varchar(255) DEFAULT NULL,
`NOTES` varchar(255) DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `BOOKINGROOM` (
`ID` BIGINT NOT NULL AUTO_INCREMENT,
`BOOKINGID` BIGINT NULL DEFAULT NULL,
`ROOMID` BIGINT NULL DEFAULT NULL,
`STARTDATE` date DEFAULT NULL,
`ENDDATE` date DEFAULT NULL,
PRIMARY KEY (`ID`),
KEY `BOOKINGID` (`BOOKINGID`),
KEY `ROOMID` (`ROOMID`),
FOREIGN KEY (`BOOKINGID`) REFERENCES `BOOKING` (`ID`) ON DELETE RESTRICT,
FOREIGN KEY (`ROOMID`) REFERENCES `ROOM` (`ID`) ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `CHARGE` (
`ID` BIGINT NOT NULL AUTO_INCREMENT,
`CHARGEGROUP` varchar(255) DEFAULT NULL,
`CHARGECODE` varchar(255) DEFAULT NULL,
`NOTES` varchar(255) DEFAULT NULL,
`UNIT` varchar(255) DEFAULT NULL,
`UNITRATE` double NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `CHARGEITEM` (
`ID` BIGINT NOT NULL AUTO_INCREMENT,
`BOOKINGID` BIGINT NULL DEFAULT NULL,
`ROOMID` BIGINT NULL DEFAULT NULL,
`CHARGEID` BIGINT NULL DEFAULT NULL,
`ENTRYSTAFFID` BIGINT NULL DEFAULT NULL,
`ENTRYDATE` datetime DEFAULT NULL,
`VALUEDATE` date DEFAULT NULL,
`UNIT` varchar(255) DEFAULT NULL,
`UNITRATE` double NOT NULL,
`UNITS` double NOT NULL,
`AMOUNT` double NOT NULL,
`NOTES` varchar(255) DEFAULT NULL,
`INVOICEID` BIGINT NULL DEFAULT NULL,
PRIMARY KEY (`ID`),
KEY `INVOICEID` (`INVOICEID`),
KEY `ROOMID` (`ROOMID`),
KEY `BOOKINGID` (`BOOKINGID`),
KEY `CHARGEID` (`CHARGEID`),
FOREIGN KEY (`INVOICEID`) REFERENCES `INVOICE` (`ID`) ON DELETE RESTRICT,
FOREIGN KEY (`ROOMID`) REFERENCES `ROOM` (`ID`) ON DELETE RESTRICT,
FOREIGN KEY (`BOOKINGID`) REFERENCES `BOOKING` (`ID`) ON DELETE RESTRICT,
FOREIGN KEY (`CHARGEID`) REFERENCES `CHARGE` (`ID`) ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `DROPDOWNENTRY` (
`ID` BIGINT NOT NULL AUTO_INCREMENT,
`MODULE` varchar(255) DEFAULT NULL,
`POSITION` int(11) NOT NULL,
`KEY` varchar(255) DEFAULT NULL,
`VALUE` varchar(255) DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `INVOICE` (
`ID` BIGINT NOT NULL AUTO_INCREMENT,
`BOOKINGID` varchar(255) NOT NULL,
`ENTRYSTAFFID` BIGINT NULL DEFAULT NULL,
`ENTRYDATE` datetime DEFAULT NULL,
`AUTHSTAFFID` BIGINT NULL DEFAULT NULL,
`AUTHDATE` datetime DEFAULT NULL,
`NETAMOUNT` double NOT NULL,
`TAX1` double NOT NULL,
`TAX2` double NOT NULL,
`TAX3` double NOT NULL,
`TOTALTAX` double NOT NULL,
`TOTALINCLTAX` double NOT NULL,
PRIMARY KEY (`ID`),
KEY `BOOKINGID` (`BOOKINGID`),
FOREIGN KEY (`BOOKINGID`) REFERENCES `BOOKING` (`ID`) ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `PAYMENT` (
`ID` BIGINT NOT NULL AUTO_INCREMENT,
`INVOICEID` BIGINT NULL DEFAULT NULL,
`AMOUNTPAID` double NOT NULL,
`PAYMODE` varchar(255) DEFAULT NULL,
`ENTRYDATE` datetime DEFAULT NULL,
`VALUEDATE` date DEFAULT NULL,
`REALISATIONDATE` date DEFAULT NULL,
`BANKCODE` varchar(255) DEFAULT NULL,
`INSTRUMENTNUM` varchar(255) DEFAULT NULL,
`POSCODE` varchar(255) DEFAULT NULL,
`REALISATIONSTATUS` varchar(255) DEFAULT NULL,
`NOTES` varchar(255) DEFAULT NULL,
PRIMARY KEY (`ID`),
KEY `INVOICEID` (`INVOICEID`),
FOREIGN KEY (`INVOICEID`) REFERENCES `INVOICE` (`ID`) ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `RESERVATION` (
`ID` BIGINT NOT NULL AUTO_INCREMENT,
`ENTRYDATE` datetime DEFAULT NULL,
`FROMDATE` date DEFAULT NULL,
`TODATE` date DEFAULT NULL,
`NUMROOMS` int(11) NOT NULL,
`GUESTNAME` varchar(255) DEFAULT NULL,
`GUESTCONTACT` varchar(255) DEFAULT NULL,
`GUESTADDRESS` varchar(255) DEFAULT NULL,
`NOTES` varchar(255) DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
最佳答案
两个问题:
INVOICES
当您在另一个表中引用它时不存在。在引用之前定义表或在创建所有表后定义约束。在 INVOICES
表中,您正在定义数据类型 varchar(255),但在外键中,它指的是 bigint 列 - 不起作用。
在 INVOICES
表中,
`BOOKINGID` varchar(255) NOT NULL,
将其更改为:
`BOOKINGID` BIGINT NOT NULL,
这里都修复了 -
关于MySQL 1215 : Cannot add foreign key constraint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42595683/
我是一名优秀的程序员,十分优秀!