Slashdot videos: Now with more Slashdot!

View

Discuss

Share

We've improved Slashdot's video section; now you can view our video interviews, product close-ups and site visits with all the usual Slashdot options to comment, share, etc. No more walled garden! It's a work in progress -- we hope you'll check it out (Learn more about the recent updates).

Craig Maloney writes "If you are a Windows programmer looking to create or move your stand-alone database applications away from Microsoft-specific tools such as Visual Basic, Visual C++, Access or SQL Server, MySQL: Building User Interfaces is written just for you." Read on for the rest of Craig's review.

MySQL: Building User Interfaces

author

Matthew Stucky

pages

632

publisher

New Riders

rating

4/10

reviewer

Craig Maloney

ISBN

073571049X

summary

MySQL and GTK+ are used to create cross-platform applications, with copious code listings.

tester data

What's in the book?

The first chapter guides the reader through the basics of MySQL and how it compares to Access 2000 and SQL Server 97. Next, a code listing demonstrates the basics of connecting to MySQL via C using the MySQL C API. the book gives an all-too-brief whirlwind tour to the basics of MySQL. The next four chapters are a tutorial on how to use GTK+ and GLADE, focusing on how these toolkits are similar and different from their Visual Basic counterparts. GTK+ was chosen in this book because of its cross-platform compatibility with both Windows and Linux / UNIX operating environments. The second part of the book takes what was learned about MySQL and GTK+ with GLADE and uses it to create a stand-alone application (a real-world order-entry application).

What's Good?

Throughout MySQL: Building User Interfaces, Stuckey describes exactly what he is doing and why he is doing it that way. The introduction to GTK+ in the first part of the book describes just about every GTK+ widget available (menus, buttons, sliders, status bars, etc.), and creates a monster busy-box application (not to be confused with the busy-box application by Bruce Perens) demonstrating those widgets by themselves. Later in the book Stuckey uses Glade to put applications together, but not using Glade early on gives the reader a chance to see what is happening under Glade's abstraction. During the building of the order-entry application, Stuckey explains the design decisions behind the widgets. Each window of the application is introduced first with a diagram describing where the widgets will be followed by the code for each widget. The design looks like a Visual Basic application designed by a a programmer, with an eye toward the functional rather than the aesthetics of user interface design, but as an introduction to GTK+ programming it works well.

What's Bad?

If there was ever a book that required a CD-ROM to accompany it, this book gets my nomination. Authors have to walk a fine line between presenting code snippets that don't make sense by themselves, or risk boring readers with page after page of code that might confuse readers who aren't yet ready to view full code listings. MySQL: Building User Interfaces chose to include the full code listing for everything. This is both a blessing and a curse: readers have the code right in front of them and don't have to worry about being in front of a computer while reading the book, but the flow of the book is interrupted every time something is introduced.

The descriptions also suffer, because those code listings are expected to explain in more detail what is going on. In the GTK+ introduction, widgets are introduced with short paragraph introductions. The real-world application, which should be the focus of the book, reads like an assembly line: A screen is introduced, the widgets are placed, and the code is listed. Worse, files which make little sense without a computer (such as files generated by glade) are presented along with the code listings. This makes reading this book a chore. Thankfully, there is an FTP site with the code ready to use, but future versions of this book would be best served to include it on disc.

Perhaps a balance can be struck in a future edition where important code concepts are highlighted without sacrificing seeing the code in a meaningful context.

So, what's in it for me?

Windows programmers who need a hand in getting their applications to Linux or UNIX may find this book helpful (but overwhelming) as they learn. This book stands out as a bridge for Windows programmers to make their transition to Linux and UNIX smoother, but the emphasis and amount of code listings in this book may make Windows programmers choose a different route.

MS Access has the advantage (on Windows machines anyway) of being a stand-alone database without needing a service to be installed. For a app where you don't want to have to install MySQL server and have it waste resources, you might consider SQLite [sqlite.org]. Unlike MySQL embedded, it's release under the public domain. MySQL Embedded is licensed under the GPL and has the following requirement [mysql.com]:

... any program which includes, by linking with libmysqld, the MySQL source code must be released as free software (under a license compatible with the GPL).

