15.3.4.1 Corrupted MyISAM Tables

Even though the MyISAM table format is very
reliable (all changes to a table made by an SQL statement are
written before the statement returns), you can still get
corrupted tables if any of the following events occur:

If your tables become corrupted frequently, you should try to
determine why this is happening. The most important thing to
know is whether the table became corrupted as a result of a
server crash. You can verify this easily by looking for a recent
restarted mysqld message in the error log. If
there is such a message, it is likely that table corruption is a
result of the server dying. Otherwise, corruption may have
occurred during normal operation. This is a bug. You should try
to create a reproducible test case that demonstrates the
problem. See Section B.5.4.2, “What to Do If MySQL Keeps Crashing”, and
Section 24.4, “Debugging and Porting MySQL”.

I ran into a case where a large myiasm table threw the above error when it was included inside a transaction (by mistake) along with other innoDB tables. A bunch of mass deletes were taking place, and the operation always ended with the table corrupted. A quick conversion to innoDB solved the problem:

When You are using a trigger (or triggers) with Your MyISAM tables they may be "unrepairable" when they become corrupted. In such a case, You should physically delete all trigger files from database directory (eventually run DROP TRIGGER command), then run REPAIR statement and finally define Your trigger again.