Witam,
chciałbym się Was poradzić w jaki sposób powinna przebiegach akutalizacja/wstawianie danych umieszczonych w wielu tabelach ?
Mamy przykładowo: Dodając nowego sędziego (tabela sedzia) jednocześnie powinien być dodany rekord w tabeli osoba.. Osobiście myślałem o wykonaniu tego za pomocą procedury (coś takiego jak ta poniżej), jednak spotkałem się z opiniami: " po co robisz to w procedurze.. To jest niepotrzebne..".
Ok, tylko z takiej odpowiedzi nic nie wynika, dlatego chciałbym zadać pytanie dlaczego jest mało porządane rozwiązanie (może mała wydajność / przekombinowane ? ) i jak lepiej to wykonać ? (normalnie np. w Cpp/Qt wywołać iteracyjnie (po kolei) dwa zapytania SQL )
CREATE PROCEDURE wstawSędziego(
IN user VARCHAR(50), IN pass CHAR(40), IN fName VARCHAR(50), IN lName VARCHAR(50), IN address VARCHAR(50), IN city VARCHAR(50), IN pesel CHAR(11), IN licence VARCHAR(50))
BEGIN
DECLARE myvar INT(50);
SET @paramA = user;
SET @paramB = pass;
SET @paramC = fName;
SET @paramD = lName;
SET @paramE = address;
SET @paramF = city;
SET @paramG = pesel;
SET @paramH = license;
START TRANSACTION;
SET @sql = CONCAT('INSERT INTO osoba(firstName, lastName, address, city, pesel) VALUES (?,?,?,?,?)');
PREPARE s1 FROM @sql;
EXECUTE s1 USING @paramC, @paramD, @paramE, @paramF, @paramG;
SELECT LAST_INSERT_ID() INTO myvar FROM persons WHERE pesel=@paramG LIMIT 1;
SET @osoba_id = myvar;
SET @sql = CONCAT('INSERT INTO sedzia(license, osoba_id) VALUES (?,?,?)');
PREPARE s1 from @sql;
EXECUTE s1 USING @paramA, @osoba_id;
COMMIT;
END//