Although, depending on what you want to do with the software, this may not be a problem. I'm all for free and open source software, but a brother's gotta eat too.

Can someone expand on the difference between a stand-alone db and one that needs a service to be installed? I just don't understand what the differences are between Access and other databases such as mySQL...

Access is simply an application. When you open the database, it's just like opening a file in a word processor.

MySQL is a service that runs seperately from the application and must be started and stopped seperately. In most cases, the service is started at boot time and runs all the time, wasting resources unless you manually stop it.

Hmm. Access is an application which uses the underlying MSJET engine. Anything that can create an ADO object (or OLEDB or DAO...) can use that engine without Access running. The engine also handles reference counts so that if more than one program is using it, it won't load multiple copies and it won't unload until the last one closes it.

"I'd remove the "wasting resources" part from that description, because it's behaving like any server process does in that regard. Your SMTP server and HTTP server are also "wasting resources" while they're sitting there waiting for inbound connections."

Good point. I'll elaborate in case someone doesn't get the point -- under UNIX (or Linux) there's essentially zero system cost to having a server running if it's not active -- it just gets swapped to disk by the OS' virtual memory system, and doesn't take

Not exactly true. While it's true that the service won't use many (if any) CPU cycles while waiting, it will use memory.

You're incorrect that this memory will get swapped to disk, since that will only happen if memory becomes low.

The problem with this is that Linux (as do many OS's) has a system of buffers and caches which use unallocated memory to speed up the OS. Having a bunch of memory allocated (but not enough to swap them out to disk) lowers the number of buffers and caches available to the OS, th

In most modern operating systems, inactive processes can be swapped out in favor of disk buffers and the like as well. Besides that, the memory used by an inactive MySQL process is closer to "rounding error" than "waste of memory."

But if you're still worried about it, an extra 256MB is hovering around $30 on Pricewatch.com. Hmmm... $30 and never having to worry about it or any other inactive daemons on my system again or...

Resources does not simply mean CPU time. It also means memory. Further, it's another process in the process table, and unless you ahve the O(1) scheduler running, it increases the amount of time the scheduler takes to run new processes.

Now, all of those things take only a fraction of a microsecond to accomplish, but it's still "wasted" if you're not using it.

Even with an O(n) scheduler, an idle daemon is nothing. While some others may be impressed with your use of Big-O notation, many of us are not. Even an O(n^2) algorithm isn't that bad if your dataset is sufficiently small. The O(1) scheduler is a glorious thing only because the number of processes (forks, threads, etc.) reaches very high amounts on a large, loaded system. At hundreds of thousands of processes/threads, the choice of scheduler makes a big difference in overhead. And for that matter, if t

An Access database (usually a.mdb file) is just a binary file. Your application uses the Access DB driver to read/write to this file.

MySQL on the other hand (which may consist of multiple binary files) has to run a daemon (i.e., server) to be accessed. Your application uses the MySQL driver to talk to the MySQL daemon, either through TCP/IP or a local socket.

This is why MySQL will *never* be a replacement for Access, despite what I often see on slashdot. You can fit a small Access database on a floppy. C

...if you don't use transactions, stored procedures, triggers, views, sequences (read: real ones), or if you actually want your database to be typesafe and have your insert/update to throw an error (or at least a warning!) on invalid data. Otherwise MySQL is most certainly not a viable replacement, although the codebase which used to be called SAPDB is. Firebird also qualifies for a replacement.

Also, if you need advanced XML querying tools for your database, none of the open source RDBMSs can currently act as a reasonable drop-in replacement for MS SQL Server.

If you don't need any of those features (and especially haven't actually used any of them in existing code), then MySQL could be added to the list of open source RDBMSs that fit the requirements for your project.

For varying definitions of "quite a while." Other than that I would agree with you except for the fact that every table involved in the transaction must be an InnoDB table. Have a half-and-half setup? When that transaction rolls back, the InnoDB tables will remove the changes, but the MyISAM tables will still be changed....not that MySQL will tell you this. No. Once again, it will do it all silently without even a warning to let you know that you need to convert one more of your MyISAM tables to InnoDB.

Which doesn't even cover the fact that if you are being hosted by an ISP, using their copy of MySQL, and you type in:

