2017-07-31 10 views
0

私はTaskListsのテーブルと、自動的に生成されたプライマリキーとTasksテーブルを持っています。 TaskListは複数のTasksを持つことができます。MySQL:テーブルへのアトミックな挿入と関連テーブルへの同時投稿

TaskLists行を挿入すると同時に、ちょうど挿入されたオブジェクトを参照するTasksテーブルに複数の行をアトミックに挿入しません。

+0

トリガーを使用することができます –

+0

トランザクションを使用する必要があります。トランザクションをロールバックしたり自由にコミットしたりすることができます。 – Zalomon

答えて

1

を使用し、この中には何も宇宙は「同じ時」に起こるので、あなたはできません。 :)

TaskListに行を挿入し、対応する行をTaskに挿入し、トランザクションをコミットすることができます。それは確かにあなたが(永久に)部分的なデータをデータベースに書くことができなかったという意味では、 "原子的"であろう。

TaskListのIDが自動インクリメントされている場合はLAST_INSERT_IDで取得し、TaskのFKに使用できます。

0

、あなたがTaskListから値を利用したい場合はAFTER INSERT

CREATE TRIGGER trigger_name 
AFTER INSERT 
    ON TaskList FOR EACH ROW 

BEGIN 

    -- Insert the rows to tasks now 

    INSERT INTO tasks (TaskID) VALUES (NEW.TaskId); 

    -- You can run several insert statements here 
END; 

をhappends triggersの使用をしない一般相対性理論によるとNEW.columname

https://www.techonthenet.com/mysql/triggers/after_insert.php

+0

トリガは、トランザクション内で実行されない場合、それ自体がアトミックではありません。何らかの理由で1つのクエリが失敗した場合でも、障害が発生したクエリは何が実行されても実行され続けます。 – Zalomon

関連する問題