当前位置: 首页 > 知识库问答 >
问题:

两个表上的触发器将主键(自动递增)获取到第三个链接表mysql中

方嘉言
2023-03-14

我是SQL的新手,正在寻求一些帮助。我有三个表:authorstudycaseStudy(这是一个链接表)。我想实现的是,当数据插入authorstudy表(从web表单)时,如果可能的话,它们的自动增量ID将插入caseStudy表。我想我需要创建触发器。caseStudy表中的authoridstudyid是一个复合键。表结构如下:

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个答案

茅桐
2023-03-14

据我所知,authorstudy表之间没有数据链接。没有“一次更新两个表上的一个触发器”这样的功能。实现caseStudy维护的最佳位置是在web表单处理期间填充authorstudy表的过程中。

在PHP中,可以通过使用mysql_insert_id();在每个insert之后收集ID(请参见通过web表单使用PHP将数据插入到多个表中),然后使用它们来更新链接表来完成。

使用mysqli(并假设$mysqli是连接),应该如下所示:

$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)");
$AuthorTitle = $mysqli->real_escape_string($_POST[AuthorTitle value]);
$StudyTitle = $mysqli->real_escape_string($_POST[StudyTitle value]);
$mysqli->multi_query("
    START TRANSACTION;
        INSERT INTO test.author(AuthorTitle) VALUES('$AuthorTitle');
        SET @AuthorId = LAST_INSERT_ID();
        INSERT INTO test.study(Title) VALUES('$StudyTitle');
        SET @StudyId = LAST_INSERT_ID();
        INSERT INTO test.casestudy(AuthorId, StudyId) VALUES(@AuthorId, @StudyId);
    COMMIT;
");
 类似资料:
  • 问题内容: 好的问题是,我必须对两个链接的表中的两个和求和 第一表要点: 第二张表的收入: 现在我试过的是: 但我得到了错误的结果 我想得到这个: 谢谢! 问题答案: 如果要获得每位用户的总收入,则可能应该先确定要为其获得收入的用户。最明智的选择可能是使用users表本身作为基础。 这种方法的附加好处是可以报告没有积分和/或收入的用户。

  • 问题内容: 我了解主键的价值。 我了解索引的价值。 每个 MySQL表都应该有一个自动递增的主键(最好是INT字段类型)吗? 更新 @Raj More的答案似乎是最有效的。但是,我想到的问题是,此自动递增的主键ID将如何与其他表相关。例如: 表格1 表2 在上面的示例中,消费者可以来到该站点并选择注册免费的产品/服务。如果消费者选择,他们可以提供其他信息(存储在表2中)以进行其他邮件发送等。我看到

  • 我试图连接两个表,但似乎有一个问题,我寻找的输出是有主题的行量。

  • 以下是我现在的声明: 它工作得很好,但会产生一些主键冲突。所以,当输入新行时,我想做的是: 新建主键+佣金表数据+建议书表数据 有什么想法吗?

  • 问题内容: 想知道是否存在将新记录插入启用了主键的表中的简写版本?(即不必在查询中包括关键字列)假设关键字列称为ID,其他列为Fname,Lname和Website 问题答案: 使用DEFAULT关键字: 另外,您可以指定列(这是更好的做法): 参考: http://dev.mysql.com/doc/refman/5.6/zh-CN/data-type-defaults.html

  • 我有两个我想使用“主键”链接的工作表。目前,我已经使用函数从Sheet1导入了一些列到Sheet2(例如第一个单元格)。我的目的是完成与Sheet2中每个导入行相关的数据。但是,Sheet1与其他人共享,因此他们可以修改行的内容,而无需删除或修改我在Sheet2中添加的数据(而这在Sheet1中不存在)。 考虑到我的表中有一列“id”可以被视为主键,我如何在sheet2中添加新数据,只要它与“id