There is a newer Edition of our MySQL book
This book presents all of the SQL skills your students will need on the job, using MySQL, today’s most popular DBMS for web-based applications. So it’s ideal for a SQL or MySQL course. But beyond that, its professional slant will add real-world perspective when it’s used in a traditional database course.
The Canvas course file contains all the objectives, quizzes, assignments, and slides that you need to run an effective course. It only takes a few clicks to import it into the Canvas LMS. Then, you can customize it for your course. Learn more.
I chose this book for the MySQL class I teach. I’m glad I did. It’s thorough, accurate (with some simplification for beginners), and clearly written on complex topics. It offers great support for instructors and is reasonably priced for students.”
This section starts by presenting the concepts and terms for working with any database. Then, your students will learn (1) how to use MySQL Workbench to work with SQL statements and (2) how to code the basic SQL statements for retrieving, adding, updating, and deleting database data. When your students complete this section, you’ll be able to continue with any of the other sections in the book.
This section presents advanced SQL skills for retrieving data from a database. That includes working with summary queries, subqueries, data types, and functions. You can teach these chapters in whatever sequence you prefer, and you may want to defer some of them until later in the course.
This section first shows how to design and normalize a database structure. With that background, it shows how to use MySQL Workbench to create an EER (enhanced entity-relationship) model for a database.
Then, it shows how to implement that design by using the DDL (Data Definition Language) statements that are a part of SQL. Finally, it shows how to use views with a database to simplify data access and improve data security.
When your students are done, they’ll be able to design and implement databases and views. And they’ll have a new perspective that will make them better SQL programmers.
This section shows how powerful MySQL can be for creating reusable routines as stored programs. First, it covers MySQL's procedural language and shows how to manage transactions and locking from within a stored program. Then, it shows how to create and use 4 types of stored programs: stored procedures, functions, triggers, and events.
In this section, your students can learn a starting set of skills for becoming a database administrator (DBA). These skills include how to secure a database, how to back up a database, and how to restore a database.
Like all our books, this one has all of the Murach features that help your students learn faster and better. But here are a couple of features that are unique to this book.
Unlike most SQL books, this one starts by showing how to query an existing database rather than showing how to create a new database. Why?
For one thing, it’s motivating to see results right away, and querying provides that for your students; database design requires more study and background before you see results. But querying also helps to provide that background, giving your students insight into the kinds of decisions that have to be made in the design phase and the effects they have down the road.
As a result, doing querying first makes it easier for students to learn how to design and implement a database in section 3. And it also prepares them for using database features like stored procedures in section 4.
Unlike most MySQL books, this one shows how to use MySQL Workbench to enter and run SQL statements. MySQL Workbench is a graphical tool that’s an intuitive and user-friendly replacement for MySQL Command Line Client, a command-line program that has been around since the beginning of MySQL. In our experience, using MySQL Workbench instead of the command line helps students learn more quickly.
Like all our books, this one includes hundreds of examples. In this case, though, the examples are SQL statements that range from the simple to the complex. That way, your students can quickly get the idea of how a SQL feature works from the simple examples, but they’ll also see examples that illustrate real-world complexity...a feature that’s often missing in other MySQL books.
Although you can use this book with most versions of MySQL, we recommend that you use:
Both of these products can be downloaded for free from MySQL’s website. And appendixes A (for Windows) and B (for macOS) provide complete instructions for installing them.
Since MySQL is backwards compatible, all of the SQL statements presented in this book should also work with future versions of MySQL. In addition, most of the statements work with versions of MySQL earlier than MySQL 8.0, and we have done our best to identify any that don’t.
If your students use MySQL Workbench 8.0, all of the features presented in this book should work exactly as described. However, MySQL Workbench is being actively developed, so its functionality is improving all the time. As a result, you may want to use a later release. If you do, some features may not work exactly as described, but they’ll be similar enough that your students shouldn’t have any trouble with them.
"This book was the text in my Database Concepts class, and I am so thankful that it was! It provided excellent explanations and examples of database syntax, queries, subqueries, design, etc. It spent sufficient time breaking down difficult topics into the basic elements and then built off of those concepts to bring everything together. The book was reasonably priced too! I aced the class and decided to take more database classes because of this book."
- Posted at an online bookseller
"This is a fantastic book! It has more info than books at twice the cost, but it presents that info in a concise, digestible manner. I wish I had a resource like this when I was first starting with MySQL."
- Eric Chernoff, Team Leader, Cisco Systems
"A very solid book with plenty of breadth and lots of examples."
- David Bolton, C/C++/C# Guide at About.com
"I was amazed at how much information was packed into this book. The style of the book made it really easy to read and understand the information.”
- Paul Turpin, Southeastern Inter-Relational Database Users Group
"One thing I enjoyed is that the book is well-indexed, and the material itself is concise, with stand-alone, real-world examples. It’s not theoretical, it’s practical, and presents topics in a friendly style that can be consumed painlessly."
- Posted at an online bookseller
"If you ever want to learn to use MySQL, write SQL queries, create database elements, then this is the book to pick up. Rating: 10 Horseshoes."
- Review by Mohamed Sanaulla, JavaRanch.com
View the table of contents for this book in a PDF: Table of Contents (PDF)
Click on any chapter title to display or hide its content.
The hardware components of a client/server system
The software components of a client/server system
Other client/server architectures
How a table is organized
How tables are related
How columns are defined
How to read a database diagram
A brief history of SQL
A comparison of Oracle, DB2, Microsoft SQL Server, and MySQL
An introduction to the SQL statements
How to work with database objects
How to query a single table
How to join data from two or more tables
How to add, update, and delete data in a table
SQL coding guidelines
Common options for accessing MySQL data
PHP code that retrieves data from MySQL
Java code that retrieves data from MySQL
The Home page of MySQL Workbench
How to open a database connection
How to start and stop the database server
How to navigate through the database objects
How to view and edit the data for a table
How to view and edit the column definitions for a table
How to enter and execute a SQL statement
How to use snippets
How to handle syntax errors
How to open and save SQL scripts
How to enter and execute SQL scripts
How to view the manual
How to look up information
How to start and stop the MySQL Command Line Client
How to use the MySQL Command Line Client to work with a database
The basic syntax of the SELECT statement
SELECT statement examples
How to code column specifications
How to name the columns in a result set using aliases
How to code arithmetic expressions
How to use the CONCAT function to join strings
How to use functions with strings, dates, and numbers
How to test expressions by coding statements without FROM clauses
How to eliminate duplicate rows
How to use the comparison operators
How to use the AND, OR, and NOT logical operators
How to use the IN operator
How to use the BETWEEN operator
How to use the LIKE and REGEXP operators
How to use the IS NULL clause
How to sort by a column name
How to sort by an alias, expression, or column number
How to limit the number of rows
How to return a range of rows
How to code an inner join
How to use table aliases
How to join to a table in another database
How to use compound join conditions
How to use a self-join
How to join more than two tables
How to use the implicit inner join syntax
How to code an outer join
Outer join examples
How to join tables with the USING keyword
How to join tables with the NATURAL keyword
How to use cross joins
How to code a union
A union that combines result sets from different tables
A union that combines result sets from the same tables
A union that simulates a full outer join
How to create the tables for this book
How to create a copy of a table
How to insert a single row
How to insert multiple rows
How to insert default values and null values
How to use a subquery in an INSERT statement
How to update rows
How to use a subquery in an UPDATE statement
How to delete rows
How to use a subquery in a DELETE statement
How to code aggregate functions
Queries that use aggregate functions
How to code the GROUP BY and HAVING clauses
Queries that use the GROUP BY and HAVING clauses
How the HAVING clause compares to the WHERE clause
How to code compound search conditions
How to use the WITH ROLLUP operator
How to use the GROUPING function
How the aggregate window functions work
How to use frames
How to use named windows
Where to code subqueries
When to use subqueries
How to use the IN operator
How to use the comparison operators
How to use the ANY and SOME keywords
How to cde correlated subqueries
How to use the EXISTS operator
How to code subqueries in the HAVING clause
How to code subqueries in the SELECT clause
How to code subqueries in the FROM clause
A complex query that uses subqueries
A procedure for building complex queries
How to code a CTE
How to code a recursive CTE
Overview
The character types
The integer types
The fixed-point and floating-point types
The date and time types
The ENUM and SET types
The large object types
How implicit data conversion works
How to convert data using the CAST and CONVERT functions
How to convert data using the FORMAT and CHAR functions
A summary of the string functions
Examples that use string functions
How to sort by a string column that contains numbers
How to parse a string
How to use the numeric functions
How to search for floating-point numbers
How to get the current date and time
How to parse dates and times with date/time functions
How to parse dates and times with the EXTRACT function
How to format dates and times
How to perform calculations on dates and times
How to search for a date
How to search for a time
How to use the CASE function
How to use the IF, IFNULL, and COALESCE functions
How to use the regular expression functions
How to use the ranking functions
How to use the analytic functions
The basic steps for designing a data structure
How to identify the data elements
How to subdivide the data elements
How to identify the tables and assign columns
How to identify the primary and foreign keys
How to enforce the relationships between tables
How normalization works
How to identify the columns to be indexed
The seven normal forms
How to apply the first normal form
How to apply the second normal form
How to apply the third normal form
When and how to denormalize a data structure
How to open an existing EER model
How to create a new EER model
How to work with an EER model
How to work with an EER diagram
How to create and drop a database
How to select a database
How to create a table
How to code a primary key constraint
How to code a foreign key constraint
How to alter the columns of a table
How to alter the constraints of a table
How to rename, truncate, and drop a table
How to create an index
How to drop an index
How to work with the columns of a table
How to work with the indexes of a table
How to work with the foreign keys of a table
An introduction to character sets and collations
How to view character sets and collations
How to specify a character set and a collation
An introduction to storage engines
How to view storage engines
How to specify a storage engine
How views work
Benefits of using views
How to create a view
How to create an updatable view
How to use the WITH CHECK OPTION clause
How to insert or delete rows through a view
How to alter or drop a view
Four types of stored programs
A script that creates and calls a stored procedure
A summary of statements for coding stored programs
How to display data
How to declare and set variables
How to code IF statements
How to code CASE statements
How to code loops
How to use a cursor
How to declare a condition handler
How to use a condition handler
How to use multiple condition handlers
How to commit and rollback transactions
How to work with save points
How concurrency and locking are related
The four concurrency problems that locks can prevent
How to set the transaction isolation level
How to lock selected rows
How to prevent deadlocks
How to create and call a stored procedure
How to code input and output parameters
How to set a default value for a parameter
How to validate parameters and raise errors
A stored procedure that inserts a row
How to work with user variables
How to work with dynamic SQL
How to drop a stored procedure
How to create and call a function
How to use function characteristics
A function that calculates balance due
How to drop a function
How to view and edit stored routines
How to create stored routines
How to drop stored routines
How to create a BEFORE trigger
How to use a trigger to enforce data consistency
How to create an AFTER trigger
How to view or drop triggers
How to turn the event scheduler on or off
How to create an event
How to view, alter, or drop events
Database administrator responsibilities
Types of database files
Types of log files
How to view the server status
How to view and kill processes
How to view the status variables
How to view the system variables
How to set system variables using MySQL Workbench
How to set system variables using a text editor
How to set system variables using the SET statement
How to enable and disable logging
How to configure logging
How to view text-based logs
How to manage logs
An introduction to SQL statements for user accounts
A summary of privileges
The four privilege levels
The grant tables in the mysql database
How to create, rename, and drop users
How to specify user account names
How to grant privileges
How to view privileges
How to revoke privileges
How to change passwords
A script that creates users
How to create, manage, and drop roles
A script that creates users and roles
How to work with users and privileges
How to connect as a user for testing
A backup strategy
A restore strategy
How use mysqldump to back up a database
A SQL script file for a database backup
How to set advanced options for a database backup
How to use a SQL script file to restore a full backup
How to execute statements in the binary log
How to export data to a file
How to import data from a file
How to use the CHECK TABLE statement
How to repair a MyISAM table
How to repair an InnoDB table
How to use the mysqlcheck program
How to use the myisamchk program
How to install the MySQL Community Server
How to install MySQL Workbench
How to install the source files for this book
How to create the databases for this book
How to restore the databases
How to install the MySQL Community Server
How to install MySQL Workbench
How to install the source files for this book
How to create the databases for this book
How to restore the databases
If you aren’t already familiar with the supporting courseware that we provide for a book, please go to About our Courseware. As you will see, our courseware consists of the end-of-chapter activities in the book, the files in the student download at our retail site, and the instructor’s materials. These components provide everything that you get from other publishers, in a way that delivers better results.
If you are familiar with our courseware overall, here’s a quick summary of the courseware for this book. For a detailed description in PDF format, please read the Instructor's Summary.
Appendix A (for Windows) and appendix B (for macOS) in the book give your students complete instructions for downloading and installing these items on their own systems.
To view the "Frequently Asked Questions" for this book in a PDF, just click on this link: View the questions
Then, if you have any questions that aren't answered here, please email us. Thanks!
To view the corrections for this book in a PDF, just click on this link: View the corrections
Then, if you find any other errors, please email us so we can correct them in the next printing of the book. Thank you!
This is our site for college instructors. To buy Murach books, please visit our retail site.