如何在 mysql 或 JDBC 的表中自动插入外键引用?

2024-05-09

我正在使用MySQL。我的问题是如何自动将新添加的行插入外键表中。一个例子可以澄清我的问题:

我有两个表“员工”和“薪水”:

CREATE TABLE Employee(
     emp_id int NOT NULL AUTO_INCREMENT,
     name char(30),
     PRIMARY KEY (emp_id)
)  ENGINE=innoDB;

CREATE TABLE salary {
       sal_id int NOT NULL AUTO_INCREMENT
       salary_figure int,
       emp_id int,
       PRIMARY KEY (sal_id),
       FOREIGN KEY REFERENCES Employee(emp_id)
}

这是连接表:

employee_salary_join Table {
    int sal_id,
    int emp_id
}

上面的连接表没有任何外键关系。

现在,当我将员工插入员工表时

INSERT into Employee values ("john")

执行此语句后,将在 Employee 表中创建一行,该行具有由数据库引擎分配的 pk。

现在,当我在工资表中插入员工 John 的一行时,如下所示:

INSERT into SALARY values ("30000", ?????)

如何获取上面约翰刚刚插入的行的员工 ID 并将其放在此处的位置?????

最后,我有一个连接表,每次在工资表中添加一行时,我都想要连接表中的相应条目。这可以通过触发器来完成,但我不完全清楚如何设置它,因为我需要两者的参考emp_id and sal_id对于连接表行。

我还想知道处理问题时的最佳做法外键插入。我正在使用 JDBC/mysql 驱动程序。我想这应该不会影响我们在sql语句中处理上述内容的方式。


您可以使用该函数获取插入行的 auto_increment 列的 IDLAST_INSERT_ID https://dev.mysql.com/doc/refman/5.6/en/information-functions.html#function_last-insert-id: 所以你可以使用

INSERT into SALARY (salary_figure, emp_id) values ("30000", LAST_INSERT_ID());

用于您的第二次 INSERT 操作。

如果您想通过触发器将一行添加到第三个表中,请使用新的sal_id and emp_id值,您可以使用 AFTER INSERT 触发器来做到这一点Salary表使用列 emp_id 中的新值和最后插入的 auto_increment id ...以及已经提到的 LAST_INSERT_ID() 函数。

