Um dos grandes problemas que costumo ver no MySQL é o seguinte: “Quero inserir um registro em uma tabela, recuperar o ID que foi gerado pelo AUTO_INCREMENT e inserir registros em outras tabelas.”
Vejo por aí muitas soluções,  algumas interessantes e outras grandes gambiarras.
Esqueça MAX() +1 , ORDER BY chave DESC LIMIT 1, SHOW TABLE STATUS, entre outros…

Segue abaixo uma das melhores formas para se fazer isso:

1 INSERT INTO tabela (chave_primaria, coluna1, coluna2) VALUES (null, aaa, bbb);
2 SELECT LAST_INSERT_ID() INTO @ID;
3 INSERT INTO outratabela (chave_estrangeira, coluna3, coluna4) VALUES (@id, xxx, yyy);
4 INSERT INTO outratabela (chave_estrangeira, coluna3, coluna4) VALUES (@id, www, zzz);
5 INSERT INTO outratabela (chave_estrangeira, coluna3, coluna4) VALUES (@id, uuu, iiii);

Desta forma você tem 100% de eficiência na recuperação do ID, não tendo problemas em capturar um ID recém-inserido por outro usuário. Com LAST_INSERT_ID() você estará recuperando sempre o último ID gerado pela sua sessão.

Se você estiver usando INNODB engine, ainda pode trabalhar com transações adicionando os comandos START TRANSACTION e COMMIT para ter total integridade dos dados.

Muitas pessoas tentam rodar triggers pelo phpMyAdmin e recebem um erro de sintaxe.
Tudo levar a crer que o phpMyAdmin não suporta triggers, mas não é bem assim.
O que ocorre é que o delimitador (separador de comandos) padrão do phpMyAdmin ou até mesmo do console do MySQL é o ponto e vírgula “;”
A sintaxe da trigger também possui ponto e vírgula “;” então quando você executa uma trigger, o phpMyAdmin acredita que você está enviando diversas instruções SQL, assim seu bloco de comando é interrompido no meio do caminho acusando erro de sintaxe.

Para resolver isto é simples, basta alterar o delimitador em tempo de execução.
Por exemplo:

DELIMITER $$ — Seta novo delimitador

DROP TRIGGER IF EXISTS teste $$ — Essa é uma instrução SQL
CREATE TRIGGER teste BEFORE DELETE ON tabela
FOR EACH ROW
BEGIN
COMANDO1;
COMANDO2;
COMANDO3;
END$$ — Essa é outra instrução SQL

DELIMITER ; — Volto ao delimitador padrão

Outra opção ainda mais fácil, é utilizar a aba “SQL” do phpMyAdmin e alterar o campo “Delimitador”.
Lembrando que o MySQL introduziu trigger a partir da versão 5.0, caso sua versão seja inferior não funcionará.