just brew it! wrote:
These days, MySQL has nothing less or more than Postgres or similar DBMS. I understand the line of reasoning as MySQL evolved too fast in too little time so a lot of folks still don't know about the current feature set (and still think that it's fast-but-loose, doesn't have ACID compliance, and so on), but that should be made clear.
I wasn't aware that they had ever added support for enforcement of referential integrity (e.g. foreign key constraints). Am I mistaken here?
I've looked at the versioning and can't tell you the exact date, but it's available for at least 7 years now, probably more.
Quick lowdown: MySQL supports several table types with their own storage engines, inner workings, and functionality. The default type, MyISAM, is old and busted. Available since the really early days, it's nowadays nearly irrelevant (IMO) and only still used because it's the default, or for historic reasons. It's pretty fast but lacks any type of transactional functionality, foreign keys, ACID compliance, etc.
The new official table type is InnoDB, which since very early on supported all of the above and more. It was somewhat slow in the early days but has massively improved over the years and is now the default table type in MySQL 5.5. Just about the only thing that it lacks (for general use) is fulltext search, and there are workarounds for that. Anyone with more than a passing knowledge of MySQL will use this table type. Moreover, there are even other storage engines available for more specialized operation modes: Archive, NDB Cluster, Falcon, etc.
The real issue is that IMO, it was a really boneheaded move to keep MyISAM as a default table type for so long. That alone contributed more than anything else to the perception that MySQL didn't support X or Y. Analogy: having this really cool OS that does everything, but is set to 80x25 text mode by default with very few available commands.