在一个操作中填充MySQL记录一对多相关表



我有两个MySQL表,它们之间是一对多关系。例如:

CREATE TABLE test1 (
    pk1 INTEGER AUTO_INCREMENT PRIMARY KEY,
    testvalue1 INTEGER
);
CREATE TABLE test2 (
    pk2 INTEGER AUTO_INCREMENT PRIMARY KEY,
    testvalue2 VARCHAR(50),
    fk2 INTEGER NOT NULL,
    FOREIGN KEY (fk2) REFERENCES test1 (pk1)
);

如果我想在两个表中都插入记录,我可以首先在PK表中插入一条记录(例如INSERT INTO test1 SET testvalue1=100),确定PK值(例如SELECT MAX(pk1) AS LastId FROM test1或使用LAST_INSERT_ID())最后使用该值填充第二个表中的FK列。

但是有可能在一个命令/查询/操作中实现这一切吗?那么,让我们使用AUTO INCREMENTs MySQL填充PK和fk值吧?

应该使用两个INSERT命令;或者尝试使用insert触发器。

编辑:

——一个带有触发器的例子:

CREATE TABLE dept(
  id INT(11) NOT NULL AUTO_INCREMENT,
  dept_name VARCHAR(255) DEFAULT NULL,
  PRIMARY KEY (id)
)
ENGINE = INNODB;
CREATE TABLE emp(
  id INT(11) NOT NULL AUTO_INCREMENT,
  emp_name VARCHAR(255) DEFAULT NULL,
  dept_id INT(11) DEFAULT NULL,
  PRIMARY KEY (id),
  CONSTRAINT FK_emp_dept_id FOREIGN KEY (dept_id)
  REFERENCES dept (id) ON DELETE RESTRICT ON UPDATE RESTRICT
)
ENGINE = INNODB;
DELIMITER $$
CREATE TRIGGER trigger1
AFTER INSERT
ON dept
FOR EACH ROW
BEGIN
  INSERT INTO emp VALUES (NULL, 'Someone', NEW.id);
END
$$
DELIMITER ;

-- Try to add new department.
INSERT INTO dept VALUES(NULL, 'Sales');
-- Is there new default employee?
SELECT * FROM emp;
+----+----------+---------+
| id | emp_name | dept_id |
+----+----------+---------+
|  1 | Someone  |       1 |
+----+----------+---------+

最新更新