当基础表在不同用户之间发生更改时,MySQL视图不会更新

时间:2012-08-16 00:51:49

标签: python mysql mysql-python

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

情况如下:

  • 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可以看到INSERT?

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

2 个答案:

答案 0 :(得分:1)

用户2可以简单地提交他们的交易,而不是注销并重新登录。

MySQL InnoDB表使用事务,在一个或多个SQL语句之前需要BEGIN,之后需要COMMIT或ROLLBACK,导致所有更新/插入/删除都发生。但是有一个“功能”,如果没有明确发出,会导致自动BEGIN,并在连接关闭时产生自动COMMIT。这就是您在其他用户关闭连接后看到更改的原因。

你应该养成明确开始和提交事务的习惯,但还有另一种方法:set connection.autocommit = True,这将导致每个sql update / insert / delete被包装在它自己的隐式事务中,导致您最初期望的行为。

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

答案 1 :(得分:0)

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