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

标签 mysql jdbc foreign-keys triggers

我正在使用 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_idsal_id

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

最佳答案

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

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

用于您的第二个 INSERT 操作。

如果您想通过触发器将一行添加到第三个表中,使用新的 sal_idemp_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;

关于mysql - 如何在mysql或JDBC的表中自动插入外键引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25920251/

相关文章:

mysql - 通过更新外键来更新主键

php - MYSQL 查询从表中选择并按日期和其他字段排序。优先其他领域

带有 UCanAccess 的 java.util.regex.PatternSyntaxException

java - MySQL语法错误异常

python - Django - 获取存储在外键中的对象

php - Laravel 引用外键数据

python - django 如何从同一模型中获得多个外键

mysql - mysql中外键引用的主键可以是varchar(255)吗?

Java - 如何从 MySQL 过程中获取 ReturnCode?

java - dbcp : number of open prepared statement