CREATE TABLE foo (...) type=innodb;

and they are either (a) running an older version of MySQL or (b) disabling support for InnoDB tables because of their noticeably higher overhead than MyISAM (yes, both cases happen quite regularly), you will be none the wiser.

MySQL will not issue a warning, error, or valentine's day card for your troubles. So here you are, happily SQLing away without a care because you have InnoDB tables until you notice some strange data...because...you aren't running InnoDB tables after all.

Be honest, how often do you run the following?

SHOW CREATE TABLE foo;

Everytime you create a table? No?

How about the next statement? Here we attempt to give some users on Slashdot 10% more of a clue.

and (oops!) something went wrong halfway through for some reason. Maybe someone killed the process. Maybe someone kicked a cord. Maybe you ran out of memory on the box and the process crashed. The world is an imperfect place. Back to work though: how many Slashdot users had their clues upped? If they were updating a MyISAM table that "didn't need transactions," we have no idea.

Transactions aren't just BEGIN and END statements. They aren't just commit() and rollback() functions. They are intrinsic to a valid datastore. They are the Atomicity in ACID. That UPDATE statement was a transaction in all contexts used to describe databases.

MySQL and transactions are like assembly language and for-loops. They can be made to go together, but they were not originally designed for such a task. In assembly, it's a set of well-placed jump (goto) statements. In MySQL, it's a set of table=innodb flags. Some people do it the hard way for no good reason even when easier, less error prone methods exist. For the rest of us, we use a higher-level language or -- in this case -- a higher-level database. If and only if we see a need to optimize do we drop down to assembly (MySQL). You don't start with assembly and then try to find rationales for a higher-level language.

At least not ones that conform to the ANSI SQL definition of sequences.

Sending a NULL to an AUTO_INCREMENT field is not the same as an SQL sequence.

Can you skip numbers easily in MySQL (eg. tell the DB to continue from some arbitrary number next)? Can you put explicit values into the column without the AUTO_INCREMENT overriding you silently? (My favorite part: MySQL changing the values you enter without even telling you.) Can you tell a MySQL sequence to have a maximum value lower than the maximum valu

So... You are telling me that Microsoft Access, or at least that part of it _necessary_ to read mdb's will fit on the floppy as well?

I like MySQL because it _is_ a server --
You can create any application in (almost) any language on any platform (think php) to interface with a MySQL database. Try telling me that you can do that with access.

And you _can_ also fit a SQL db on a floppy.

To sum:
-You cant fit M$ Access on a floppy, but you can a db.
-You cant fit MySQL on a floppy, but you can a db

