2011-03-11 5 views
2

좋아, 우리는 두 개의 행이 있다고 가정 해 봅시다 :mysql이 일부 데이터를 업데이트하지 못할 수도 있습니까?

member_id, name

하자 말을 member_id = 15 name = '존'을;

나는이 데이터를 업데이트 할 다음과 같은 쿼리를 수행

mysql_query("UPDATE members SET member_id = 14, name = 'Peter' WHERE member_id = 15

이것은 단지 예이지만, MySQL은 실패하고 예를 들어 이름 만 행에 대한 UPDATE 것이 가능하다. 따라서 위의 mysql_query를 완료하면 member_id = 15와 name = 'Peter'가됩니다.

이것은 단지 예입니다. 오늘날에도 비슷한 상황이 내 웹 사이트에서 발생했으며 코드를 백 번 확인했는데 오류가 발생하지 않았으며 오류가 전혀 발생하지 않았습니다.

코드를 백 번 다시 검사해야합니까?

대단히 감사합니다.

+1

** 'member_id = 14' ** 및'name ='Peter''가됩니다. 옳은? –

+0

member_id에 키가 있습니까 (그리고 중복 키를 업데이트 할 것입니까?)? – konsolenfreddy

+0

@ypercube : 예. @ 프레디 케이 : 그것은 단지 예일뿐입니다. –

답변

2

사양에 따르면 단일 UPDATE 문은 원자 적입니다. 즉, 모든 열을 업데이트하거나 열을 업데이트하지 않습니다.

아니요, 그렇게해서는 안됩니다. 물론 MySQL에 버그가있을 수 있습니다.

+0

고마워. 그것이 정말로 사실이라면, 나는 그것이 이전에 일어나지 않았고 단지 한 번만 일어났다는 것을 전혀 모른다. –

+0

오늘 전체 코드 수백 개를 확인한 결과 10 분이 지난 후에 오류가 발생한 부분을 마침내 발견했습니다. D Omg, 문제를 파악하는 것은 정말 멋지다. –

0

쿼리 후 or die(mysql_error());을 입력하면 실제로 발생하는 경우 최소한 알고있을 것입니다.

+0

그것은 한 번만 일어났습니다 - 오늘, 그 전에는 결코 같은 오류가 없었습니다. –

+0

@hey : 다시 일어날 때까지 나는 정말로 걱정하지 않을 것이다. (하지만 die();를 사용한다.) 모든 것이 끝난 후에 함정에 넣는다. –

0

나는 member_id = 15 및 name = 'Peter'가 될 수 없다고 생각합니다. 내가 볼 수있는 한 SQL 문법은 옳다. 데이터베이스에 문제가 발생하고 그 순간 쿼리가 실행되면 하나님은 일어날 일만 알고 있습니다. 그럼에도 불구하고 대부분의 경우 쿼리가 완전히 실행되거나 그렇지 않은 경우 mysql_query()false으로 반환됩니다. 이미 적어도 제안이 있다면 당신은 확인해야합니다

곳과 같은 코드 오류 당신이 온라인 비즈니스 웹 사이트에있는 경우 다음

mysql_query($sql) or die('An error occurred'); 

또는 당신이 경우 다음과 같은 디버그 모드 :

mysql_query($sql) or die(mysql_error()); 
0

단 하나의 행 업데이트가 원자 적이라고 확신하지는 않습니다. MySQL은 단일 테이블 UPDATE의 열 할당을 왼쪽에서 오른쪽으로 수행한다는 점에서 표준 SQL과 다릅니다. 즉 name = 'Peter' 전에 member_id = 14이 완료되었음을 의미합니다. name = 'Peter'이 제약 조건을 위반하거나 실패한 다른 업데이트를 트리거하면 해당 할당은 실패합니다. 그러나 문이 전체적으로 실패하는지 여부는 테이블이 트랜잭션 안전 엔진을 사용하는지 여부를 포함하여 다양한 요인에 따라 달라질 수 있습니다.

관련 문제