|Murach's MySQL 3rd Edition|
Author: Joel Murach
This new edition of a popular title brings the material up to date to cover MySQL 8, and covers newer MySQL features such as window functions, Common Table Expressions (CTE), and roles for database security.
Like other Murach titles, this book uses a paired-page layout where new ideas are described on the left-hand page, and the right-hand page is used for examples of the concepts being introduced. So if the use of the Extract function to parse dates and times is described in words on the left-hand page, on the right-hand page you'll get the reference of the Extract function, a list of date and time units you can use in Extract, and some examples that use the Extract function.
I like this style of presentation; it's not chatty and discursive, but it covers the material in a detailed way with good examples that you can refer to without wading through descriptions.The book starts by introducing MySQL, with chapters on relational databases, the MySQL Workbench, and retrieving data from a single table and multiple tables, as well as insert, update and deleting data, all done using SQL.
Section 2 moves on to summary queries, subqueries, data types and functions. The chapter on summary queries goes as far as aggregate functions, group by, having, where, with rollup and grouping operators. It also looks at coding aggregate window functions and the use of frames. The chapter on subqueries started with adding subqueries to the Where clause, the use of In, All, and putting subqueries in Having, Select and From. It also looked at working with complex queries and using Common Table Expressions.
Section 3's topic is database design and implementation - enough for a big book in its own right. I don't know how well this section works; the material was well presented, but I'm not sure a page on designing a data structure that has instructions on 'identify the data elements; subdivide each element into its smallest useful components' would get you very far if you didn't know what you were doing. However, the book does show the commands you can use and gives examples of their use. The section goes on to show creating databases, tables, indexes and views.
The next section is probably the one of most interest to our audience - stored program development. It kicks off with a chapter on the language elements you need and how to write procedural code. There's a good chapter on transactions and locking, with a subsection on working with concurrency and locking. Chapters on stored procedures and functions, and working with triggers and events complete this section.
The final part of the book is on database administration. There are useful chapters on securing a database and backing up and restoring a database. Two appendixes end the book looking at how to install MySQL for Windows and MacOS.
This is a thorough book, and the topics are covered well, including new material such as window functions and Common Table Expressions (CTE). One point to note is that the book is very similar to the equivalent Murach title for SQL Server - MySQL specifics are all correct, but much of the general material is presented without much change. That's not necessarily a criticism, just an observation if you happen to already have the SQL Server version of the book. Overall, this is a good, solid book that presents everything you need to use MySQL.