MySQL 视图在不同用户之间分层表更改时不会更新



我已经搜索过了,似乎找不到任何东西。

情况如下:

  • t1 = 表 1
  • t2 = 表 2
  • v = 表 1 和表 2 连接的视图

1.) 用户 1 登录到数据库。SELECT * FROM v ;

2.) 用户 2 登录到同一数据库并执行INSERT INTO t1 VALUES(1, 2, 3);

3.) 用户 1 执行另一个SELECT * FROM v;用户 1 在注销并重新登录之前看不到用户 2 插入的行。

似乎视图无法在"会话"之间同步?如何使用户 1 可以看到插入?

仅供参考,我正在使用python和mysqldb。

用户 2 可以简单地提交其事务,而不是注销并重新登录。

MySQL InnoDB表使用事务,需要在一个或多个SQL语句之前进行BEGIN,之后需要COMMIT或ROLLBACK,从而导致所有更新/插入/删除发生或不发生。但是有一个"功能",如果未显式发出,则会导致自动 BEGIN,并在连接关闭时自动提交。这就是您在其他用户关闭连接后看到更改的原因。

你真的应该养成显式开始和提交事务的习惯,但还有另一种方法:set connection.autocommit = True,这将导致每个sql更新/插入/删除都包装在它自己的隐式事务中,从而导致你最初预期的行为。

不要认为我上面所说的完全是正确的,但它足以解释正在发生的事情的基本原理以及如何控制它。

它与使用 MySQL UPDATE 命令有关吗?http://dev.mysql.com/doc/refman/5.0/en/update.html

最新更新