2010-05-15 7 views
2

если INSERT и SELECT выполняются одновременно в таблице mysql, которая будет первой?MySQL INSERT и SELECT Порядок приоритета

Пример: Предположим, что «пользователи» Количество строк таблицы 0.

Затем эти два запроса выполняются одновременно (предположим, что это в то же военослужащие/микро второй):

INSERT into users (id) values (1) 

и

SELECT COUNT(*) from users 

Будет ли последний запрос возвращать 0 или 1?

ответ

5

Зависит ли ваш стол users от MyISAM или InnoDB.

Если это MyISAM, то одно заявление или другое берет замок на столе, и вы можете сделать это немного, чтобы не допустить этого, кроме locking tables.

Если это InnoDB, это основано на транзакциях. Архитектура с несколькими версиями позволяет одновременный доступ к таблице, а SELECT будет видеть количество строк с момента начала ее транзакции. Если одновременно идет INSERT, то SELECT будет видеть 0 строк. На самом деле вы даже можете увидеть 0 строк по SELECT, выполненным через несколько секунд, если транзакция для INSERT еще не зафиксирована.

Невозможно начать две транзакции одновременно. Транзакции гарантированно имеют определенный порядок.

2

Это зависит от того, какой оператор будет выполнен первым. Если сначала второй будет возвращать 1, если второй выполнит первый, то он вернет 0. Даже вы выполняете их на компьютере с несколькими физическими ядрами и из-за механизма блокировки, они никогда не будут выполняться точно так же отметка времени.