2017-11-20 10 views
0

우리는 MySQL 데이터에 이상한 문제가 있습니다. id의 현재 seq를 보유하는 seqgenerator 테이블이 있습니다. 주문이있을 때마다 응용 프로그램은 seqgenerator 테이블을 쿼리하고 하나의 숫자를 업데이트 한 다음 seqgenerator에 다시 저장합니다.MySQL과 JDBC가 오래된 데이터를 반환했습니다

우리가 가져 오는 데 사용하는 쿼리는 "order_seq에서 order_id를 선택하십시오. 여기서, 업데이트를 위해 appid =?" 업데이트 쿼리 "update order_seq set order_id =? where appid =?"를 업데이트합니다.

지난 주까지 이미 잘 돌아가고있었습니다. 지난 주에 이미 select 쿼리가 이미 사용 된 id를 반환했으며 id가 재설정되어 1 일 명령보다 우선 적용되기 시작했습니다.

+0

는 소리. ID 재사용으로 인해 데이터가 손상되는 것을 막는 것은 쉽지 않습니다. 즉시 실패해야합니다. – Kayaman

+0

나는 그것이 코딩에 실수 였음에 동의한다. 우리는 nosql 데이터베이스에서 id를 사용하고 있으며, 엔지니어는 코딩 스타일을 저장하거나 업데이트하는 데 실수로 사용했다. 우리는 어쨌든 그것을 고치고 있습니다. 하지만 mysql이 id를 갑자기 재설정 한 방법을 알고 싶습니다. – sathishyellanty

답변

1

귀하의 디자인은 매우 좋지 않습니다.

먼저 Id는 항상 고유해야합니다. 이렇게하면 데이터를 덮어 쓰지 못하게됩니다. 당신이 때마다 하나

자동 증가를 사용자의 ID를 업데이트 할 필요가 없습니다

또한 SQL은 새 레코드 인 경우 고유 번호가 자동으로 을 생성 할 수 있으며, 자동 증가 필드가 테이블에 삽입.

종종 이것은 우리가하고자하는 기본 키 필드가 자동으로 새 레코드를

를 삽입 할 때마다 을 생성하는 것입니다 출처 : 당신의 디자인이 너무 나쁘다처럼 https://www.w3schools.com/sql/sql_autoincrement.asp

+1

그리고'ID' 문자열을 사용하고 있다면 java.util.UUID.randomUUID(). toString()을 사용하여 java에서 고유 한 ID를 생성 할 수 있습니다. – cdaiga

+0

생성 된 ID를 사용하여 no sql 데이터베이스에 저장하기 때문에 자동 증가가 불가능합니다. 우리는 쿼리에서 "for update"를 사용 했음에도 불구하고 mysql이 어떻게 이전 데이터를 반환했는지 확인하고 싶습니다. – sathishyellanty

+0

@ sathishyellanty 올바른 거래 처리를 사용하고 있습니까? – Kayaman