我是SQL新手,正在寻求帮助。我有三个表:author
,study
和casestudy
(这是一个链接表)。我想要实现的是当数据插入author
和study
表(来自Web表单)时,如果可能的话,他们的自动增量ID会被插入到casestudy
表中。我想我需要创建触发器。 AuthorId
表中的StudyId
和casestudy
是一个复合键。表结构如下:
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);
任何建议将不胜感激。谢谢。
答案 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表单处理期间填充casestudy
和author
表的过程。
在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来实现,这些表将以一致的方式存储数据。