Mysql 如何对自动递增记录使用外键?
我创建了两个表Mysql 如何对自动递增记录使用外键?,mysql,mysql-workbench,Mysql,Mysql Workbench,我创建了两个表student和grade。为了将student\u id的自动递增值发送到grade(student\u id)表,我在这两个记录之间建立了一个外键,如下所示: DROP TABLE IF EXISTS `student`; CREATE TABLE `student` ( `student_id` int(11) NOT NULL AUTO_INCREMENT, `student_name` varchar(45) DEFAULT NULL,
student
和grade
。为了将student\u id
的自动递增值发送到grade
(student\u id)表,我在这两个记录之间建立了一个外键,如下所示:
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`student_id` int(11) NOT NULL AUTO_INCREMENT,
`student_name` varchar(45) DEFAULT NULL,
PRIMARY KEY (`student_id`)
) ENGINE=InnoDB AUTO_INCREMENT=901840505 DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `grades`;
CREATE TABLE `grades` (
`grade_id` int(11) NOT NULL AUTO_INCREMENT,
`student_id` int(11) DEFAULT NULL,
`grade` varchar(45) DEFAULT NULL,
PRIMARY KEY (`grade_id`),
KEY `stdgrd_idx` (`student_id`),
CONSTRAINT `stdgrd` FOREIGN KEY (`student_id`) REFERENCES `student` (`student_id`)
ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1641 DEFAULT CHARSET=utf8;
我的问题是,当我将值插入student\u name
表中的student
记录时,student(student\u id)
是自动递增的,因此我希望自动递增的值被发送到grade(student\u id)
但是,
等级
表没有考虑该值。我已经在stackoverflow
中发布的问题的帮助下尝试过了,但我没能成功。请任何人对此问题提供帮助???外键关系仅用于验证子列的内容。没有数据的自动传输。插入student
并生成student\u id
auto\u inc值不会立即影响grades
表。这只会创建一个student\u id
值,该值现在是grades
student\u id
列的可接受内容。向子表添加记录不会触发父表中的自动增量……您认为还有其他方法可以解决我的问题吗?外键不会“发送”任何地方都可以。它们只是强制执行父/子关系并禁止孤立记录。您首先必须插入(创建)一个student
记录,从而使mysql为您创建一个ID。您可以使用last\u insert\u ID()
获取该ID,并将其插入成绩表。如果您不介意,请向我发送一个与之相关联的查询?indirect into students…
然后选择last\u insert\u ID()
,然后插入成绩表。。。值($last_insert_id,…)
是否有其他方法将自动递增的值触发到grade
表中。您可以使用存储过程来实现这一点,但我会质疑用例。student
和grades
之间的关系是一对多的,所以我不认为“发送”auto_inc有什么意义?您计划如何填充等级
的等级
列?一个学生肯定有很多分数吗?为什么创建一个学生就意味着创建一个等级?这只是一门课程,所以很明显他只有一个等级。然后在学生
中创建等级
栏。如果你的数据是1对1,你不需要两个表。先生,实际上我已经分配了一项任务,在两个表之间建立关系。
CONSTRAINT `stdgrd` FOREIGN KEY (`student_id`) REFERENCES `student`
(`student_id`) ON DELETE CASCADE ON UPDATE CASCADE