Along with MySQL's popularity has come a flood of questions about solving specific problems, and that's where this Cookbook is essential. Designed as a handy resource when you need quick solutions or techniques, the book offers dozens of short, focused pieces of code and hundreds of worked-out examples for programmers of all levels who don't have the time (or expertise) to solve MySQL problems from scratch.
The new edition covers MySQL 5.0 and its powerful new features, as well as the older but still widespread MySQL 4.1. One major emphasis of this book is how to use SQL to formulate queries for particular kinds of questions, using the mysql client program included in MySQL distributions. The other major emphasis is how to write programs that interact with the MySQL server through an API. You'll find plenty of examples using several language APIs in multiple scenarios and situations, including the use of Ruby to retrieve and format data. There are also many new examples for using Perl, PHP, Python, and Java as well.
Other recipes in the book teach you to:
Access data from multiple tables at the same time
Use SQL to select, sort, and summarize rows
Find matches or mismatches between rows in two tables
Determine intervals between dates or times, including age calculations
Store images into MySQL and retrieve them for display in web pages
Get LOAD DATA to read your data files properly or find which values in the file are invalid
Use strict mode to prevent entry of bad data into your database
Copy a table or a database to another server
Generate sequence numbers to use as unique row identifiers
Create database events that execute according to a schedule
And a lot more
MySQL Cookbook doesn't attempt to develop full-fledged, complex applications. Instead, it's intended to assist you in developing applications yourself by helping you get past problems that have you stumped.
Chapter 1 Using the mysql Client Program
Introduction
Setting Up a MySQL User Account
Problem
Solution
Discussion
Creating a Database and a Sample Table
Problem
Solution
Discussion
Starting and Stopping mysql
Problem
Solution
Discussion
Specifying Connection Parameters Using Option Files
Problem
Solution
Discussion
Protecting Option Files from Other Users
Problem
Solution
Discussion
Mixing Command-Line and Option File Parameters
Problem
Solution
Discussion
What to Do if mysql Cannot Be Found
Problem
Solution
Discussion
Issuing SQL Statements
Problem
Solution
Discussion
See Also
Canceling a Partially Entered Statement
Problem
Solution
Discussion
Repeating and Editing SQL Statements
Problem
Solution
Discussion
Using Auto-Completion for Database and Table Names
Problem
Solution
Discussion
Telling mysql to Read Statements from a File
Problem
Solution
Discussion
Telling mysql to Read Statements from Other Programs
Problem
Solution
Discussion
See Also
Entering an SQL One-Liner
Problem
Solution
Discussion
Using Copy and Paste as a mysql Input Source
Problem
Solution
Discussion
Preventing Query Output from Scrolling off the Screen
Problem
Solution
Discussion
Sending Query Output to a File or to a Program
Problem
Solution
Discussion
Selecting Tabular or Tab-Delimited Query Output Format
Problem
Solution
Discussion
Specifying Arbitrary Output Column Delimiters
Problem
Solution
Discussion
See Also
Producing HTML or XML Output
Problem
Solution
Discussion
See Also
Suppressing Column Headings in Query Output
Problem
Solution
Discussion
Making Long Output Lines More Readable
Problem
Solution
Discussion
Controlling mysql’s Verbosity Level
Problem
Solution
Discussion
Logging Interactive mysql Sessions
Problem
Solution
Discussion
Creating mysql Scripts from Previously Executed Statements
Problem
Solution
Discussion
Using User-Defined Variables in SQL Statements
Problem
Solution
Discussion
Numbering Query Output Lines
Problem
Solution
Discussion
Using mysql as a Calculator
Problem
Solution
Discussion
Using mysql in Shell Scripts
Problem
Solution
Discussion
Writing shell scripts under Unix
Writing shell scripts under Windows
Chapter 2 Writing MySQL-Based Programs
Introduction
Assumptions
MySQL Client API Architecture
Connecting, Selecting a Database, and Disconnecting
Problem
Solution
Discussion
Perl
Ruby
PHP
Python
Java
Checking for Errors
Problem
Solution
Discussion
Perl
Ruby
PHP
Python
Java
Writing Library Files
Problem
Solution
Discussion
Choosing a library file installation location
Setting library file access privileges
Perl
Ruby
PHP
Python
Java
Issuing Statements and Retrieving Results
Problem
Solution
Discussion
SQL statement categories
Perl
Ruby
PHP
Python
Java
Handling Special Characters and NULL Values in Statements
Problem
Solution
Discussion
Using placeholders
Using a quoting function
Perl
Ruby
PHP
Python
Java
Handling Special Characters in Identifiers
Problem
Solution
Discussion
Identifying NULL Values in Result Sets
Problem
Solution
Discussion
Perl
Ruby
PHP
Python
Java
Techniques for Obtaining Connection Parameters
Problem
Solution
Discussion
Getting parameters from the command line
Getting parameters from option files
Conclusion and Words of Advice
Chapter 3 Selecting Data from Tables
Introduction
Specifying Which Columns to Select
Problem
Solution
Discussion
Specifying Which Rows to Select
Problem
Solution
Discussion
Giving Better Names to Query Result Columns
Problem
Solution
Discussion
Using Column Aliases to Make Programs Easier to Write
Problem
Solution
Discussion
See Also
Combining Columns to Construct Composite Values
Problem
Solution
Discussion
WHERE Clauses and Column Aliases
Problem
Solution
Discussion
Debugging Comparison Expressions
Problem
Solution
Discussion
Removing Duplicate Rows
Problem
Solution
Discussion
See Also
Working with NULL Values
Problem
Solution
Discussion
See Also
Writing Comparisons Involving NULL in Programs
Problem
Solution
Discussion
Sorting a Result Set
Problem
Solution
Discussion
Using Views to Simplify Table Access
Problem
Solution
Discussion
Selecting Data from More Than One Table
Problem
Solution
Discussion
Selecting Rows from the Beginning or End of a Result Set
Problem
Solution
Discussion
See Also
Selecting Rows from the Middle of a Result Set
Problem
Solution
Discussion
Choosing Appropriate LIMIT Values
Problem
Solution
Discussion
What to Do When LIMIT Requires the Wrong Sort Order
Problem
Solution
Discussion
Calculating LIMIT Values from Expressions
Problem
Solution
Discussion
Chapter 4 Table Management
Introduction
Cloning a Table
Problem
Solution
Discussion
Saving a Query Result in a Table
Problem
Solution
Discussion
Creating Temporary Tables
Problem
Solution
Discussion
Checking or Changing a Table’s Storage Engine
Problem
Solution
Discussion
See Also
Generating Unique Table Names
Problem
Solution
Discussion
Chapter 5 Working with Strings
Introduction
String Properties
Choosing a String Data Type
Problem
Solution
Discussion
Setting the Client Connection Character Set Properly
Problem
Solution
Discussion
Writing String Literals
Problem
Solution
Discussion
See Also
Checking a String’s Character Set or Collation
Problem
Solution
Discussion
Changing a String’s Character Set or Collation
Problem
Solution
Discussion
Converting the Lettercase of a String
Problem
Solution
Discussion
Converting the Lettercase of a Stubborn String
Problem
Solution
Discussion
Controlling Case Sensitivity in String Comparisons
Problem
Solution
Discussion
Pattern Matching with SQL Patterns
Problem
Solution
Discussion
Pattern Matching with Regular Expressions
Problem
Solution
Discussion
Controlling Case Sensitivity in Pattern Matching
Problem
Solution
Discussion
Breaking Apart or Combining Strings
Problem
Solution
Discussion
Searching for Substrings
Problem
Solution
Discussion
Using FULLTEXT Searches
Problem
Solution
Discussion
See Also
Using a FULLTEXT Search with Short Words
Problem
Solution
Discussion
Requiring or Excluding FULLTEXT Search Words
Problem
Solution
Discussion
Performing Phrase Searches with a FULLTEXT Index
Problem
Solution
Discussion
Chapter 6 Working with Dates and Times
Introduction
Choosing a Temporal Data Type
Problem
Solution
Discussion
Changing MySQL’s Date Format
Problem
Solution
Discussion
Setting the Client Time Zone
Problem
Solution
Discussion
See Also
Determining the Current Date or Time
Problem
Solution
Discussion
Using TIMESTAMP to Track Row Modification Times
Problem
Solution
Discussion
See Also
Extracting Parts of Dates or Times
Problem
Solution
Discussion
Decomposing dates or times using component-extraction functions
Decomposing dates or times using formatting functions
Decomposing dates or times using string functions
Synthesizing Dates or Times from Component Values
Problem
Solution
Discussion
Converting Between Temporal Data Types and Basic Units
Problem
Solution
Discussion
Converting between times and seconds
Converting between dates and days
Converting between date-and-time values and seconds
Calculating the Interval Between Two Dates or Times
Problem
Solution
Discussion
Calculating intervals with temporal-difference functions
Calculating intervals using basic units
Time interval calculation using basic units
Date or date-and-time interval calculation using basic units
Adding Date or Time Values
Problem
Solution
Discussion
Adding temporal values using temporal-addition functions or operators
Adding temporal values using basic units
Calculating Ages
Problem
Solution
Discussion
Shifting a Date-and-Time Value to a Different Time Zone
Problem
Solution
Discussion
Finding the First Day, Last Day, or Length of a Month
Problem
Solution
Discussion
See Also
Calculating Dates by Substring Replacement
Problem
Solution
Discussion
Finding the Day of the Week for a Date
Problem
Solution
Discussion
Finding Dates for Any Weekday of a Given Week
Problem
Solution
Discussion
Performing Leap Year Calculations
Problem
Solution
Discussion
Determining whether a date occurs in a leap year
Using leap year tests for year-length calculations
Using leap year tests for month-length calculations
Canonizing Not-Quite-ISO Date Strings
Problem
Solution
Discussion
See Also
Treating Dates or Times as Numbers
Problem
Solution
Discussion
Forcing MySQL to Treat Strings as Temporal Values
Problem
Solution
Discussion
Selecting Rows Based on Their Temporal Characteristics
Problem
Solution
Discussion
Comparing dates to one another
Comparing times to one another
Comparing dates to calendar days
Chapter 7 Sorting Query Results
Introduction
Using ORDER BY to Sort Query Results
Problem
Solution
Discussion
Using Expressions for Sorting
Problem
Solution
Discussion
Displaying One Set of Values While Sorting by Another
Problem
Solution
Discussion
Controlling Case Sensitivity of String Sorts
Problem
Solution
Discussion
Date-Based Sorting
Problem
Solution
Discussion
Sorting by Calendar Day
Problem
Solution
Discussion
Sorting by Day of Week
Problem
Solution
Discussion
Sorting by Time of Day
Problem
Solution
Discussion
Sorting Using Substrings of Column Values
Problem
Solution
Discussion
Sorting by Fixed-Length Substrings
Problem
Solution
Discussion
Sorting by Variable-Length Substrings
Problem
Solution
Discussion
Sorting Hostnames in Domain Order
Problem
Solution
Discussion
Sorting Dotted-Quad IP Values in Numeric Order
Problem
Solution
Discussion
Floating Values to the Head or Tail of the Sort Order
Problem
Solution
Discussion
See Also
Sorting in User-Defined Orders
Problem
Solution
Discussion
Sorting ENUM Values
Problem
Solution
Discussion
Chapter 8 Generating Summaries
Introduction
Summarizing with COUNT( )
Problem
Solution
Discussion
See Also
Summarizing with MIN( ) and MAX( )
Problem
Solution
Discussion
Summarizing with SUM( ) and AVG( )
Problem
Solution
Discussion
See Also
Using DISTINCT to Eliminate Duplicates
Problem
Solution
Discussion
Finding Values Associated with Minimum and Maximum Values
Problem
Solution
Discussion
See Also
Controlling String Case Sensitivity for MIN( ) and MAX( )
Problem
Solution
Discussion
Dividing a Summary into Subgroups
Problem
Solution
Discussion
Summaries and NULL Values
Problem
Solution
Discussion
Selecting Only Groups with Certain Characteristics
Problem
Solution
Discussion
Using Counts to Determine Whether Values Are Unique
Problem
Solution
Discussion
Grouping by Expression Results
Problem
Solution
Discussion
Categorizing Noncategorical Data
Problem
Solution
Discussion
Controlling Summary Display Order
Problem
Solution
Discussion
Finding Smallest or Largest Summary Values
Problem
Solution
Discussion
Date-Based Summaries
Problem
Solution
Discussion
Working with Per-Group and Overall Summary Values Simultaneously
Problem
Solution
Discussion
Generating a Report That Includes a Summary and a List
Problem
Solution
Discussion
Chapter 9 Obtaining and Using Metadata
Introduction
Obtaining the Number of Rows Affected by a Statement
Problem
Solution
Discussion
Perl
Ruby
PHP
Python
Java
Obtaining Result Set Metadata
Problem
Solution
Discussion
Perl
Ruby
PHP
Python
Java
Determining Whether a Statement Produced a Result Set
Problem
Solution
Discussion
Using Metadata to Format Query Output
Problem
Solution
Discussion
See Also
Listing or Checking Existence of Databases or Tables
Problem
Solution
Discussion
Accessing Table Column Definitions
Problem
Solution
Discussion
Using INFORMATION_SCHEMA to get table structure
Using SHOW COLUMNS to get table structure
Using CREATE TABLE to get table structure
Getting ENUM and SET Column Information
Problem
Solution
Discussion
Using Table Structure Information in Applications
Problem
Solution
Discussion
Displaying column lists
Interactive record editing
Mapping column definitions onto web page elements
Adding elements to ENUM or SET column definitions
Selecting all except certain columns
Getting Server Metadata
Problem
Solution
Discussion
Writing Applications That Adapt to the MySQL Server Version
Problem
Solution
Discussion
Determining the Default Database
Problem
Solution
Discussion
Monitoring the MySQL Server
Problem
Solution
Discussion
Determining Which Storage Engines the Server Supports
Problem
Solution
Discussion
Chapter 10 Importing and Exporting Data
Introduction
General Import and Export Issues
File Formats
Notes on Invoking Shell Commands
Importing Data with LOAD DATA and mysqlimport
Problem
Solution
Discussion
Specifying the Datafile Location
Problem
Solution
Discussion
Specifying the Structure of the Datafile
Problem
Solution
Discussion
Dealing with Quotes and Special Characters
Problem
Solution
Discussion
Importing CSV Files
Problem
Solution
Discussion
Reading Files from Different Operating Systems
Problem
Solution
Discussion
Handling Duplicate Key Values
Problem
Solution
Discussion
Obtaining Diagnostics About Bad Input Data
Problem
Solution
Discussion
Skipping Datafile Lines
Problem
Solution
Discussion
Specifying Input Column Order
Problem
Solution
Discussion
Preprocessing Input Values Before Inserting Them
Problem
Solution
Discussion
Ignoring Datafile Columns
Problem
Solution
Discussion
See Also
Exporting Query Results from MySQL
Problem
Solution
Discussion
Exporting with the SELECT ... INTO OUTFILE statement
Using the mysql client to export data
See Also
Exporting Tables as Text Files
Problem
Solution
Discussion
Exporting Table Contents or Definitions in SQL Format
Problem
Solution
Discussion
Copying Tables or Databases to Another Server
Problem
Solution
Discussion
Writing Your Own Export Programs
Problem
Solution
Discussion
Converting Datafiles from One Format to Another
Problem
Solution
Discussion
Extracting and Rearranging Datafile Columns
Problem
Solution
Discussion
Using the SQL Mode to Control Bad Input Data Handling
Problem
Solution
Discussion
Validating and Transforming Data
Problem
Solution
Discussion
Writing an input-processing loop
Putting common tests in libraries
Using Pattern Matching to Validate Data
Problem
Solution
Discussion
Using Patterns to Match Broad Content Types
Problem
Solution
Discussion
Using Patterns to Match Numeric Values
Problem
Solution
Discussion
Using Patterns to Match Dates or Times
Problem
Solution
Discussion
See Also
Using Patterns to Match Email Addresses or URLs
Problem
Solution
Discussion
Using Table Metadata to Validate Data
Problem
Solution
Discussion
Using a Lookup Table to Validate Data
Problem
Solution
Discussion
Issue individual statements
Construct a hash from the entire lookup table
Use a hash as a cache of already-seen lookup values
Converting Two-Digit Year Values to Four-Digit Form
Problem
Solution
Discussion
Performing Validity Checking on Date or Time Subparts
Problem
Solution
Discussion
Writing Date-Processing Utilities
Problem
Solution
Discussion
Using Dates with Missing Components
Problem
Solution
Discussion
Importing Non-ISO Date Values
Problem
Solution
Discussion
Exporting Dates Using Non-ISO Formats
Problem
Solution
Discussion
Importing and Exporting NULL Values
Problem
Solution
Discussion
Guessing Table Structure from a Datafile
Problem
Solution
Discussion
Exchanging Data Between MySQL and Microsoft Access
Problem
Solution
Discussion
Exchanging Data Between MySQL and Microsoft Excel
Problem
Solution
Discussion
Exporting Query Results as XML
Problem
Solution
Discussion
Importing XML into MySQL
Problem
Solution
Discussion
Epilogue
Chapter 11 Generating and Using Sequences
Introduction
Creating a Sequence Column and Generating Sequence Values
Problem
Solution
Discussion
Choosing the Data Type for a Sequence Column
Problem
Solution
Discussion
The Effect of Row Deletions on Sequence Generation
Problem
Solution
Discussion
Retrieving Sequence Values
Problem
Solution
Discussion
Using LAST_INSERT_ID( ) to obtain AUTO_INCREMENT values
Using API-specific methods to obtain AUTO_INCREMENT values
Server-side and client-side sequence value retrieval compared
Renumbering an Existing Sequence
Problem
Solution
Discussion
Extending the Range of a Sequence Column
Problem
Solution
Discussion
Reusing Values at the Top of a Sequence
Problem
Solution
Discussion
Ensuring That Rows Are Renumbered in a Particular Order
Problem
Solution
Discussion
Starting a Sequence at a Particular Value
Problem
Solution
Discussion
Sequencing an Unsequenced Table
Problem
Solution
Discussion
Using an AUTO_INCREMENT Column to Create Multiple Sequences
Paul DuBois was one of the first contributors to the online MySQL Reference Manual, a renowned documentation project that supported MySQL administrators and database developers in the first few years of MySQL's existence in the late 1990's. Paul went on to write more than six books on MySQL, including the first edition of "MySQL Cookbook". He is also the author of "Using csh & tcsh" and "Software Portability with imake", both by O'Reilly.
I needed a good mysql review - this was great for that purpose
By Edmonton Linux User Group
from Edmonton
Comments about oreilly MySQL Cookbook, Second Edition:
I do not have the original edition, but I do have a review of it in front of me as I write this. We are seeing approximately the same number of pages previously (under 1000), but now there are 287 recipes versus the previous 314, 20 chapters versus the previous 19, and four appendices. I can't say what what was taken out and what was added, so I am wondering if it may be worthwhile to locate the original edition, just in case I'm missing something useful.
Apparently, the original edition did not have much in the way of examples with various language APIs, but this edition has example code for Perl, PHP, Python, Java, and Ruby.
The organization seems typical of other books in the Cookbook series, so it should feel familiar. Though the book's audience is for database developers and DBAs, I think it could be used as an instructional manual, as the recipies start out with very basic MySQL client program interactions and build to using all kinds of useful features. And, of course, if/when you have a specific problem to solve, you can simply page to the appropriate chapter in the table of contents, and see if it's there.
I also found that it was a good book to browse through. I needed a good review before starting a new database project - I haven't actively done database for a bit - and this was great for that purpose. I was able to identify some solutions that are applicable to my project, so that was a definite bonus.
Great book. It will be kept handy while I'm working, and close at hand on my bookshelf, otherwise.
Comments about oreilly MySQL Cookbook, Second Edition:
At 900+ pages this book addresses a lot of common SQL tasks. And that's what a good cookbook should do. Not only does it present the SQL queries in the MySQL dialect, it also covers how to pump those queries through Pearl, Ruby, PHP, Python, and Java APIs.
As an added bonus you can actually use this book to learn SQL. I thought the chapter on JOINS was especially well written.
3/19/2008
(1 of 1 customers found this review helpful)
4.0
True to the Title
By Conrad Shultz
from Undisclosed
Comments about oreilly MySQL Cookbook, Second Edition:
As indicated, this book is true to its title. It is a cookbook, by which I mean it contains a great number of (generally useful) recipes of varying complexity, but lacks detail and analysis that a more focused text would have.
Mr. DuBois and O'Reilly publishing are clearly targeting a wide audience: the recipes range from frighteningly simple (e.g. 3.1, Specifying Which Columns to Select) to fairly sophisticated (e.g. 12.14, Performing a Join Between Tables in Different Databases). The recipes are typically clearly written, with ample supporting code examples and few typographical errors.
I must also note that Mr. DuBois nicely avoids a pitfall many authors (the competence of whom I have to question) in this genre encounter: failure to weave security considerations into the text. While other books often mention security as an afterthought, or worse include code examples featuring disasters like non-escaped strings (hello, SQL injection!), DuBois explicitly points out the need to sanitize input and writes code examples that demonstrate the use of prepared statements in best-practices.
Unfortunately, in other areas he is less thorough. For example, only passing mention is made of the (possible) dependence of FULLTEXT indexes on choice of storage engine. There is an entire chapter on handling duplicate rows, but the oft-needed (and non-obvious) process for removing pseudo-duplicate rows differing only by a primary key field is not directly addressed. Stored procedures, triggers, and other new additions to MySQL are among the least-well understood but most powerful features of the database engine, yet astonishingly little space is spent on them. (I could understand not discussing them in depth as there are other books available, but length did not seem to be a concern anywhere else in this book.)
In summary, the book is an excellent resource for novices and experts alike - but only as a starting point. To return to the cooking analogy, the book at times feels like it is loaded down with recipes on how to add sugar to flour, but omits recipes on how to ice the cake.
12/16/2007
5.0
For anybody who uses MySQL""
By Justin Pease
from Undisclosed
Comments about oreilly MySQL Cookbook, Second Edition:
Visuals
Good. Page numbers and section title can be found on the bottom of every page.
Audience
From the book: "This book should be useful for anybody who uses MySQL, ranging from individuals[...] to professional database and web developers."
That is a pretty broad range, basically from introductory to advanced. Nevertheless I would have to say that the book meets this challenge well. This book should be of use to anybody who uses MySQL.
Practicality:
I have to say that I have fallen for Cookbook style books. While I still thoroughly enjoy more theory heavy books, cookbooks can really deliver in the immediate practicality department.
The MySQL Cookbook is a good example of this. This book has dozens upon dozens of recipes that will likely have some measure of application in whatever MySQL dependent system you are working on.
Each recipe contains a brief "Problem" scenario, followed by an often equally brief "Solution", and finally a more lengthy discussion that shows how to actually implement the solution.
Overall
I am very pleased with this book. Mr. DuBois and O'Reilly did a great job. For instance, one of the things I especially like is that often multiple solutions are offered. For example if you were to look up Section 6.6 "Extracting Parts of Dates or Times" you will find the solution lists 3 possible options. The discussion section contains 5 pages of examples of how you might use those options to extract the desired data.
If you fit in to the intended audience of "anybody who uses MySQL", I would highly recommend this book.
5/27/2007
4.0
MySQL help!
By Dave Walz-Burkett
from Undisclosed
Comments about oreilly MySQL Cookbook, Second Edition:
The MySQL Cookbook weighs in at over 940 pages and will help you find quick answers to everything from beginner-level basics up through dba and software developer tricks.
The book is a collection of real-world tasks and compliments Paul's DuBois' other MySQL books very well. It goes beyond basic use and admin-level goodies - it has loads of code examples as well. As a software developer using MySQL for many projects, I find the MySQL Cookbook indispensible.
3/7/2007
5.0
Thick and Lovely
By Chris Charlton
from Undisclosed
Comments about oreilly MySQL Cookbook, Second Edition:
If you deal with MySQL on a daily or weekly basis then this book is a perfect go-to. So many scenarios (recipes) are covered, from simple to fairly advanced.
This second edition is almost twice as thick as the first, but that doesn't mean it's too much to handle since you wouldn't entirely read it from cover to cover because you'll want to go try out so much of it.
This really is worth space on a shelf (digital or not).