sql >> Databáze >  >> RDS >> Mysql

mysql vkládání do 2 tabulek najednou, které mají primární klíč a cizí klíč

Můžete použít STORED PROCEDURE na tomto, takže budete volat pouze jednou z aplikační úrovně. Příklad,

DELIMITER $$
CREATE PROCEDURE InsertBook
(
    IN _Title INT,
    IN _AwardName VARCHAR(35),
    IN _Year INT
)
BEGIN
    INSERT INTO Books (Title)
    VALUES(_Title);

    -- since the ID is set as AUTO_INCREMENT
    -- there are two ways to do how you can get the ID 
    -- from the Books Table and insert it 
    -- on BookAwards

    -- FIRST WAY
    -- by using LAST_INSERT_ID()
    SET @last_ID = LAST_INSERT_ID();

    -- SECOND WAY
    -- by using MAX()
    -- SET @last_ID = (SELECT MAX(ID) FROM Books);


    INSERT INTO BookAwards(ID, AwardName, Year)
    VALUES (@last_ID, _AwardName, _Year);
END $$
DELIMITER ;

A na úrovni aplikace nebo na jakýchkoli zdrojích, které chcete nazývat tento postup,

CALL InsertBook('Lost Art', 'Best in Churva', 2013);

Z bezpečnostních důvodů můžete proceduru stále parametrizovat, např.

CALL InsertBook(?, ?, ?);



  1. Odemknutí tabulek v případě ztráty vlákna

  2. Jak mohu protokolovat/sledovat volání uložených procedur Oracle s hodnotami parametrů?

  3. SQL Server Jedinečný složený klíč dvou polí s automatickým přírůstkem druhého pole

  4. Pochopení velikosti úložiště „čas“ na serveru SQL Server