Я хочу реализовать логику проверки NULL в MYSQL. Вот код:Как реализовать множественную транзакцию проверки NULL в mysql
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'
Передача 2 сообщит об ошибке ERROR 1062, когда передача 1 передана. Я хочу избежать ошибки, и я думаю, что это универсальный феномен проверки NULL в приложении.
Как реализовать множественную транзакцию проверки NULL в mysql правильно? Есть ли способ блокировать друг друга при использовании «select» sql в многократной трансакции?
спасибо.
обновление 2016.07.12
Я просто упрощать ситуацию, я встречаюсь с выше. На самом деле, у меня есть таблица похожа на
mysql> create table temp
(
id int NOT NULL AUTO_INCREMENT,
des varchar(100),
unique_id int,
primary key (id),
UNIQUE (unique_id)
);
И мои сделки
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'
Таким образом, первичный ключ AUTO_INCREMENT в моем реальном случае.
Привет, я редактирую и обновляю вопрос для получения более подробной информации – zhfkt
Я не уверен, что вы хотели бы сделать. Что такое «транзакция NULL check» в этом контексте? ** Когда вы пытаетесь сделать один и тот же первичный ключ во второй раз, каков ваш желаемый результат? ** – dotancohen
У меня просто есть webapp и есть страница регистрации пользователя. Когда пользователь хочет зарегистрировать имя пользователя, webapp проверяет, находится ли в базе данных одно и то же имя пользователя. «NULL check transaction» - проверить, указано ли указанное имя пользователя в базе данных. Я имитирую ситуацию выше, если два пользователя хотят зарегистрировать одно и то же имя пользователя в двух транзакциях. – zhfkt