CREATE TRIGGER salary_after_insert AFTER INSERT ON `SALARY` 
    FOR EACH ROW
    BEGIN
         INSERT INTO join_table (emp_id, sal_id) VALUES (NEW.emp_id, LAST_INSERT_ID());
    END;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 mysql 或 JDBC 的表中自动插入外键引用? 的相关文章

  • Glassfish 4 - JDBC 领域

    Glassfish 4 中的密码加密算法和摘要算法有什么区别 因为Password加密算法不能为空 所以我使用了MD5 Encoding使用了Hex 摘要算法为空 因此默认为 SHA 256 但是 如果我使用 JAAS 制作一个简单的登录应
  • MySql 最后插入 ID,连接器 .net

    我正在使用 MySql Connector net 我需要获取最后一个查询生成的插入 id 现在 我假设返回值是MySqlHelper ExecuteNonQuery应该是最后一个插入id 但它只返回1 我正在使用的代码是 int inse
  • 显示表 FULLTEXT 索引列

    我希望运行一个查询 该查询将返回表中全文索引的列列表 该表采用 MyISAM 格式 我将使用 php 来构建查询 理想情况下 我会运行查询 它会返回信息 以便我可以构造一个以逗号分隔的列字符串 例如 名 姓 电子邮箱 这在 MySQL 中可
  • Python:如何使用生成器来避免 sql 内存问题

    我有以下方法来访问 mysql 数据库 并且查询在服务器中执行 我无权更改有关增加内存的任何内容 我对生成器很陌生 并开始阅读更多有关它的内容 并认为我可以将其转换为使用生成器 def getUNames self globalUserQu
  • MYSQL - 查找最近的前一天

    我可以以某种方式 不使用 PHP 找到一周中最近的前一天日期吗 Like 最近的上一个星期二的日期是哪一天 CURDATE INTERVAL WEEKDAY CURDATE wday IF WEEKDAY CURDATE gt wday 0
  • 将 SQL 数据中的一行映射到 Java 对象

    我有一个 Java 类 其实例字段 以及匹配的 setter 方法 与 SQL 数据库表的列名相匹配 我想优雅地从表中获取一行 到 ResultSet 中 并将其映射到此类的实例 例如 我有一个 Student 类 其中包含实例字段 FNA
  • Mysql 检索所有有限制的行

    我想检索特定用户的所有行 限制为 0 x 所以我只是想问是否有任何方法可以检索 mysql 中的所有行 而不调用返回 x 的 count id 的方法 而不重载现有函数 该函数在查询中根本没有限制 与我们的 string Relace 功能
  • 为什么我的 if 语句没有按我预期的方式工作?

    我正在尝试实现以下目标 我向我的 SQL 数据库询问使用SELECT FROM subjects 这样做之后我要求使用数组mysqli fetch assoc 在那之前一切都很好 现在的问题是 当我尝试在每个循环中修改 genero 的值
  • 使用 PHP 的 MySQL 连接字符串

    我正在尝试通过本地计算机连接到托管在我的服务器上的数据库 我的服务器有cPanel 11 它是一个典型的共享服务器 由CentOS提供支持 安装了PHP和MySQL 准确地说 我在同一台服务器上持有经销商帐户 我想在不同帐户或域之间访问数据
  • Apache、PHP 和 MySQL 可移植吗?

    我可以在外部硬盘上运行 Apache PHP 和 MySQL 吗 我需要这个 因为我在不同的地方工作 计算机 有时我没有安装和配置所有使用的应用程序 当然可以 XAMPP http www apachefriends org en xamp
  • 在 MySQL 中使用 COUNT 时如何返回 0 而不是 null

    我使用此查询返回存储在 sTable 中的歌曲列表以及存储在 sTable2 中的总项目数 SQL queries Get data to display sQuery SELECT SQL CALC FOUND ROWS str repl
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri
  • 免费 PHP 登录库 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • PDO PHP 连接,致命错误

    我的连接类 firstcode php class DB functions public db function construct try db new PDO mysql localhost dbname xxx charset ut
  • Bugzilla 中分离客户端的基本权限

    我正在尝试配置一个 Bugzilla 实例 这将允许我的客户登录并为其正在开发 维护的网站提交错误 例如 我创建了 2 个名为 TestProject TestProject2 的产品和一个名为 TestClient 的用户 我想要实现的是
  • 如何在 Play java 中创建数据库线程池并使用该池进行数据库查询

    我目前正在使用 play java 并使用默认线程池进行数据库查询 但了解使用数据库线程池进行数据库查询可以使我的系统更加高效 目前我的代码是 import play libs Akka import scala concurrent Ex
  • 如何使用 SparkR 1.6.0 写入 JDBC 源?

    使用 SparkR 1 6 0 我可以使用以下代码从 JDBC 源读取数据 jdbc url lt jdbc mysql localhost 3306 dashboard user
  • INSERT..RETURNING 在 JOOQ 中不起作用

    我有一个 MariaDB 数据库 我正在尝试在表中插入一行users 它有一个生成的id我想在插入后得到它 我见过this http www jooq org doc 3 8 manual sql building sql statemen
  • 映射 mysql 中同一个表的多个值

    您好 我必须使用另一个表中的值 id 获取文本值 表 1 包含值 ID 表 2 包含名称和值 ID 表 1 SEVERITY OCCURENCE DETECTABILITY 2 3 4 表 2 id name value 1 Very Hi
  • 在 MySQL 中存储表情符号的编码问题:如何使用 Prisma ORM 在 NodeJS 中定义字符排序规则?

    亲爱的 Nodejs 专家和数据库专家 我们在 MySQL 数据库中存储表情符号和其他特殊字符时遇到问题 我们使用 Prisma 得到一个错误 这是我们使用的 ORM 参数无法从排序规则 utf8 general ci 转换为 utf8mb

