2012-02-21 2 views
0

PHP mysql_insert_id과 동일한 것이 있습니까? 마지막으로 삽입 한 UUID() 기본 키를 가져 오시겠습니까? (나는 항상 0을 얻습니다.) auto_inc 정수에서는 작동합니다.MySQL의 UUID() 기본 키를위한 PHP mysql_insert_id()?

+1

불행히도 내가 있다고 생각하지 않습니다 –

+0

잘, 레거시 PHP 설치에 대한 중단 지원 ... PDO에는 이것에 대한 무언가가 있습니까? – ina

+0

"유산"은 어떻게 말하는거야? [Mysqli] (http://us.php.net/manual/en/book.mysqli.php)는 꽤 잘 지원됩니다. –

답변

0

아니요, last_insert_id()는 마지막으로 생성 된 auto_increment 필드 만 검색합니다. select uuid()을 먼저 수행 한 다음 해당 uuid를 사용하여 삽입을 수행해야합니다.

그러나 uuids가 고유하다고 보장 할 수는 없으므로 단순히 충돌 할 가능성이 거의 없습니다. 고유성이 필요하다면 auto_increment를 사용하십시오. 단일 테이블 내에서 결코 재사용되지 않습니다.

set @id=UUID(); 
insert into <table>(<col1>,<col2>) values (@id,'another value'); 
select @id; 
+1

다른 서버에 파쇄 할 때 auto_increment가 실패했다고 생각했기 때문에 UUID가 사용됩니까? – ina

+0

@ina 예, 샤딩 (다른 서버와 관계없이)은 파티션을 전환하면 auto_increment 오류가 발생할 수 있습니다. 그러나 테이블을 분할 ("분할") 할 때 PK는 실제로 파티션을 추가하는 열과 함께 auto_increment 값이됩니다. –

+0

나는 여전히 많은 시스템이 사용자의 기본 ID에 대해 UUID를 사용하는 이유를 이해하려고합니다. 데이터베이스가 다른 서버에서 확장 될 것으로 가정하고 UUID의 MAC 주소가 데이터가있는 서버를 결정하는 데 도움이되었다고 생각했습니다. 그러나 ID가 고유하고 확장 할 수 있다고 보장되는 경우 UUID를 사용하는 이유는 무엇입니까? – ina

0

나는이 매우 짧고 간단한 해결책을 찾아 냈다. 또한 mysql_ * 함수를 사용하지 말고 mysqli_ * 함수 나 PDO 객체를 대신 사용하십시오.