无法更新MySQL上的字段

时间:2011-10-05 17:13:37

标签: mysql

我有这个MySQL表:

video (id int, name varchar(30), view_count int)

我尝试在计算机上运行以下查询:

update `video` set view_count = view_count + 1 where id = 1;

工作正常。

但是,在将数据库移动到另一台服务器之后,上述更新查询有时会起作用,有时无法正常工作。它没有任何错误消息,但值不会改变。

我试图跑:

update `video` set name = 'testing', view_count = view_count + 1 where id = 1;

名称可以成功更新,但vide_count不会更改..

任何人都知道它是什么问题?

这是MySQL提示符的输出:

update `video` set view_count = view_count + 1 where id = 1;
Query OK, 1 row affected (0.13 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> show create table video \G;
*************************** 1. row ***************************
       Table: video
Create Table: CREATE TABLE `video` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `name` varchar(30) default NULL,
  `view_count` int(10) default NULL,
  PRIMARY KEY  (`id`),
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

mysql> select * from video;
| id | name      | view_count |
|  1 | ABC       | 8510    | 

2 个答案:

答案 0 :(得分:1)

MyISAM对任何DML执行完整的表锁定(INSERT,UPDATE,DELETE)

如果视频表是MyISAM,那应该解决这个问题,因为只允许一个人对执行单个DML语句的表具有独占写权限,即使有1000人试图执行

update `video` set name = 'testing', view_count = view_count + 1 where id = 1;

InnoDB围绕您要更新的任何数据执行MVCC。自the default is REPEATABLE-READ起,1000个人可能会在尝试增加view_count之前看到相同的值。因此,如果DB Connection#1将view_count视为12,则递增它,它应该是13.但是,如果DB Connection#2将view_count视为12,则它将增加它,并且再次为13!

请记住,我只是基于尝试完全相同的UPDATE查询的多个数据库连接进行推测。

答案 1 :(得分:0)

检查view_count是否包含空值