MYSQL에 NULL 확인 논리를 구현하고 싶습니다. 다음은 코드입니다.mysql에서 다중 NULL 확인 트랜잭션을 구현하는 방법
mysql> create table temp
(
id int,
des varchar(100),
primary key (id)
);
mysql> SELECT @@tx_isolation;
+-----------------+
| @@tx_isolation |
+-----------------+
| REPEATABLE-READ |
+-----------------+
mysql> start transcation;
mysql> select * from temp where id=0;
Empty set (0.03 sec)
mysql> insert temp (id,des) values(0,'0');
Query OK, 1 row affected (0.11 sec)
mysql> commit;
Query OK, 0 rows affected (0.02 sec)
잘 보입니다.
그러나 내 상황에 대해 동시에 여러 개의 NULL 확인 트랜잭션이 발생할 수 있습니다.
Trans 1: Trans 2:
mysql> start transaction; mysql> start transaction;
mysql> select * from temp where id=0;
Empty set (0.03 sec)
mysql> select * from temp where id=0;
Empty set (0.03 sec)
mysql> insert temp (id,des) values(0,'0');
Query OK, 1 row affected (0.11 sec)
mysql> insert temp (id,des) values(0,'0');
mysql> commit;
Query OK, 0 rows affected (0.02 sec)
--block and waiting for the Trans 1 commit;
ERROR 1062 (23000): Duplicate entry '0' for key 'PRIMARY'
Trans 2는 Trans 1이 커밋 될 때 ERROR 1062를보고합니다. 오류를 피하기 위해 응용 프로그램에서 NULL 검사라는 보편적 인 현상이라고 생각합니다.
mysql에서 다중 NULL 확인 트랜잭션을 올바르게 구현하는 방법은 무엇입니까? 다중 변환에서 "select"SQL을 사용할 때 서로를 차단할 수있는 방법이 있습니까?
감사합니다.
난 그냥 내가 위에서 만나 상황을 단순화 2016년 7월 12일
업데이트합니다. 사실, 내가 가진 표는
mysql> create table temp
(
id int NOT NULL AUTO_INCREMENT,
des varchar(100),
unique_id int,
primary key (id),
UNIQUE (unique_id)
);
비슷합니다 그리고 내 거래는 그래서 PRIMARY KEY 내 진짜 경우에 AUTO_INCREMENT는
Trans 1: Trans 2:
mysql> start transaction; mysql> start transaction;
mysql> select * from temp where unique_id=0;
Empty set (0.06 sec)
mysql> select * from temp where unique_id=0;
Empty set (0.02 sec)
mysql> insert temp(des,unique_id) values('0',0);
Query OK, 1 row affected (0.20 sec)
mysql> insert temp(des,unique_id) values('0',0);
mysql> commit;
Query OK, 0 rows affected (0.02 sec)
--block and waiting for the Trans 1 commit;
ERROR 1062 (23000): Duplicate entry '0' for key 'unique_id'
이다.
안녕하세요, 자세한 내용은 질문을 수정하고 업데이트하십시오. – zhfkt
나는 무엇을하고 싶은지 잘 모르겠습니다. 이 문맥에서 "NULL check transaction"이란 무엇입니까? ** 동일한 기본 키를 다시 커밋하려고하면 원하는 결과는 무엇입니까? ** – dotancohen
방금 webapp가 있으며 "사용자 등록 페이지"가 있습니다. 사용자가 사용자 이름을 등록하려고하면 webapp는 동일한 사용자 이름이 데이터베이스에 있는지 확인합니다. "NULL check transaction"은 지정된 사용자 이름이 데이터베이스에 있는지 확인하는 것입니다. 두 명의 사용자가 2 개의 트랜잭션에서 동일한 사용자 이름을 등록하려는 경우 위의 상황을 시뮬레이션합니다. – zhfkt