你好我正在做一个数据库任务,我被困在如何做到这一个存储过程。虽然它的工作原理,有点...通过存储过程将信息插入父/子表中?
DELIMITER //
CREATE PROCEDURE AddANewCustomer(IN firstName char(20), IN lastName char(20), IN companyName char(45), IN streetAddress char(60), IN city char(30), IN province char(45), IN postalCode char(6), IN phoneNumber int(10))
BEGIN
DECLARE PersonID INT;
SELECT idPerson FROM Persons WHERE Persons.firstName = firstName AND Persons.lastName = lastName INTO PersonID;
IF PersonID IS NULL THEN
INSERT INTO Persons(firstName, lastName, streetAddress, city, province, postalCode, phoneNumber) VALUES (firstName, lastName, streetAddress, City, Province, postalCode, phoneNumber);
SELECT idPerson FROM Persons WHERE firstName = firstName AND lastName = lastName INTO PersonID;
END IF;
INSERT INTO Customers(idCustomer, companyName) VALUES (Last_Insert_ID(), companyName);
END //
DELIMITER ;
基本上我与超/子类型的工作。我想从用户那里获取信息,然后更新我的父表(Persons),并将剩余的信息传递给我的子表(Customers)。 idPerson是Persons表的自动递增PK,我想将它用作Customers表的id,idCustomer的PK/FK。
如果我运行一次该过程,它会吐出一个错误'结果包含多行',只有父表得到更新...但是如果我再次运行它,它会更新孩子表格正确。这让我认为Last_Insert_ID()参数第一次为null,并且在过程完成后idPerson才会更新。
我已经研究了整个晚上的修复,现在我绝对难以解决这个问题。