2010-03-08 2 views
3

MySQL의 올바른 생성 방법입니까?MySQL의 id 시퀀스

INSERT INTO 사진 (PictureId, First_pick, 제목, 설명, FILE_NAME, Is_Vertical가) 가치
((최대 (pictureid) 사진 FROM +1), 0, SELECT?,?,?,?)

많은 스레드가이 쿼리를 실행할 때 PictureId가 고유하다는 것을 보장한다면 어떻게됩니까?

테이블 구조를 수정할 수 없습니다. 특정 잠금, 인덱스 또는 트랜잭션 격리 수준을 사용해야합니까? 나는에서 깊은 대답을 듣고 싶습니다, Manual

하지만 문제는 그럼에도 불구하고 좋은 :

감사합니다, 마이클

답변

3

당신은 일반적으로 당신을 위해 그 일을 돌볼 것 AUTO_INCREMENT 필드를 사용합니다 이것에 대한 MySQL의 전문가. 묘사 된 방식으로 그것을하는 것이 얼마나 신뢰할 수 있습니까?

+0

감사합니다. 내가 AUTO_INCREMENT에 대해 알고 있지만 차라리 테이블 구조를 수정하지 싶습니다. –

0

정말로 AUTO_INCREMENT를 사용할 수 없다면 테이블을 쓰기 위해 확실히 잠 가야합니다.

+0

내부 SELECT가 실행될 때 MySQL이 인덱스 잠금을 수행 할 수 있습니까? 이러한 쿼리는 하나의 트랜잭션에서 실행됩니다. (나는 InnoDB를 사용한다) –

2

다른 스레드가 액세스하지 못하게하여 문제를 일으킬 수있는 테이블을 적절하게 잠그지 않는 한, 여러 스레드가 동시에 레코드를 삽입하려고하면 제안 된 접근 방식이 경쟁 조건에 영향을받을 수 있습니다.