MySQL is a PostRelationalDataBase management system. It is the canonical example of a successful commercial OpenSource product. This has been attributed primarily to the fact that it's DualLicensed.
Some also say it is devil spawn or a horrible piece of badly written software. It's very fast at low loads because it's hardly more than a glorified flat file database with an SQL interface, but that comes at the expense of any feature anyone would find useful (transactions, as one example). It sucks at large joins and has trouble handling tables with a few million rows in them.
If you want a relational DataBase, use PostgreSQL. You'll love yourself forever if you do.
See also PostgreSQL, PostgresVsMysql, DB2, Oracle
For a large portion of the new markets being created by MySQL, this advantage [easy to install while reasonably useful, Ed.] matters a lot more than missing features and poor ACID semantics. If this shocks you, then remember that MySQL is used for the InterNet-enabled version of what people used to use MicrosoftAccess for. Compare MySQL to Access on technical grounds -- who wins?
-- Ben Tilly in 20040629182643.8C4E33AA2A1@ws5-8.us4.outblaze.com
Loud jarring chord!
The door flies open and BillGates of Microsoft enters, flanked by two junior cardinals. Steve Ballmer has goggles pushed over his forehead. Sam Palmisano (IBM) is just an idiot.
GATES: Nobody expects the InfoWorld Article! The chief thing missing from MySQL is subselects...subselects and views...views and subselects.... The two things missing are views and subselects...and triggers.... The three things missing are views, subselects and triggers...and an almost fanatical devotion to row-level transactions.... The four... no... Amongst the things missing from MySQL ...are such elements as views, subselects.... I'll come in again.
Exit and exeunt
When should I use MySQL?
- When your primary concern is the speed of simple SELECT queries for few concurrent users. Even then PostgreSQL is getting much quicker at these.
When should I not use MySQL?
- When you think "It's only going to ever be a small web site...", and there's a chance it could grow into a big one. If at any point you think you might need to change to something else, start with that other system instead.
How can I lessen the impact of having to switch later on?
- Use PearDB in your PHP scripts, or DBI in your Perl scripts.
- DO NOT USE MYSQL'S RAND() FUNCTION, IT CAUSES YOUR DATABASE TO DISAPPEAR
- DO NOT LET MYSQL'S PARTITION FULL UP, IT CAUSES YOUR DATABASE TO CORRUPT
- DO NOT USE MYSQL UNDER LOAD, IT CAUSES YOUR DATABASE TO CORRUPT
- DON'T LOOK AT THE MYSQL SERVER IN THE WRONG TONE OF VOICE, IT CAUSES YOUR DATABASE TO CORRUPT