![](/img/trans.png)
[英]How to insert the auto incremented field id of mysql in php and update the id of one table to another?
[英]How can I insert multiple rows into one table, then into another table using an auto incremented ID? mysql
所以我有两个由'skillid'键连接的表格:
skills
+-----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+----------------+
| skillid | int(11) | NO | PRI | NULL | auto_increment |
| skillname | varchar(30) | NO | | NULL | |
+-----------+-------------+------+-----+---------+----------------+
students_skills
+-----------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+---------+------+-----+---------+----------------+
| ssid | int(11) | NO | PRI | NULL | auto_increment |
| studentid | int(11) | NO | MUL | NULL | |
| skillid | int(11) | NO | MUL | NULL | |
+-----------+---------+------+-----+---------+----------------+
我正在尝试在表技能中插入多行,然后根据创建的ID将这些行插入student_skills。 我一直在研究使用LAST_INSERT_ID()函数:
INSERT INTO skills (skillid , skillname)
VALUES(NULL,'being grateful for help'); # generate ID by inserting NULL
INSERT INTO students_skills (ssid, studentid, skillid)
VALUES(LAST_INSERT_ID(),'1', '2'); # use ID in second table
但我无法弄清楚如何在一个mysql表中同时为多行执行此操作。 当我简单地为每一行复制上面的4行时,我收到错误。
错误:#1452 -不能添加或更新子行,外键约束失败(
empology
。students_skills
,约束students_skills_ibfk_2
外键(skillid
)参考文献skills
(skillid
))
我是否在正确的路线上? 我也研究了连接,但这种方法对我来说更有意义。
感谢您提供任何帮助或有用的链接。
您必须确保使用多行插入语法,以便即使您自动递增另一列, LAST_INSERT_ID()
保持一致:
INSERT INTO skills VALUES (NULL, 'test');
假设生成的skillid
是1
,那么你可以这样做:
INSERT INTO student_skills VALUES
(NULL, 1, LAST_INSERT_ID()),
(NULL, 2, LAST_INSERT_ID()),
(NULL, 3, LAST_INSERT_ID()),
(NULL, 4, LAST_INSERT_ID());
返回的值LAST_INSERT_ID()
将始终如一地保持不变( 1
在所有四排)。
但是,如果您将多个插入作为独立语句执行,则LAST_INSERT_ID()
将更改,因为它将包含每个插入的生成的自动递增值:
INSERT INTO student_skills VALUES (NULL, 1, LAST_INSERT_ID());
INSERT INTO student_skills VALUES (NULL, 2, LAST_INSERT_ID());
INSERT INTO student_skills VALUES (NULL, 3, LAST_INSERT_ID());
INSERT INTO student_skills VALUES (NULL, 4, LAST_INSERT_ID());
其中LAST_INSERT_ID()
是前一个插入的生成ID。
看看这个SQLFiddle演示
由于students_skills.ssid
是AUTO_INCREMENT
列,因此第二个插入内容看起来不对。 看来你想要以下内容:
INSERT INTO skills (skillid , skillname)
VALUES(NULL,'being grateful for help'); # generate ID by inserting NULL
INSERT INTO students_skills (ssid, studentid, skillid)
VALUES(NULL,'1', LAST_INSERT_ID()); # use ID in second table
看到输出会很有帮助
SHOW CREATE TABLE skills;
SHOW CREATE TABLE students_skills;
看到FOREIGN KEYs
。
更新显示输出
+--------+------------------------------------------------------------------------------
| Table | Create Table
+--------+------------------------------------------------------------------------------
| skills | CREATE TABLE `skills` (
`skillid` int(11) NOT NULL AUTO_INCREMENT,
`skillname` varchar(30) NOT NULL,
PRIMARY KEY (`skillid`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=latin1 |
+--------+------------------------------------------------------------------------------
+-----------------+---------------------------------------------------------------------
| Table | Create Table
+-----------------+---------------------------------------------------------------------
| students_skills | CREATE TABLE `students_skills` (
`ssid` int(11) NOT NULL AUTO_INCREMENT,
`studentid` int(11) NOT NULL,
`skillid` int(11) NOT NULL,
PRIMARY KEY (`ssid`),
KEY `studentid` (`studentid`),
KEY `skillid` (`skillid`),
CONSTRAINT `students_skills_ibfk_1` FOREIGN KEY (`studentid`) REFERENCES `students` (`studentid`),
CONSTRAINT `students_skills_ibfk_2` FOREIGN KEY (`skillid`) REFERENCES `skills` (`skillid`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1 |
+-----------------+--------------------------------------------------------------------
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.