MySQL is free (and all applications do remain PROPRIETARY provided they dont modify the MySQL source in any way -- Read the licence properly dudes.

Your app only remains proprietary until you decide to distribute it. If you distribute an app that uses MySQL APIs, either (1) you have to GPL your app or (2) you have to pay MySQL if you don't want to GPL your app. It doesn't matter if your app is to be BSD-licensed, closed-source, or whatever...if it's not GPL'd, you have to pay MySQL if you distribute yo

I write small DB apps for small businesses. My clients all have MS Access installed. I would love to be able to use all open-source tools to develop these apps, but so far nobody can show me something that's as simple for my computer-illiterate clients to install as "Here, copy this.mdb file to your hard drive and double-click on it". Installing one more piece of software wouldn't be hard either, but if I have to say "Here, install

An Access.mdb can hold both the 'back end' tables/views, and the 'front end' GUI, code, SQL statements, procedures, reports, etc.

Although, a better way to deploy an application in Access is two mdb's. One containing the backend table structure & data, and one containing the front end GUI. That way, when you want to implement new features in the GUI, you don't have to screw with the data. Simply delete the prev version front end, ad drop in the new one. Via code, this can be automatic & seamless t

"You can fit a small Access database on a floppy. Conversely, you may need a full fledged DBA to run MySQL."

On the other hand, my current fieldwork database (at the point we were switching from access to mysql) was a 50mb Access file, but a 200kb mysql dumpfile.

I could refresh remote copies of the mysql version over a 56k dialup (or by floppy) no problem, but duplicating the access db (don't even talk to me about 'sync' - I lost count of how many rollbacks to backup I had to do after using sync. one of t

n the other hand, my current fieldwork database (at the point we were switching from access to mysql) was a 50mb Access file, but a 200kb mysql dumpfile.

You are talking about two different things. How large would the Access mdb be if it were only the table structure and data? Your 50mb Access file presumably contained all the front end junk as well. Which can be quite large. Especially if you don't Compact once in a while.

This is why MySQL will *never* be a replacement for Access, despite what I often see on slashdot.

It's all a matter of perspective. To a programmer, Access is the means of a cheap no-frills datasource that can be served as a service on the internet or an intranet. So in that sense, MS Access is already being replaced in that area. And to some extent, even SQL Server 2000 is starting to be replaced by MySql in some instances. And no, I'm not just trolling. And yes, I do realize that SQL Server is still much

Are you aware that the data in a MySQL database can be ripped out to a file with the mysqldump command? Okay, perhaps passing it through bzip2 or similar will improve the odds of fitting it on a floppy.

Well obviously, I too can do a text export of Access and gzip it as well! But that doesn't, uh, help the situation.

And an Access database in an MDB file is hardly standalone, you still need a machine running Access to get much use out of it.

Wrong. You don't need Access to create/update/use an Access database. The functionality it built into Windows (actually part of a bigger module called Jet).

I do a little DB development. The basic difference is a DB system like MySQL, Oracle or SyBase is that the 'DB' is the back-end (indeed it is a server-type process) which is interrogated by SQL statements (the front end may be built in C++, VBA, whatever), whereas something like Access is an all-in-one solution with the back-end and the front-end in the same app mish-mashed together (it may purport to be SQL-like, but only from within the app, not as a server) - I think MS still provide Foxpro as Access simple can't hack really big work. So an SQL-type database is the classic client-server, Access and Paradox don't seperate front and back ends (they say they can be split, but that is a bit of a bodge job).

Actually, I think you may have been mislead if I read you correctly. Another person in the thread was correct when they said that Access is a front-end to the actual Access database. You can run SQL queries against an Access database... the functionality is built into the driver.

I suppose the app could easily be written to start the server when it starts and shut the server down when it ends, thus not wasting resources all the time...couldn't you? Not that mysqld is a resource hog anyway...

> I suppose the app could easily be written to start the server when it starts and shut the server down when it ends

True, but besides being sort of hokey, the requirement of having MySQL installed might not be ideal if your target audience isn't savvy enough to install it, or perhaps don't want extra, normally unnecessary, stuff on their computer. I guess it all depends on your needs and target audience.

I'm not familiar with MySQL. Is it possible to start and stop the service from your application, as your application loads and unloads? I mean, even if there's a delay in starting MySQL (MS SQL starts and stops very quickly), it should be possible to do it in the background as your application loads without much (if any) delay from the user's perception.

from the sql lite page it looks like multiple users can select silmultaneously but only write to the database one at a time. Locking for writes is not record level, page level or even table level - it is the whole database.

Too bad- because MySQL really does not replace Access but neither does this- unless it will only run internally to one user.

from the sql lite page it looks like multiple users can select silmultaneously but only write to the database one at a time.

I don't see this as a problem, because at least I see SQLite as more of a portable pre-packaged data structure, rather than a traditional multi-user database. I haven't had a chance to use it yet myself, but I look forward to using it in stand-along applications where I need good data structure and the ability to filter and search for specific data. I'm a fair hand with MySQL, so

I just got real interested when it was presented as a replacement for Access- because MySQL is not. If I'm going to go to run and actual database server I'll use postgres. But I'm looking for something that is just like Access but will run on linux.

So I'm not really responding so much to the book review as to the parent post. that's all.

No. You can have multiple concurrent users doing all kinds of crap and the locking granularity can be down to the record level if you write your code correctly.

Now the one thing that is bad with access is that if a user drops their connection in the middle of something it has a tendency to blow up. If you have a lot of people using an Access file over a network- you are going to need to compact & repair every so often. But I've seen stuff go strong for a while with 30-70 users hitting the same.mdb

It's not like you can just drop an *.mdb file onto a box and use it. Access still needs to be installed. This puts it on about equal footing with MS Access in that even though MS Access is more common, MySQL is a free download if the system you're on doesn't have it. Of course, that assumes your office is running MS Windows. (Not a bad assumption, but good to keep in mind.)

Along those lines, you shouldn't be coding directly to MS Access anyway. Writing your stuff to an ODBC datasource is a much better

Actually, all you need is the Microsoft Data Access Components installed ( http://msdn.microsoft.com/data/ ) if you wish to just read/write to the Access database.

And as a side note, if you're doing any sort of development in Access, your database shouldn't even be in the Access file. You're much better off using a real database, like MS SQL or MySQL/etc. to handle the data storage, and link to that through ODBC or ADO (I prefer ADO, but whatever.) Also, your program's logic (especially when it's complex)

I have read this book, and used it to my advantage. However, they don't properly explain some parts about what you're doing, and why you're building the interface. I was hard pressed to find the exact reasoning they used for some of the things they did, but other than that, it's a great resource for mysql developers such as myself.

It's not about being a postgres fanboy/troll.. reality is that MySQL DOES NOT have features comparable to Oracle/PostgreSQL/SQL Server. When are you going to understand this??

As a DBD (db developer) I CAN'T use MySQL - it's feature set is too WEAK. MySQL is starting to get some of these features now and good for them but the argument was always about the feature set.. fuck some of you are dimwits...

And yes I've just fed a troll but fuck it, now im all pissed off and want

...without downloading cygwin...native win32 support was meant to be in 7.4 but didn't make it. I deploy to FreeBSD but develop on windows (because some apps I rely on still don't run in Xover office and are too damn slow in vmware under linux). Don't get me wrong, it works fine in cygwin, but it doesn't sit well with me having to do that. Let's be honest here, PostgreSQL doesn't have an important feature of Oracle, the HAL (or whatever oracle call it), PostgreSQL has to be ported manually and it's takin

Before that, the dang thing doesn't support nested subqueries, or any kind of subqueries on inserts and deletes. Found that out the hard way recently (the docs don't make it very clear) and had to rewrite a bunch of elegant SQL as less elegant Perl loops and wacky joins.

Still, I love MySQL. Postgres is more full featured, but for the smallish web-based applications I write, it's overkill.

...now after this, it should have given you a message like:
"Query OK, 1 row affected"

Seems to me that the data was a collection of square pegs to round holes, but MySQL never even dropped a warning.

So let's check out that table again:

SELECT * FROM test;

1 row with the following is returned.

id: 1num1: 2147483647num2: 0num3: 0price: 999.99code: ABCDEFGH

Now stop. Take another look at the table definition. Take another look at the inserted data. Take another look at the output. Take another look at what has been stored in your database. Let's sum up: your primary key (your lookup key!) is not what you expected, the numbers are all different from what you entered, the price does not conform to your data schema (should be a maximum of 99.99), and your character string has been truncated...ALL WITHOUT AN ERROR OR WARNING.

More examples at MySQL Gotchas [sql-info.de]. All of this in MySQL v4.0 and above. None of this crap happens in Firebird 1.5, PostgreSQL 7.x, or any popular closed source relational database.

...and it is crap. You have crap data in your database, and MySQL never let you know. For those of you out there who never ever write code with bugs, there's no problem; Go on ahead using MySQL. (Then again, you're in high demand for senior, very well paying jobs using Oracle or DB2 in Fortune 100 companies if that's the case.) For all the other folks out there (which includes everyone out there doing web development with dynamically typed languages like Perl and PHP), MySQL will happily insert crap data.

And yes, there's a PostgreSQL Gotchas page [sql-info.de]. Tables are lowercase by default, and it requires the "AS" keyword for column aliases. Look at that list for PostgreSQL. Look at that above example. Can someone say with a straight face that these lists are comparable? Can someone say with a straight face that they want to explain to the computer-phobe why they got 2147483647 in their data? Can someone say with a straight face to their boss that these errors are acceptable in a production environment?

I've been working through this book for quite some time, and now that I've extracted all i can I have to declare myself delighted with it. The examples are good, deep enough to convey the lessons but shallow enough that not too much is irrelevant. I now have, as the author promised, several applications that will compile easily under both linux and win32. If i can fault the book at all , my only reservation is that is would have been nice to see all the necessary software included on the cd. Downloading all

I read most of this book (maybe an older version?) last year. I found it very interesting because it basically gave me the idea to let the staff members of my web site update the site through a windowed interface as opposed to a web interface. MySQL doesn't have to be running on the same computer as the program is running on, so this would be simple. That way you could provide a rich client (for staff members, not end-users) to update a web site based on MySQL.

I know, it's not an original idea, but it's interesting because the book was a nice, step by step guide to doing just this. For what it's worth, I enjoyed it.

Just wondering why you wanted to get away from the web interface?
If done correctly, isn't a web interface much better then a client/app, since it provides a single interface that works on all operating systems and from all locations?

Web interfaces work great for read-only content. Complex UI for data entry is a PITA on the web though.

If your app has a ton of content that is read-only(ie. a reporting app of some sort) and only a few people doing the updating then it makes sense to have a fat client for data entry and a web interface for everyone else.

MySQL: Building User Interfaces chose to include the full code listing for everything. This is both a blessing and a curse: readers have the code right in front of them and don't have to worry about being in front of a computer while reading the book

Since when do people read computer books on the throne? I would think anybody who's interested in this book (yes, you two hiding at the back!) would be reading it in front of a computer, trying out the sample code to learn what's going on.

Recently I had to write a mysql demo for a tradshow. I hadnever worked with mySQL before. I got this book and wasable to complete a full fledged demo in a matter of threedays, working part time. The book is very well organized,easy to read and understand and best of all the exampleswork without modifications. I highly recommend this bookfor beginners. I would have done so for all levels butI'm not an advanced user of mySQL.

I have this book on my desk currently, its definitely a good resource on using MySQL for programs. The only gripe I had with it was that it didn't come with the source code, like was said in the review. I like how it focuses on converting the VB programmer over to GTK conventions.

Maybe someone should send Mike Rowe a copy after he gets out of Redmond-Training.

Would you *reallY* like users installing MySql on their machines with the easiest to use options (read:insecure options) by default? GUIs are much worse. Best to stick with raw SQL and text files, that way you *have* to learn to secure the system.

I'm sure the GTK and Glade solution works fine. But wouldn't Java, JDBC, plus a GUI builder ( even a freely downloadable Borland JBuilder Personal or now Eclipse.org has a GUI Builder ) be a lot more crossplatform and mature solution?

There are also quite a few over the over-the-shelf Java JDBC components and tools that you can buy as well in case you're building a commercial application.

I don't get why so many people are stuck on MySQL. It's lacks some very, very basic features: Views, Triggers, Stored procedures, nested selects. Sure, they promise support for all this in future version, but PostgreSQL supports it NOW. If you want a full-featured open source database, don't use MySQL, use Postgres.

I too wonder about the inexplicable popularity of MySQL. It fills the microscopic niche between a lightweight ISAM database and a real full-featured relational database. I've yet to see MySQL used for something that couldn't have be done better with another tool.

Postgres is pretty good, but still (IMHO) not yet up to the level of a commercial RDBMS. If you want a full-featured free-as-in-beer datacenter grade database, use Sybase 11.0.3.3 [sybase.com]. It doesn't come with source, but come on now, how many MySQL zealots have ever even compiled from source, let alone modified something?

At least for my company, the primary reason for using MySQL is the native support for Windows. These other solutions are only currently supported in Linux (Postgres supports Windows only through Cwgwin).

Acutally, I have yet to need a "full-featured database". From what I've seen of various apps, neither do most other people. By and large, most apps needing a form of database storage usually get by with DBM or equivalent functionality. 'Real', big database applications that need the kind of stuff you mention are few and far between - and in those cases, there are plenty of alternatives anyhow, like you say.

For me, MySQL is not a deficient implementation of the Likes of Oracle, but a full-featured, modern w

"If you are a Windows programmer looking to create or move your stand-alone database applications away from Microsoft-specific tools such as Visual Basic, Visual C++, Access or SQL Server, MySQL: Building User Interfaces is written just for you."

Very few Windows applications are written in 'C' these days so converting an existing application to use MySQL would be pretty painful. You should have a better reason to port your code then simply avoiding MS tools.

Perhaps the book is better suited for developers who wish to switch to Linux for future development.

...wouldn't the effort be better spent in actually bringing mySQL up to the point where it *can* replace SQL Server?

MySQL seems to occupy a rather subtle and narrow niche, perhaps the 'single smallish website' niche. I can't really imagine wanting to use it when most applications are liable to grow beyond that niche.

PostgresSQL looks a lot more encouraging, feature-wise, although it doesn't seem to offer many concrete benefits over SQL Server. Still, to me, a book on migrating to PostgresSQL or another full-featured RDB would be more useful.

MySQL and Postgres are both very good database technologies (and I'm an Oracle DBA, managing 3 high-availability Oracle installations).

"MySQL seems to occupy a rather subtle and narrow niche"

The website that you posted this comment to, that offered the review of this book, runs MySQL. You know - the website with it's own effect named after it, the one that handles the load of tens of thousands of geeks while the site they reference in a front-page-story crashes and burns when

For a content management system I've developed, I prototyped all of the basic functionality by using Access as a GUI for mySQL.
And I loved it! I actually considered doing the whole thing this way for a bit as it offered so many of Access's strengths (quick and powerful GUI building, familiar environment, everyone has it, etc.), but was combined with mySQL's stability, scalability (Well... For the needs of my target audience at least), and versatility.
All's you need to tinker with this is the free MyODBC [mysql.com] package, and suddenly your mySQL database is seen as a standard ODBC one.
You can build table relationships within Access using mySQL based source data. You can locate the mySQL server anywhere you want (local or remote), point Access at it, and there ya go.
Additionally you can now use VBA within Access to take advantage of many Active-X components, as well as a wealth of freely available VB code.
There were several reasons I went back to my original plan of just prototyping in Access, and deploying via a web-based setup:

Obviously not everyone has Access. Many do, or have access to it via work or school (access to Access?!?)

There were certain things that were easier to implement in an HTML-based setting (conversely, there's things I still can't equal that were accomplished easily using VB & Active-X. Things such as a customized file browser with a built in image viewer)

While some of my VB code and Active-X'ing would have been transferable to the web, it would have required requiring that the user of my system use IE to administer it. Not gonna happen!

I just don't like Microsoft enough to make my product only available to users of their software. The above IE example would have required my admins to IE; Access would require users to have Access; Having Access implies that the user must also run Windows (Wine just isn't there for Access usage I'm afraid. At least not for very advanced usage)

But for other projects I have, who's target audience is Windows users, Access is a great way to quickly build some impressive mySQL-based applications.
IMHO, of course.
8)=

I hardly consider GTK+ + MySQL to even be in the same league as Access when it comes to ease of use and interface design. Sure, Access isnt that great of a program, but it is extremely easy to create a simple database+frontend in. Another nonfree alternative is Filemaker Pro. This is a very nice application.

Could someone explain to me the difference between the two? (I've had a database course, so it's OK to get technical) There was that top 10 database article a while back, and while I saw MS SQL in there a few times I NEVER saw MySQL. What is MySQL better than MS SQL at, and vice versa?

But do we really want the book to only scratch the surface in many languages rather than give it thoroughly indepth with a single language? I often find it frustrating when chapter upon chapter is dedicated to a language I'll never use. If however you want lots of other languages covered, the MySQL Cookbook [amazon.com] by O'Reilly has good scenario based discussions of using MySQL with PHP, JSP (as you wanted) as well as Python and Perl.

Don't confuse stupidity with lack of political engagement / ethics / knowledge / possibilities.
I know quite a few people who are more or less stuck with Windows for various reasons (the main one being their employers' decision to - willingly or not - support Microsoft), but who would like to learn more and be able to break free. If a book like this can help even a few people gain some of the skills they need to migrate, it's a good thing.

Borland's implementation of Pascal in Delphi is so close to C that it should only take a competant C coder about a week to be up and running to a good standard.

Actually calling Borland's implementation of Pascal in Delphi Pascal is a bit of a streatch IMHO. The language is now so far removed from classic pascal that apart from the bare bones there's not a lot in common.