INNODBを使用している場合:
INNODBを使用している場合、行が挿入されたことを確認したので、SELECTが挿入された実際の行のキーを照会している限り、SELECTで返されるはずです。 (INSERT DELAYEDなどの機能を使用していないことを確認しますか?これにより、行が返されなくなる可能性があります。)
MYISAMを使用している場合:
MyISAMはトランザクションをサポートしていないため、SELECTは挿入を返す必要がありますが、これが実際に保証されていることを示すものは見つかりません。
注:以下にリストされている最初のURLは、MYISAM(このリンクによるデフォルト)を使用している場合、INSERTSがテーブルをロックすることを示しています。ただし、2番目のURLは、挿入によって配置されたロックが読み取り可能なロックであることを示しているため、テーブルの読み取りが妨げられることはありませんでした。
http://www.sitepoint.com/mysql-mistakes-php-developers/
http:// aarklondatabasetrivia .blogspot.com / 2009/04 / how-to-lock-and-unlock-tables-in-mysql.html
INNODBを使用している場合(続き):
- システムでAUTOCOMMITが使用されている場合(よくわかりません)、選択した行が表示されているはずです(この質問では、挿入された行がデータベースに追加されたことが確認されました)。
- トランザクションが使用中の場合、トランザクションはコミットされている必要があります(この質問では、挿入された行がデータベースに追加されたことが確認されたと述べています)。
最初に実行されるSELECTクエリは、2回目のクエリと同じですか?
よろしいですか$user['social_id']
INSERT後とSELECT時の値は同じですか?
- 挿入を実行しているセッションではなく、別のトランザクションに挿入された行を参照している場合は、次のURLを使用します。
http://blogs。 innodb.com/wp/2011/04/get-started-with-innodb-memcached-daemon-plugin/
「挿入されたばかりの行を見つけるには、「コミットされていない読み取り」を選択する必要があります:」と述べています。
I.E. set session TRANSACTION ISOLATION LEVEL read uncommited;
http://dev.mysql.com/doc/refman /5.0/en/set-transaction.html
(この機能は、使用しているMYSQLのバージョンによって異なる場合があります)
- 何らかの理由でINSERTDELAYEDを使用している場合、行が返されない可能性があります
注:このURLによると、トランザクションを開始した場合、選択された行は次のSELECTステートメントに表示されます(PHPではありません):
http://zetcode.com/databases/mysqltutorial/transactions/
このステートメントは、トランザクションを開始する場合、AUTOCOMMITを設定する必要がないことを意味します:
「MySQLは、トランザクションの一部ではないステートメントも自動的にコミットします。」
このURLは、PHPでトランザクションを開始する方法を説明しています: