触发两个表以将主键(自动增量)转换为第三个链接表mysql

时间:2016-02-22 11:03:03

标签: php mysql sql database

我是SQL新手,正在寻求帮助。我有三个表:authorstudycasestudy(这是一个链接表)。我想要实现的是当数据插入authorstudy表(来自Web表单)时,如果可能的话,他们的自动增量ID会被插入到casestudy表中。我想我需要创建触发器。 AuthorId表中的StudyIdcasestudy是一个复合键。表结构如下:

CREATE TABLE `test`.`author` ( 
`AuthorId` INT(11) NOT NULL AUTO_INCREMENT, 
`AuthorTitle` VARCHAR(45) NOT NULL, 
PRIMARY KEY (`AuthorId`), 
UNIQUE INDEX `AuthorId_UNIQUE` (`AuthorId` ASC)); 
CREATE TABLE `test`.`study` ( 
`StudyId` INT(11) NOT NULL AUTO_INCREMENT, 
`Title` VARCHAR(45) NOT NULL, 
PRIMARY KEY (`StudyId`), 
UNIQUE INDEX `StudyId_UNIQUE` (`StudyId` ASC));
CREATE TABLE `test`.`casestudy` ( 
`AuthorId` INT(11) NOT NULL, 
`StudyId` INT(11) NOT NULL, 
PRIMARY KEY (`AuthorId`, `StudyId`), 
INDEX `StudyId_idx` (`StudyId` ASC), 
CONSTRAINT `AuthorId` 
FOREIGN KEY (`AuthorId`) 
REFERENCES `test`.`author` (`AuthorId`) 
ON DELETE NO ACTION 
ON UPDATE NO ACTION, 
CONSTRAINT `StudyId` 
FOREIGN KEY (`StudyId`) 
REFERENCES `test`.`study` (`StudyId`) 
ON DELETE NO ACTION 
ON UPDATE NO ACTION);

任何建议将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:2)

据我所知,var array = [ "Procurement of activities in progress.", "Structural works in progress in S2 & S3", "Structural works in progress in N4.", "Childrens Mall pedestal and steel fabrication." "Procurement of activities in progress." "External works for mist pool in progress", "MEP 1st & 2nd fix in progress", "Block work and grade slab in progress" ] author表之间没有数据链接。没有"两个表上的一个触发器一次更新的功能"。实现study维护的最佳位置是在Web表单处理期间填充casestudyauthor表的过程。

在PHP中,可以通过使用study(参见Inserting data into multiple tables using php via a web form)在每个Insert之后收集ID,然后使用它们来更新链接表来完成。

使用mysqli(假设$ mysqli是连接)应该是这样的:

mysql_insert_id();

或者,可以通过存储过程(或仅仅是SQL脚本)一致地填充所有三个表,这些过程将一次性处理所有相关的Web表单字段。然后,可以使用$AuthorTitle = $mysqli->real_escape_string($_POST[AuthorTitle value]); $mysqli->query("INSERT INTO test.author(AuthorTitle) VALUES('$AuthorTitle')"); $AuthorId = $mysqli->insert_id; $StudyTitle = $mysqli->real_escape_string($_POST[StudyTitle value]); $mysqli->query("INSERT INTO test.study(Title) VALUES('$StudyTitle')"); $StudyId = $mysqli->insert_id; $mysqli->query("INSERT INTO test.casestudy(AuthorId, StudyId) VALUES($AuthorId, $StudyId)"); 收集每个Insert自动生成的ID(请参阅LAST_INSERT_ID() MySQL)。

LAST_INSERT_ID();

最后,这个场景可以通过所有三个表中的Updatable and Insertable View来实现,这些表将以一致的方式存储数据。