mysql – 是否可以一个接一个地INSERT然后选择插入的行?

我一个接一个地执行两个查询:一个是INSERT另一个是SELECT,它选择插入的行.

虽然行已成功插入(我可以在数据库中看到它),但是select查询无法返回该行.

当我再次执行SELECT查询时,它返回正确的结果.

插入:

    $stmt = $pdo->prepare('INSERT INTO user (id ,name, lastname ,birthday, social_type, social_id) VALUES(NULL, :name, :lastname, :birthday, :social_type, :social_id)');
    $success=$stmt->execute(array(
        ':name' => $user['name'],
        ':lastname' => $user['lastname'],
        ':birthday' => $user['birthday'],
        ':social_type' => $user['social_type'],
        ':social_id' => $user['social_id']      
    ));

选择

    $stmt = $pdo->prepare('SELECT * FROM user WHERE social_id = :social_id AND social_type = :social_type LIMIT 1');
    $stmt->execute(array(
        'social_id' => $user['social_id'],
        'social_type' => $user['social_type'] ));
    $result = $stmt->fetch(PDO::FETCH_ASSOC);

最佳答案 如果您使用INNODB:

如果您正在使用INNODB,因为您确认插入了行,它应该是
只要SELECT查询实际行的键,就返回SELECT
已插入. (你确定你没有使用像INSERT DELAYED这样的功能吗?那个
可能会阻止该行返回.)

如果您使用MYISAM:

由于MyISAM不支持事务,SELECT应该返回插入,但是我
找不到任何说明这实际上有保证的东西.

注意:下面列出的第一个URL表明您使用的是MYISAM(根据此链接的默认值),
INSERTS将锁定表格.但是,第二个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查询是否相同
作为第二次?

你确定$user [‘social_id’]是后面的相同值
INSERT和SELECT时?

如果您指的是在另一个事务中插入的行,而不是
在正在执行插入的会话中,然后此URL:

http://blogs.innodb.com/wp/2011/04/get-started-with-innodb-memcached-daemon-plugin/

陈述“你将需要做”读取未提交的“选择以找到刚刚插入的行:”

I.E.设置会话TRANSACTION ISOLATION LEVEL读取未提交;

http://dev.mysql.com/doc/refman/5.0/en/set-transaction.html

(此功能可能取决于正在使用的MYSQL版本)

如果由于某种原因,您使用INSERT DELAYED,则可能不会返回该行

笔记:
根据此URL,如果您已启动一个事务,则选择所选行
显示在下一个SELECT语句中(不在PHP中):

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

该陈述暗示如果您开始交易,则不需要
设置AUTOCOMMIT:

“MySQL还会自动提交不属于交易的语句.”

此URL描述了如何在PHP中启动事务:

PHP + MySQL transactions examples

点赞