Insert rows in a table, via a row-level trigger, activated after insertion in that same table
To perform what you are looking for based on this example:

INSERT INTO synonym_bucket VALUES (23,37);


SUGGESTION #1

DROP TABLE IF EXISTS synonym_bucket;
CREATE TABLE synonym_bucket LIKE synonyms;
ALTER TABLE synonym_bucket ENGINE=BLACKHOLE;
DELIMITER $$   
CREATE TRIGGER MakeTwoSynonyms
AFTER INSERT ON synonym_bucket 
FOR EACH ROW
BEGIN
    IF new.w1 &lt;&gt; new.w2 THEN
        INSERT IGNORE INTO synonyms VALUES (new.w1, new.w2),(new.w2, new.w1);
    END IF;
END $$
DELIMITER ;


Using synonym_bucket takes up just 2K (table definition plus trigger)

Bottom Line: For a table's before and after trigger, you cannot perform additional DML to the same table. However, you can do DML from a trigger to another table. This is why I made a BLACKHOLE table. It takes up to 2K (table definition and the trigger code). You use it to write to a separate table. In this case, synonym_bucket does the double INSERT into synonyms.

SUGGESTION #2

Do the the double INSERT yourself

INSERT IGNORE INTO synonyms VALUES (23,37),(37,23); 


No trigger required

GIVE IT A TRY !!!