jdbc 创建mysql触发器_如何在mysql或JDBC中的表中自动插入外键引用?

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

我有两个表Employee和Salary:

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", ?????)

如何获取上面John插入的行的员工ID,并将其放在?????的位置?

最后,我有一个连接表,每次在工资表中添加一行时,我想要连接表中的相应条目.这可以通过触发器完成,但我不完全清楚如何设置它因为我需要连接表行的emp_id和sal_id的引用.

我还想了解处理外键插入时的最佳实践.我正在使用JDBC / mysql驱动程序.我想这不应该影响我们在sql语句中如何处理上面的过程.

解决方法:

您可以使用函数LAST_INSERT_ID获取插入行的auto_increment列的ID:

所以你可以使用

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

为您的第二次INSERT操作.

如果要通过触发器将行添加到第三个表中,使用新的sal_id和emp_id值,可以使用emp_id列中的新值和最后插入的auto_increment id,在Salary表上使用AFTER INSERT触发器执行此操作. …已经提到过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;

标签:mysql,foreign-keys,jdbc,triggers

来源: https://codeday.me/bug/20190517/1119110.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值