On 5/9/2012 6:17 AM, Johan De Meersman wrote:
----- Original Message -----

From: "Claudio Nanni"<claudio.na...@gmail.com>

Yes indeed,
but I think we are talking about MySQL level deadlocks,
that can happen only with row level locking and transactions.
If the deadlock is generated at application level then you can have
it on anything, also blackhole :-)
Yup, but you don't know where the lock comes from, so that's possible.

However, I just checked the documentation, and he *is* right after all: MySQL 
claims to be deadlock-free for table-locking engines, they simply lock all 
tables at once (I suppose that means any lock statement will invalidate the 
previous one) and always lock tables in the same order.


Actually, we do not lock all tables at the same time. Each table is locked as it is needed by the connection that needs it.

As long as this is an implicit lock (created by the SQL command to be executed) and not a lock held by an explicit LOCK command then there is no way for any two connections to deadlock on a MyISAM (or another non-transactional table). It is only when a lock extends beyond the single-object scenario that makes a deadlock is possible. As each statement against a MyISAM table generally only needs to lock one object (the table) no two MySQL-based statements can deadlock. Even in those cases where one statement uses two objects (such as a INSERT...SELECT... or multi-table UPDATE command) the lock prioritization process for MyISAM prevents any two threads from cross-locking at the same time.

--
Shawn Green
MySQL Principal Technical Support Engineer
Oracle USA, Inc. - Hardware and Software, Engineered to Work Together.
Office: Blountville, TN

--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/mysql

Reply via email to