随机推荐

  • 想要更改 URL 模式

    这些天 我看到了这样的 URL 模式 http stackoverflow com questions How to do 不是像这样的平常和旧的 http stackoverflow com questions php id 123 or
  • 使用 X.509 身份验证时从 Edge 模块访问 IoT Edge 设备孪生

    设想 使用 DPS 和 X 509 身份验证配置的 IoT Edge 网关 叶子设备将使用 SAS 密钥 并且每个设备在 IoT 中心都有自己的身份 我们需要从 IoT Edge 模块访问 Edge Device Twin 属性 如果我们使
  • 从 stdin 读取后,PHP 在每行上给出尾随“=”

    stdin 的内容因自动换行和尾随 而被损坏 这显然破坏了我需要发布的 URL 我需要从电子邮件中提取 URL 链接 然后发布该 URL 因此 我使用我在互联网上看到的标准代码片段将电子邮件传输到 cpanel 中的 php 脚本 fd f
  • 使用另一个数组中的值转换所有数组键

    我有很多数组 是从 csv 文件生成的 在所有数组中 第一个数组对象是 csv 标题 请参阅下面的示例 总之 第一个数组的值 即 key 0 和 value report date 应替换所有后续数组的所有键 因此 对除第一个数组之外的所有
  • WifiConfiguration 在 Lollipop 中启用网络

    我正在研究 Wifi 项目 有一个模块可以让用户以编程方式加入 wifi 在 kitkat 及以下版本中它可以成功工作 但在 Lollipop 中它不起作用 这是代码 WifiManager wifiManager WifiManager
  • 升级到 Xubuntu 14.04 后 Aptana 崩溃

    我已经使用 Aptana 多年了 并且已经习惯了它的许多功能 直到我从 Ubuntu 13 04 升级到 14 04 为止 它一直很可靠 现在每隔 5 分钟左右就会崩溃一次 我无法完成工作 没有出现错误 屏幕只是消失 每次重新启动时 我都必
  • 两个非嵌套循环的大 O 表示法

    对于两个非嵌套的 for 循环 大 O 表示法是什么 Example for int i 0 i
  • 启动画面反应本机后出现白屏

    编辑 似乎是因为 MainActivity 加载太重而生成白屏 我设法首先使用本机启动屏幕来解决 然后在本机被杀死后立即基于下一个插件的 js 实现 我做了一些修改完美匹配两个启动画面https github com crazycodebo
  • 代码签名证书选项

    我被分配了为我的公司购买数字证书来签署我们的代码的任务 我们在 Microsoft 领域开发应用程序 主要是 WPF 或基于 Web 我调查了选项 发现 Comodo 价格合理且反应灵敏 我们准备继续通过它们购买证书 但是在注册表单中有各种
  • jquery 求所有div子元素的总高度

    嘿 我有一个 div 其中包含 5 个 div 我想将它们所有的高度加在一起 这是我根据杰夫的回答最终使用的解决方案 谢谢你的协助 var ev totalHeight 0 events gt div each function ev to
  • 非集群主键实体框架代码优先

    在实体框架代码优先方法中 我们是否可以将主键定义为非聚集索引 并将其他几个字段的组合定义为聚集索引 Thanks EF 6 2 解决了这个问题 目前 它处于测试状态 但它可以工作 首先 将 EF 升级到 6 2 Install Packag
  • 在上下文中模拟计时,以使用 auto_now_add=True 的字段 DateTimeField 创建模型

    我想模拟时间以便能够set特定时间到某个类型的字段DateTimeField with auto now add True在我的测试期间 例如 class MyModel created at models DateTimeField au
  • Parcelable 写入可序列化对象 getactivity() 时遇到 IOException

    所以我在 logcat 中得到了这个 java lang RuntimeException Parcelable encountered IOException writing serializable object name com re
  • 如何在Python中创建二维码而不将其另存为图像?

    我正在尝试使用以下代码在 Django 应用程序上使用 Python 制作二维码 def generate qr code reference qr qrcode QRCode version 1 error correction qrco
  • Lockfree 标准集合和教程或文章

    有人知道用于无锁常用数据类型的实现 即源代码 的好资源吗 我正在考虑列表 队列等 锁定实现非常容易找到 但我找不到无锁算法的示例以及 CAS 的工作原理以及如何使用它来实现这些结构 查看 Julian M Bucknall 的博客 他 详细
  • Xcode 10 命令行构建:存档失败,出现 Fabric Info.plist 错误

    我有用于自动构建 iOS 项目的 Jenkins 服务器 该项目有两个目标 使用命令行实用程序构建项目xcodebuild 完整命令是 usr bin xcodebuild workspace Our project xcworkspace
  • 未找到类型:'(架构,http://www.w3.org/2001/XMLSchema,)

    我正在使用 suds client 来提供肥皂 wsdl 服务 当我尝试为肥皂服务设置肥皂水客户端时 我收到 类型未找到 错误 我到处寻找 有许多未解答的问题具有相同的错误 我将链接添加为问题1 https stackoverflow co
  • 这个 Java 语法是什么意思? [复制]

    这个问题在这里已经有答案了 可能的重复 java中的是什么意思 https stackoverflow com questions 12649572 what does the type in java mean 在下面的代码中 Itera
  • 使用 Sentinels 升级 Redis 的最佳实践?

    我有 3 个 Redis 节点 由 3 个哨兵监视 我进行了搜索 文档似乎不清楚如何最好地升级此类配置 我目前使用的是 3 0 6 版本 我想升级到最新的 5 0 5 我对这方面的程序有几个疑问 升级两个大版本可以吗 我在我们的暂存环境中执
  • 如何在 mysql 或 JDBC 的表中自动插入外键引用?

    我正在使用MySQL 我的问题是如何自动将新添加的行插入外键表中 一个例子可以澄清我的问题 我有两个表 员工 和 薪水 CREATE TABLE Employee emp id int NOT NULL AUTO INCREMENT nam