I edited my post since i got no aswers on this board (about a problem) and i was able to make a succesfull Query. So here it is for anyone who is interested:
DELIMITER $$ SET SQL_MODE = ANSI_QUOTES$$ DROP PROCEDURE IF EXISTS AddEdge$$ CREATE PROCEDURE AddEdge ( IN v_StartVertexId INT UNSIGNED, IN v_EndVertexId INT UNSIGNED) AddEdge_BLOCK: BEGIN DECLARE v_Id INT UNSIGNED; IF EXISTS (SELECT Id FROM edges WHERE StartVertex = v_StartVertexId AND EndVertex = v_EndVertexId AND Hops = 0) THEN LEAVE AddEdge_BLOCK; END IF; IF v_StartVertexId = v_EndVertexId OR EXISTS (SELECT Id FROM edges WHERE StartVertex = v_EndVertexId AND EndVertex = v_StartVertexId) THEN -- RAISERROR ('Attempt to create a circular relation detected!', 16, 1); -- MSSQL statement -- MySQL workaround (not implemented): http://blogs.oracle.com/svetasmirnova/entry/how_to_raise_error_in LEAVE AddEdge_BLOCK; END IF; INSERT INTO edges ( StartVertex, EndVertex, Hops) VALUES ( v_StartVertexId, v_EndVertexId, 0); SET v_Id := LAST_INSERT_ID(); UPDATE edges SET EntryEdgeId = v_Id , ExitEdgeId = v_Id , DirectEdgeId = v_Id WHERE Id = v_Id; -- step 1: A's incoming edges to B INSERT INTO edges ( EntryEdgeId, DirectEdgeId, ExitEdgeId, StartVertex, EndVertex, Hops) SELECT Id , v_Id , v_Id , StartVertex , v_EndVertexId , Hops + 1 FROM edges WHERE EndVertex = v_StartVertexId; -- step 2: A to B's outgoing edges INSERT INTO edges ( EntryEdgeId, DirectEdgeId, ExitEdgeId, StartVertex, EndVertex, Hops) SELECT v_Id , v_Id , Id , v_StartVertexId , EndVertex , Hops + 1 FROM edges WHERE StartVertex = v_EndVertexId; -- step 3: A’s incoming edges to end vertex of B's outgoing edges INSERT INTO Edge ( EntryEdgeId, DirectEdgeId, ExitEdgeId, StartVertex, EndVertex, Hops) SELECT A.Id , v_Id , B.Id , A.StartVertex , B.EndVertex , A.Hops + B.Hops + 1 FROM Edge A CROSS JOIN Edge B WHERE A.EndVertex = v_StartVertexId AND B.StartVertex = v_EndVertexId; END AddEdge_BLOCK$$ DELIMITER ;