Php 试图生成外键,但MySql赢了';I don’我不允许,有什么办法吗?
我有这三张桌子Php 试图生成外键,但MySql赢了';I don’我不允许,有什么办法吗?,php,mysql,sql,Php,Mysql,Sql,我有这三张桌子 CREATE TABLE IF NOT EXISTS `enrollment` ( `STUDENT_NUM` varchar(10) NOT NULL, `SUBJECT_NUM` varchar(10) NOT NULL, `UNITS` int(10) NOT NULL, `DAYS` varchar(50) NOT NULL, `TIME_START` time NOT NULL, `TIME_END` time NOT NULL, `ROOM
CREATE TABLE IF NOT EXISTS `enrollment` (
`STUDENT_NUM` varchar(10) NOT NULL,
`SUBJECT_NUM` varchar(10) NOT NULL,
`UNITS` int(10) NOT NULL,
`DAYS` varchar(50) NOT NULL,
`TIME_START` time NOT NULL,
`TIME_END` time NOT NULL,
`ROOM_ID` int(11) DEFAULT NULL,
`PRELIM` float(10,2) DEFAULT NULL,
`MIDTERM` float(10,2) DEFAULT NULL,
`FINALS` float(10,2) DEFAULT NULL,
`FINAL_GRADE` float(10,2) DEFAULT NULL,
`SEMESTER` varchar(50) NOT NULL,
`SCHOOL_YEAR` varchar(50) NOT NULL,
`DATE_ADDED` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`STUDENT_NUM`,`SUBJECT_NUM`),
KEY `SUBJECT_NUM` (`SUBJECT_NUM`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `subjects` (
`SUBJECT_NUM` varchar(10) NOT NULL,
`EMPLOYEE_NUM` varchar(10) NOT NULL,
`SUBJECT_TITLE` varchar(100) DEFAULT NULL,
`DEPARTMENT` varchar(100) DEFAULT NULL,
`UNITS` int(10) NOT NULL,
`DAYS` varchar(50) NOT NULL,
`TIME_START` time NOT NULL,
`TIME_END` time NOT NULL,
`room_id` int(11) DEFAULT NULL,
`SEMESTER` varchar(50) NOT NULL,
`SCHOOL_YEAR` varchar(50) NOT NULL,
`COUNT` int(10) DEFAULT NULL,
`STATUS` varchar(50) DEFAULT NULL,
`FLAG` varchar(50) NOT NULL,
`DATE_ADDED` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`SUBJECT_NUM`),
UNIQUE KEY `SUBJECT_NUM` (`SUBJECT_NUM`),
KEY `EMPLOYEE_NUM` (`EMPLOYEE_NUM`),
KEY `EMPLOYEE_NUM_2` (`EMPLOYEE_NUM`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `room` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`room` varchar(255) NOT NULL,
PRIMARY KEY (`ID`),
UNIQUE KEY `room` (`room`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=13 ;
我要做的是将登记和科目的字段ROOM_ID设置为外键,并将引用设置为ROOM的ID。。房间ID不能是唯一的
我得到了这个错误
#1452 - Cannot add or update a child row: a foreign key constraint fails (`enrollmentdb`.`#sql-277_164`, CONSTRAINT `#sql-277_164_ibfk_3` FOREIGN KEY (`ROOM_ID`) REFERENCES `room` (`ID`))
使用此SQL命令时:
ALTER TABLE enrollment
ADD FOREIGN KEY (room_id)
REFERENCES room(ID)
房间id
在您的表格中大写。尝试:
ALTER TABLE enrollment
ADD FOREIGN KEY (ROOM_ID)
REFERENCES room(ID)
将“room\u id”替换为“room\u id”如果可用,请尝试以下代码:
ALTER TABLE enrollment
ADD CONSTRAINT ROOM_ID_fk
FOREIGN KEY(ROOM_ID)
REFERENCES room(ID);
谢谢 这并不能解决您的问题,但是将字符集改为utf8而不是latin1。这将省去一路上的许多麻烦。而且
COLLATE=UTF8\u GENERAL\u CI
也是一个好主意。可能是语句顺序的问题。首先创建表室,然后创建其他表室注册表和科目表已包含在我的数据库中。我刚刚在上面的两张桌子中添加了桌子室和场地室。。我只是想通过ROOM_ID在这些表之间创建一个关系,但我需要ROOM_ID不是唯一的。我收到以下错误:#1452-无法添加或更新子行:外键约束失败(enrollmentdb
)\sql-277_16e
,constraintROOM_ID\u fk
外键(ROOM_ID
)参考资料room
(ID
))我刚刚试过使用您的表,它工作正常。您的登记表和房间表中是否存在数据?是的,我的登记表和房间表中存在数据。。。我无法删除注册中的数据,但我可以删除房间中的数据。。我将尝试删除房间中的数据。我已删除房间表中的所有数据。。仍然得到相同的错误