2011-10-05 6 views
1

에 필드를 업데이트 할 수 없습니다 나는이 MySQL의 테이블이MySQL을

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 | 
+0

이것을 MySQL 프롬프트에서 실행할 수 있으며 출력을 알려주십시오. 또는 PHP에서 echo mysql_info(); 와 mysql_affected_rows(); 나중에 출력을 알려주시겠습니까? –

+0

출력을 추가했습니다. – Alan

+0

dev 환경에서 테스트 한 쿼리가 프로덕션 환경에서와 다른 이유는 무엇입니까? dev에서 두 번째 쿼리를 실행하면 어떻게됩니까? –

답변

1

의 MyISAM은 어떤 DML (INSERT가, UPDATE, DELETE)에서 전체 테이블 잠금을 수행하는 null 값을 포함

비디오 테이블이 MyISAM 인 경우 1000 명이 실행하려고해도 한 사람 만 단일 DML 문을 실행하는 테이블에 대한 단독 쓰기 권한을 가질 수 있으므로이 문제를 해결해야합니다

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

InnoDB는 업데이트 할 데이터 주위에 MVCC을 수행합니다. the default is REPEATABLE-READ부터 1,000 명이 증가하기 전에 view_count에 동일한 값이 표시 될 수 있습니다. 따라서 DB Connection # 1이 view_count를 12로보고 증가 시키면 13이됩니다. 그러나 DB Connection # 2가 view_count를 12로 보는 경우 증가하고 13이됩니다 !!!

정확히 동일한 UPDATE 쿼리를 시도하는 여러 DB 연결을 기반으로 추측합니다.

+0

상기시켜 줘서 고마워하지만 그게 문제가 아니야. 나는 또 다른 쿼리를 시도했다 : "update'video' set view_count = 100 where id = 1", 내 생산 환경에서도 작동하지 않는다. – Alan

+0

MyISAM과 InnoDB를 모두 시도했다.둘 다 똑같은 문제가있다. – Alan

0

확인 VIEW_COUNT 아무튼 t

+0

view_count는 null 값이 아닙니다 – Alan