Chociaż nie jest jasne, co dokładnie zamierzasz ze stwierdzeniem „użyj wyzwalacza, aby utworzyć klucz obcy”, Twoim obecnym problemem jest to, że SELECT INTO nie może być używany w zapytaniach, które zwracają więcej niż jeden wynik.
SELECT 1 INTO has_row FROM teacher INNER JOIN content ON content.teacher_id=teacher.teacher_id; zwraca KAŻDE dopasowanie między dwoma tabelami.
Jeśli próbowałeś sprawdzić, czy teacher zawiera teacher_id wartość używana w nowej content rekord, powinieneś być w stanie całkowicie usunąć klauzulę JOIN i po prostu zapytać w ten sposób:
SELECT 1 INTO has_row FROM `teacher` WHERE `teacher_id` = NEW.`teacher_id`;