Making changes to a table definition causes a temporary copy of the table to be created. If you have a very large table, that could be a problem.
Hanging up on a long running query doesn’t stop it. If one of your queries goes broken arrow, you have to use mysqladmin to shut it down.
Chu has this to say:
I work extensively with MySQL and there are times when I wish for stuff like referential integrity (available with InnoDB tables, but most hosts don’t provide it) so I don’t have to code constraint checks in the application.
[…] And after reading [these MySQL gotchas], I’ll never trust what MySQL does to my data again (silently change my data would you, mysqld?
This is definitely stuff that you need to keep in mind when you’re writing apps that use MySQL. While it’s not always feasible, it’s always smart to code your apps to be able to use multiple storage mechanisms. I don’t completely follow with Chu’s take, though, that MySQL can’t be trusted. You just have to know what it is you’re dealing with when you start using it. Some of the MySQL folks will tell you that MySQL is great for everything. Nothing is great for everything.