Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

É possível INSERT e depois SELECT a linha inserida uma após a outra?


SE VOCÊ ESTIVER USANDO INNODB:

Se você estiver usando o INNODB, já que verificou que a linha foi inserida, ela deveria ter sido retornada com o SELECT, desde que o SELECT estivesse consultando a chave da linha real que foi inserida. (Tem certeza de que não está usando um recurso como INSERT DELAYED? Isso pode impedir que a linha seja retornada.)

SE VOCÊ ESTIVER USANDO MYISAM:

Como o MyISAM não suporta transações, o SELECT deve retornar a inserção, mas não consigo encontrar nada que declare que isso é realmente garantido.

NOTA:O primeiro URL listado abaixo indica se você estiver usando MYISAM (o padrão de acordo com este link),INSERTS bloqueará a tabela. No entanto, a segunda URL afirma que o bloqueio colocado por uma inserção é um bloqueio legível, de modo que não deveria ter impedido a leitura da tabela.

http://www.sitepoint.com/mysql-mistakes-php-developers/

http://aarklondatabasetrivia .blogspot.com/2009/04/how-to-lock-and-unlock-tables-in-mysql.html

SE VOCÊ ESTIVER USANDO INNODB (CONTINUAÇÃO):


    Se AUTOCOMMIT estiver em uso em seu sistema (não tenho certeza) você deve ter visto a linha selecionada (esta pergunta afirma que a linha inserida foi verificada como tendo sido adicionada ao banco de dados).


    Se uma transação estiver em uso, a transação deve ter sido confirmada (esta pergunta afirma que a linha inserida foi verificada como tendo sido adicionada ao banco de dados).
    Tem certeza de que a consulta SELECT executada na primeira vez é a mesma da segunda vez?

    Tem certeza $user['social_id'] é o mesmo valor após o INSERT e no momento do SELECT?




    Se, por algum motivo, você estiver usando INSERT DELAYED, a linha pode não ser retornada



NOTAS:De acordo com esta URL, SE você iniciou uma transação, as linhas selecionadas são mostradas na próxima instrução SELECT (não em PHP):

http://zetcode.com/databases/mysqltutorial/transactions/

Esta declaração implica que se você iniciar uma transação, você não precisa definir AUTOCOMMIT:

"O MySQL também confirma automaticamente as instruções que não fazem parte de uma transação."

Este URL descreve como iniciar uma transação em PHP:

Exemplos de transações PHP + MySQL