MySQL Database Design and Optimization
This book focuses on MySQL 4.0/4.1 but also gives consideration to v.3.23 users as well as a nod toward v.5. The layout of each chapter gives a description of the topic of the chapter, followed by the meat of the chapter, a summary and what's next (how the context of this chapter ties into the subject of the next). There are numerous "notes", cautionary flags, tips, screen shots, code examples as well as thoughts from each author that provide explanatory asides to the content. The authors also provide references to other volumes, as needed.
A glance through the table of contents will give the reader a precise overview of what to expect in this book: Review of MySQL Basics; MySQL Column and Table Types; Keys, Indexes and Normalization; Optimizing Queries With Operators, Branching and Functions; Joins, Temporary Tables and Transactions; Finding the Bottlenecks, MySQL Programming; and Looking Ahead.
Chapter 1: Review of MySQL Basics gives a very quick (under 50 pages) summary of how to connect to the MySQL server; MySQL's identifiers and naming conventions for databases, tables and columns; a review of MySQL's syntax, writing basic queries and using basic commands (create, drop, select, insert, update, delete); and a discussion of the use of table, column and expression aliases. This section, while adequate, is clearly intended as an analysis of core information necessary to proceed to further chapters.
Chapter 2 follows with MySQL Column and Table Types, which deal with datatypes and structures used to store the data. The goal here is to help the reader design effective tables (and therefore create a well-designed and efficient database) suited to the particular type of data at hand. Numeric types are covered in depth; strings, the null value, ENUM and SET are also addressed as well as common "gotchas" and developer errors.
Keys, Indexes and Normalization come naturally in Chapter 3, with optimal data handling the goal: the chapter addresses getting data in efficiently and getting the results out efficiently, eliminating redundant data, appropriate uses of indexes and common index creation errors.
The core of the book is clearly Chapter 4, "Optimizing Queries with Operators, Branching, and Functions." Here, optimization skills are honed; manipulation and filtering of data is one of MySQL's strengths and this chapter shows the reader how to replace less-than-ideal program logic with SQL constructs to precisely adjust query performance. There's a good demonstration here of outputting a list of member data to a web page. The ultimate goal in this chapter is to provide the reader good skills that translate into better efficiency and faster database interaction. As the authors point out, one obvious logical consequence of this is easier migration between platforms and programming languages.
The next reasonable step is to look at additional features that MySQL has up its sleeve that will save the developer time and effort in the overall scheme of application development. Chapter 5, "Joins, Temporary Tables, and Transactions" discusses three of these additional features. The authors carefully point out that each of these eliminate excess queries needed to pull data, decrease code overhead, minimize the need to store data as application logic, decrease the number of bugs that appear in code and help guarantee data integrity (an aspect of database design that unfortunately often takes a back seat to other priorities as developers are often not concerned with the validity of data in a real world sense; i.e. from the user's perspective).
Chapter 6, "Finding the Bottlenecks," addresses modifying system configuration variables outside of the default and how these can dramatically affect performance. The authors look at some available free tools that help monitor server performance and enable configuration changes including mytop, WinMySqlAdmin, phpMyAdmin and the new MySQL Administrator (available from MySQL AB). MySQL caching capabilities and the ability to decrease repetitious read/writes to disk (good table, key and query caching within MySQL) are discussed. Finally, database interoperability and abstraction layers are mentioned in terms of performance penalties vs. making life easier for the programmer.
MySQL Programming is the topic of Chapter 7, where a very good discussion of the MySQL API is provided. There are a lot of useful examples in this chapter covering many of the common MySQL APIs available (PHP's MySQL and MySQLi, Pythons's MySQLdb, ODBC, Perl's DBI), along with feature discussions and examples.
The final chapter, "Looking Ahead," examines MySQL v.4.1, 5.0 and 5.1 and some eagerly awaited new features, including stored procedures, stored functions, views and triggers.
This is a well-rounded volume on MySQL design. There are excellent examples and the flow of the text is conversational without being rambling and unstructured. The authors have obviously taken great pains to minimize tangents and extraneous information; pithy, but with sufficient detail in mind. The reader is left with neither the sense of being overwhelmed nor longing for an explanation for a glossed-over topic. This book is pretty much a "must have" for a MySQL programmer looking to bridge the gap between novice and professional.
You can purchase Beginning MySQL Database Design and Optimization from bn.com. Slashdot welcomes readers' book reviews -- to see your own review here, read the book review guidelines, then visit the submission page.
Long live PostgreSQL. I am just being a mature /.er
"MySQL isn't a real database so this book makes no sense" comment here.
I'm NAKED and FAMOUS!!!
...SQL Performance Tuning is an excellent book. It has a lot of good discussion on when to use certain SQL contructs and how to check your database to ensure you're actually getting improvements.
PLUG: Which SQL queries are taking the most time? PQA home page, download.
The Army reading list
...only old people use MySQL
No, old people use MDBS -- an extended network model database.
Fight Spammers!
right here
___
If you think big enough, you'll never have to do it.
This is a dupe you fucking piece of shit terrorist!
...In Korea only old people use databases comment here...
I know this is kinda off topic, but it is kinda about optimizing MySQL, but I deleted 60% of the rows in a 60MB MySQL table on my webhost and the size hasn't changed. Is there some command to "pack" the space?
OPTIMIZE TABLE `tablename`
h tml
or you can look here
http://dev.mysql.com/doc/mysql/en/OPTIMIZE_TABLE.
The RFDs (Request for Discussions) for both PostgreSQL and MySQL are on news.group. In about one month, both groups will be voted on, if it passes, the groups will be found under comp.databases.*.
& Su rveyID=36
If you want more information, visit news.groups with your usenet server.
Right now, there aren't ANY postgresql or mysql groups under the big 8 comp. domain.
Remember to stay tuned for the CFV so they get voted into the domain! Here is a nice web poll you can take to voice your support of the groups getting into the big 8 usenet hierarchy:
http://scripts.postgresql.org/survey.php?View=1
Vote yes, so they know there is support for a big 8 comp.databases.postgresql newsgroup as one does not exist yet!
If you are in the UK you can get the book here for 10% off and free delivery up to Dec 25th :)
A few are floating around for £20 as well.
Insert "MySQL isn't a real database so this book makes no sense" comment here.
INSERT INTO mysql_sucks (comment) VALUES ('MySQL isn't a real database so this book makes no sense');
I'm sure "SlashdotMedia" will improve on all the wonders that Dice Holdings blessed us all with
I just checked it out on my usenet server, and it is true. There are NO MySQL and Postgresql groups in the comp.databases.* hierarchy on usenet.
I would recommend anyone who uses these databases to stay tuned to news.groups and find out how to vote for the creation of these groups on usenet. The result would be the creation of the following groups:
comp.databases.mysql
comp.databases.postgresql
SELECT fldDatabase FROM tblPEOPLE WHERE fldAGE = "OLD" AND fldKOREAN = TRUE;
RESULT (1 row)
MySQL
Know what I like about atheists? I've yet to meet one that believes God is on their side.
escaping is good.
MySQL only uses old people!
Don't you want to start with just database design and SQL before you would want to move to a book about a specific RDBC implementation? If it is just about database design then the title of the book is wrong.
Then again, if you wish to explain about setting up the database itself, access rights and so on, then the book might be for beginners. Once again, the title would not fit the book.
As anyone should know, the steps in software development are: get it working, get it right, get it optimized. Let's hope that the book does not go to deep into the optimized part in a too early stage.
I've been doing the PHP/SQL thing for money for a while now, and I've been able to meet all my needs so far. I've taken a peek at Postgres, but I haven't found a good explanation and usage examples for some of the features that mysql lacks. I understand nested queries, transactions, and foreign keys, however I haven't found anything that helps me understand stored procedures, views, or triggers.
Computers are useless. They can only give you answers.
-- Pablo Picasso
Seriously, is there any other reason for these MySQL book reviews? They all sound the same, and who buys books on MySQL optimization anyway? The manual and 'EXPLAIN' should be enough for anyway.
Enough ranting, continue your too-highly-moderated offtopic flamewars.
"'Yrch!' said Legolas, falling into his own tongue."
How is this a rant? Are you saying the problems they list don't exist?
I like that site cause it contains no spin: it just lists the facts and provides references to the documentation. Is it the facts that bother you?
___
If you think big enough, you'll never have to do it.
Actually that's not true, subqueries are available in 4.1 They should have been there all along, but hey you can use them now, so no worries.
Nice review, but if the book is not from O'Reilly, I probably won't buy it.
...Install PostgreSQL
ZERO
It's unfortunate that your comment got modded up, since it makes a claim that isn't true.
I use MySQL in maybe 60% of my projects, and I have been bitten by a majority of those issues. MySQL has some serious problems as an SQL-compliant database (let alone as a *relational* database), and that site simply points them out in an objective manner. In fact he says they aren't bugs or mistakes, but *documented, yet unexpected, behavior*.
I would recommend anyone who is using MySQL (by choice or otherwise) to read and understand that article (and keep in mind some of those problems have been fixed, which he points out).
Also, as a general comment about the closing sentence of your post, have you considered that some pieces of software might be better than others? Or one piece of software might adhere more closely to a standard than another? These are all topics worth discussion.
LOL. He also claims to be a "VB expert". Sigh...slashdolt, news for newbies. Move along, nothing to see for us real experts who don't fuck with crap like mysql or vb.
I have started a company and am in the process of putting my precious mission critical data in a MySQL database. RAID 1 is used to prevent loss of data, and apart from that DVDs will be burnt using the superdrive.
My database app is low volume data traffic to/from the db.
Can anyone tell me where MySQL fails when it comes to mission critical stuff? I'm very eager to find out.
Bert
oops I actually stumbled on your *cute* webpage and this sql stuff has gotten me sooo hottttt....
How true. For instance, emacs is a much better piece of software than vi.
taken! (by Davidleeroth) Thanks Bingo Foo!
I just assumed that it congealed in a gutter somewhere.
Experienced users will find quite a lot of valuable information that will extend their existing knowledge base.
Experienced users.. MySQL .. Experienced users... MySQL .. man, talk about cognitive dissonance!!
I guess some experienced users are stuck *maintaining* MySQL databases so maybe that's what he's talking about..
What would be nice is a book review (and book) showing developers the best practices to PHP and Pear DB development so that PHP programmers can create apps that are SQL database agnostic -- i.e. can have a MySQL or PostgreSQL backend without much code change in PHP. A mere change in the PHP line telling it what server, where, and login will only be required. I'm sure this book is probably already written, anyone care to point me where?
Linux at home
INSERT INTO mysql_sucks (comment) VALUES ('MySQL isn't a real database so this book makes no sense');
Are you sure MySQL could handle such a complicated procedure?
MySQL runs on Windows
Postgres it is then. Thanks for the tip.
Okay, why?
In the database world, there is a solid, underlying foundation: relational theory. This was developed, what, 30 years ago? It has *provable* characteristics.
So when you want a database, pick the one that has the most of those characteristics. Unfortunately, most folks seem to think it's Emacs vs. vi. Just pick the one that "feels" better, or that they learned first. That's fine for text editors, but not, say, for the foundation of a mission-critical finance system.
And Vim is better than either..
You make a good point. From now on I will not program in C++ until I find an open source compiler that respects the export keyword.
I've used MySQL for years in very high volume, large scale, distributed "mission critical" applications (if you call running your whole company "mission critical"). Not once has the database failed to perform it's job. Networking, Hard Disks, Memory, etc... They all failed. It's funny to read all the self described "experts" on here rip the product when the list of household names successfully and reliably using it on a daily basis is long and distinguished (like my johnson).
I've found FireBird to be an excellent choice for better ANSI SQL compliance, support for ACID transactions, single-file database portable across platforms, etc. It's also one of the easiest to administer that I've come across. I like that the embedded version is a single shared libary that implements the client API. I've not used it for a truly large database. I've used DB2, Oracle, SQL Server (the only database I've used that became corrupted and lost production data) and Informix.
As for MySQL, the lack of transactions and poor support for SQL has put me off it for real projects (no subqueries--life's too short).
Database design should be a generic RDBMS book for the most part. It does not make much sense to repeat table design techniques and philosophy for each RDBMS product. (However, giving vendor-specific tips and limits is understandable.) It might be cheaper to purchase and write a generic book about table design because it can be written and printed for multiple products. Then again, many publishers simply copy-and-paste semi-generic topics with slight custom tuning.
Table-ized A.I.
Views, synonyms and referential integrity (foreign key constraints) would be very nice too.
When I find out why VHS became more popular than technically superior Betamax, I'll figure out why Mysql is more popular than Postgres.
In such a scenario, I'd have to say mySQL isn't really there. MySQL is a terrific solution for all kinds of web publishing / application needs. But if finances are at stake, you gotta go with a product where you can sue someone over stuff that goes wrong.
$5 / month hosted VPS on linux = awesome!
Bert-
Honestly, use PostgreSQL if you need a SQL database. There are a ton of reasons not to use MySQL, especially for M.C. data. I ship a product that supports nearly every db known to man (PostgreSQL, DB2, SQL Server (MS & Sybase), Sybase SQL Anywhere, Oracle, NCR Teradata, Informix, SAP DB) but we will not support MySQL anytime soon. Data corruption problems, lack of referential integrity, no triggers, no views, no synonyms, no stored procedures, these aren't things that are optional for a modern database. If you don't need any of that, do yourself a favor and use Berkley DB.
No wonder I can't find useful answers for mysql questions!
"Evil thrives when good men do nothing"
... more like a boxer playing chess
----
Not to be confused with Col.
Face it, if you want to write commercial apps you have to CHOOSE.
I worked in a _HUGE_ database project and it was slow as hell because we couldn't use native solutions for optimization, because we were required to maintain code compatibility. They had licensed Informix, and we got to maintain it compatible (to justify a gazillion dollars investment in an already obsolete DB).
So, want to use Limit? No thanks. Want to find out the thread ID's? No thanks. Want to improve performance by using native mySQL functions? No thanks. Named locks? logic functions inside queries? etc etc...
I use phplib DB_SQL to keep layers separation. Frankly, if you want to be 100% "neutral" you would end up using only the most basic features of SQL (select... from... where. ta-da!), and that's useless.
Let the other guys handle SQL adaptation when the business decides to adopt another implementation. Still, if you code multi-tier you won't have much problem there. I see multi-tier programming having many more advantages than simply maintaining SQL neutrality.
Yes, subqueries make the programmer's life a LOT easier. But IMHO using joins works in most cases. There's a little problem, it requires a perfect understanding of how they work, or you'd get in trouble. Also, I've read that joins is generally more efficient than doing subqueries.
Oh yes, I'm using MySQL 4.0x and it has unions, too.
If everything else fails, use temporary tables.
Seems to me as if people always thought of MySQL 3.23. InnoDB is supplied with MySQL 4, and it's A.C.I.D. compliant.
Problem is, very few people use it because they don't know it (InnoDB is relatively new, 2 years ago we didn't have MySQL 4).
yo dadda sucks my ass
Chernobyl 'not a wildlife haven' - BBC News
MySQL is popular because it is good. It's simple to install, the C client is probably the most straightforward in an RDBMS, it's reliable, and it performs well enough for many small to midsize web sites. Is it an Oracle? Well, no, but, then again, not everyone needs a 400hp car and not everyone needs a 20k database server!
This is my sig.
Can I use this database as a replacement for large databases, such as Oracle Databases?
I do understand stored procedures, views and triggers, but I don't understand foreign keys !... may be I missing some chapters in the book !
Betamax had higher image quality, but paid the price by having shorter run time on each tape. VHS became more popular because it's longer two hour run time allowed a user to fit an entire movie on the tape.
I think this is directly applicable to the MySQL vs. PostgreSQL debate because for a very long time MySQL has been available and easy to use on Windows and on other platforms. PostgreSQL has not been available on Windows except through the use of Cygwin with problems.
In both cases its about fitting user's (especially novice users) needs.
MySQL's behavior is erratic in that it is e.g. incredibly incosisitent when it comes to NULL-related behavior. Just admit it and move on with your life, you'll be a happier person.
One post hardly consitutes carpet bombing. In fact, the only single person I see prolonging this thread (by responing to these so-called "anti-MySQL" people as you like to label them) is you.
I, for one, am happy that I know about that page in case I ever decide to deploy MySQL for anything. Much of the documented behavior is downright scary and absolutely necessary to know about if you care about correctness at all.
HAND.
So, you've been lucky to not hit those cases or you just haven't been doing enough testing to notice the problems. Even so: One anecdote does not equal universal truth, dumbass.
The lack of referential integrity means you cannot guarantee the state of the data in the database, unless you run a whole bunch of queries to check.
If there is only one way to get data in, through one application that can enforce the integrity on entry, and check it on retrieval, you may be OK. As long as you know nobody will ever be updating it directly in the database.
Grandparent: and apart from that DVDs will be burnt using the superdrive.
Parent: If there is only one way to get data in, through one application that can enforce the integrity on entry, and check it on retrieval, you may be OK.
Sounds like you have two routes to your data right there, whatever application does the updating *and* mysql_dump (or whatever it is called that does the backups) Ask yourself, is there any moment in my application I do not want a backup to be made? The correct use of transactions should ensure there is not. Running backups at night is a proven unseccesfull sollution to this ;-) Just a side note, your application threatsafty should be perfect to trust you application for data integrity control. It is just as close to perfect as your database system code right?
Postgresql isn`t the only free as in speech alternative, there is sap-db as well which even has a lot of oracle compatibility features.
Hi, I'm one of the authors of the book.
:)
1. Thanks to Mary for the positive review.
2. Thanks to Mike Hillyer for his invaluable help with the book. Say what you like about Visual Basic (I happen to loathe it, myself), Mike's an excellent programmer, and his knowledge of MySQL is superb. In fact, part of the way through the process of writing this book, he was hired by MySQL AB to work with the teams developing the Connectors and the new GUI tools. His site VBMySQL.com provides a valuable and unique resource for VB and other Windows developers wanting to build DB applications who'd like to use an actual database instead of Access and don't feel like condemning themselves or their users to paying for SQL Server. Rather than flame him for his language and platform choices, you should commend him for introducing many Windows programmers to an Open Source technology. (BTW, you might be interested in knowing that he also uses Linux and programs in C++ as well.) It was a privilege to have him work on the book with us, and it's a privilege to work with him now at MySQL AB. And he's a damn good writer.
3. We wrote the book because there's a lot of MySQL installations out there, and a lot of very badly done MySQL databases. Granted, there are some things that MySQl isn't (yet). But it is fast and stable -- or can be. And it's certainly possible to throw those advantages away through poor DB and application design by people who don't know the difference between a database and a spreadsheet or who don't know how to leverage SQL to do their heavy lifting for them. We chose not to spend a great deal of time with enforcing foreign keys because a great many administrators are still running MySQL 3.23 and don't bother to make InnoDB available. Besides, if you expect people to understand key constraints, you have to get them to normalise first, and many devs don't even do that.
4. We wanted to encourage PHP developers to make the transition to ext/mysqli as soon as possible.
5. I don't know what other people may have experienced with Apress, but they've been damned nice to me, and I can tell you that Gary Cornell does answer his email, even when it comes from a lowly writer who's not yet even signed a contract. Speaking of which -- their contracts are much better than Wrox' or Wiley's. And since I've been associated with them, they've dumped at least one bad editor and another one that I'd heard some not-so-favourable things about.
6. While we didn't cover this in the book, fans of Postgres might wish to take note: We already have a working Cluster implementation, and we're anxious to see what yours will look like.
Il n'y a pas de Planet B.
Make sure you don't take that backup while anyone is using the database. The lack of ACID means that you could back up half an update and make your backup useless.
(Also make sure you don't try to do this as a live filesystem backup, regardless of what DB you're using, unless they have a system to allow for live filesystem backups. Most DBs keep the recent transactions cached in memory instead of being written to the drive immediately. Use the appropriate dump tools and backup the dump.
"I use MySQL in maybe 60% of my projects, and I have been bitten by a majority of those issues"
Ok, look someone's not reading here... I'll make this one last post, but I really have to stop this thread.
I never said that the items listed were incorrect. They would not work as rhetoric if they were lies. However, the page is designed, not to help (all of the items listed are in the documentation on the MySQL site), but to discourage the use of the database. Any database can be ranted about, but for some unknown reason people choose to rant about MySQL quite a lot.
I think part of this is that PostgreSQL as a project has felt that their time and effort on full ANSI compliance was not rewarded, and so a lot of specifically PostgreSQL folks want to rail on about how MySQL did not make such an attempt, but instead focused on non-standard features like their full-text searching.
That's fine, but let's not confuse those disagreements for any actual problems with either product.
MySQL has some serious problems as an SQL-compliant database (let alone as a *relational* database)
You got those backwards. SQL compliance implies that you are a relational (e.g. set theory applied to a table structure) database. MySQL might be non ANSI SQL 9X compliant, but that does not make it a non-relational database. There are ANSI SQL features which MySQL simply does not support.
and that site simply points them out in an objective manner. In fact he says they aren't bugs or mistakes, but *documented, yet unexpected, behavior*.
It is most certainly not objective, and if you really think that it is, then I don't think we can have this conversation rationally.
Ok, that's it. Thanks guys, but I really do need to go get on with my life. If my comments here have been helpful, great, if not... well, good luck with your work anyway.
I second this. Also see here.
-- Qu'est-ce que la propriété intellectuelle? It is thought control.
You MySQL haters do realize that we're not just talking about MySQL version 1.0 anymore, right? Linux 1.0 kinda sucked too.
MySQL has binary logging of queries, the InnoDB back-end supports referential integrity as well as consistency (at least in my tests).
Perhaps you didn't read the MySQL manual and shut off autocommit before testing? Or did you actually test it before spouting off?
BEGIN;
SELECT Amount from Account1 where ID = Foo;
UPDATE Account2 SET Amount = Amount + Bar WHERE ID=Foo2;
-- spawn new process --
SELECT Amount from Account2 where ID = Foo2;
# returns original amount or blocks
-- back in original process --
UPDATE Account1 SET Amount = Amount - Bar WHERE ID = Foo;
COMMIT;
-- spawn new process --
SELECT Amount from Account2 WHERE ID = Foo2;
SELECT Amount from Account WHERE ID = Foo;
Both return the right values. Do it yourself.
You pulled the plug half-way through? Big deal, still good.
Its called active development.
- Michael T. Babcock (Yes, I blog)
Thank you very much, you just saved me 25 MB.
The stable version does NOT have subqueries. Version 4.1 does, but that is still beta quality software.
That not up-to-date. 4.1 isn't considered beta since 2004-06-24 and had it's first production release over a month ago, on 2004-10-23. See here
The transaction support in 4.0 is horrible and slow. Rollbacks are O(n) operations (for InnoDB, that is) etc...
Slow rollbacks are not really a problem, if you don't abuse them. That is, don't write your transactions with failure as an expectation (like inserting a row and waiting if it fails due to a unique key), but do your own checks (most often you don't need additional queries, because you already have the data or can expand an existing query). Not only does that make your queries faster with most databases (even those with good rollback support), but also makes your application more robust (in case of db changes)
Keep an eye on which arguments are silently dropped in replies. Not always, but often times it's very telling.
Since InnoDB is marked stabled since Feb 2002 and you use it "for years" I doubt you're using transactions.
You should not rely on a non-ACID DB in a mission critical environment. You might have luck for several years - but there's no guarantee.
And there are a lot of ways where MySQL will fail miserably in case of failure, here's just a simple example:
update balances
set balance=balance-1000.0
where id=some-id;
Now your NIC fails (or your router or whatever)
now your application tries to book that to another customer:
update balances
set balance=balance+1000.0
where id=some-other-id;
Oops, that failed. But where's the money gone? It vanished....
It looks like Open Office is targeting MS Access in their next release.
:). Does Open Office 1.9.mXX render a document differently than your other office suite (be it Word, Wordperfect, Works or etc)? Do your part:
I have been testing the 1.9.mXX releases (currently preparing for their first beta release) for a few weeks now, and most issues have been minor formatting changes, and a couple crashes here and there -- all of which have been reported. The one major issue I have come across is the problem where graphics are lost after saving changes to a document Issue 36459 where the fix has already been checked into 1.9.m64.
The pre-beta milestones have improved import/export filters, and many new features most people will like. It needs people to stomp on it in their worst way (ie, regular usage
o Create a seperate file with only the portion that changed from the other suite.
o Create a PDF of the document from the other suite.
o Create a PDF of the document from the latest development snapshot of OpenOffice (using the same pdf program if possible -- I use the Open Source PDFCreator which is a ghostscript front end).
o Zip the files (I use the Open Source 7-zip program)
o Report the issue (and create an account if you don't have one) with your best description of the problem with a step by step list of what actions need to be performed to reproduce the problem.
o Attach the zip file of the three files you created before.
The development code needs more people who are able to write bug reports -- that means don't install it on grandma's computer. If you think "it doesn't work" is a good bug report then please move to the next message, thanks.
There: Something at a specific location.
Their: Owned by someone.
Please make sure your english compiles.
Still, you sort of have a point. There are plenty of applications that work well within MySQL's limitations. Then again, they also work well with other low-end DBMSs, like FireBird/Interbase and PosgreSQL. (Let's leave Oracle out of the discussion -- you don't use that kind of software unless you have deep pockets and serious support infrastructure.) Now, if you know for sure that your application will never evolve beyond MySQL's limitations, I suppose there's no harm in using it. But most application do evolve.
I don't usually care for the usual "It sucks!" versus "It rules!" debates you see on Slashdot. Everything has its strengths and weaknesses. But in this case I have to say that MySQL does suck. Not in the sense that it's totally useless (obviously not, since so many people use it). But it does suck you into a development path that you will come to regret following.