Procedury mysql

0

Hey, więc tak piszę procedurę dodającą dane z formularza do bazy danych, wszystko pięknie ładnie, jednak napotkałam problem w takim przypadku:

titlehttps://scr.hu/7L8vLP
Jak rozwiązać problem z Tabela_A_idTabela_A, muszę to użyć w 3 innych tabelach, do tej pory korzystałam z VALUE(LAST_INSERT_ID()); Jednak ta funkcja pobiera ostatnie podane ID, a nie to na którym mi zależy ;/

I jeszcze takie drobne pytanie, czy taki zapis jest optymalny ? W każdym insecie dodaje po 5-6 rzeczy, a łącznie ich mam 4

 DELIMITER //
Create Procedure Dodaj(
Jakieś deklaracje
)
	BEGIN
    START TRANSACTION;
    INSERT INTO XX
		VALUES(XX);
        
            INSERT INTO XX
		VALUES(XX);
        
    INSERT INTO XX
		VALUES(XX);
        
COMMIT;
END//
DELIMITER ;

Z góry dzięki za pomoc.

0

Po pierwsze skoro masz procedurę DodajMieszkanie to używasz TabelA, tabelaB. Opisz swój problem taki jaki jest czyli masz jakieś tam tabele zgaduje może Mieszkania, Lokatorzy etc. Twój zapis jest kompletnie nieczytelny a klucz obcy do tabeli A: Tabela_A_idTabela_A to już całkiem... Jeżeli opiszesz swój problem w języku naturalnym, używając prawdziwych tabel to większa szansa, że ktoś pomoże. Twój zapis jest mało czytelny dla innych użytkowników.

Druga sprawa jeżeli w Twoim przypadku nie chodzi o funkcję pobierającą ostatni numer id możesz spróbować wybrać maksymalny id z danej tabeli, jeżeli Tobie faktycznie chodzi o taki rekord.

0
mariano901229 napisał(a):

Druga sprawa jeżeli w Twoim przypadku nie chodzi o funkcję pobierającą ostatni numer id możesz spróbować wybrać maksymalny id z danej tabeli, jeżeli Tobie faktycznie chodzi o taki rekord.

to jest najgłupsze co można zrobić

LAST_INSERT_ID() pobiera ostatnie wstawione ID dla aktywnej transakcji więc zrobienie INSERT a po nim LAST_INSERT_ID() jest prawidłowe i jak najbardziej poprawne. Id odczytane przez LAST_INSERT_ID() po wstawieniu należy sobie gdzieś zapisać i użyć w kolejnych insertach.

Co do optymalności to procedury/funkcje, które same się zatwierdzają to samo zło. Dodatkowo nie masz tam obsługi wyjątków i ew. cofnięcia zmian jeśli jakiś wyjątek wystąpi (np. duplikowanie klucza unikalnego).

1 użytkowników online, w tym zalogowanych: 0, gości: 1