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
,constraint
ROOM_ID\u fk
外键(
ROOM_ID
)参考资料
room
ID
))我刚刚试过使用您的表,它工作正常。您的登记表和房间表中是否存在数据?是的,我的登记表和房间表中存在数据。。。我无法删除注册中的数据,但我可以删除房间中的数据。。我将尝试删除房间中的数据。我已删除房间表中的所有数据。。仍然得到相同的错误