Errata

Learning MySQL and MariaDB

Errata for Learning MySQL and MariaDB

Submit your own errata for this product.

The errata list is a list of errors and their corrections that were found after the product was released.

The following errata were submitted by our customers and have not yet been approved or disproved by the author or editor. They solely represent the opinion of the customer.

Color Key: Serious technical mistake Minor technical mistake Language or formatting error Typo Question Note Update

Version Location Description Submitted by Date submitted
Printed Page xx
United States

Last sentence of paragraph 2, says "bu the rest is the same." I think it should state "but the rest is the same."

Andrew Lynch  Jun 08, 2015 
Other Digital Version Your Future in Learning MySQL and MariaDB
only paragraph; also Preface, 5th paragraph (I am using the Proquest Safari Books Online version, which does not use page numbers)

30 years > 20 years

Paul Weiss  Jul 28, 2015 
Other Digital Version Page 221
6th paragraph

If I entered this statement during a different quarter, it would return results for the wrong quarter (the previous one)

should be

If I entered this statement during a different quarter, it would return results for the wrong year (the previous one)

ken yuan  Jul 16, 2016 
Ch 2 Section Creating a User
3rd codebox

Found in Chapter 2: Section: Creating a User
A `singlequote` is missing before `at`.

mysql -u root -p -e "SHOW GRANTS FOR 'russell@'localhost' \G"

Thanks, John

John Fresco  May 24, 2019 
Printed Page Subject: Learning Mysql and MariaDB Page 23 root@solydx:/BackupStore/databases/addressesx# groupa
Page23

Page 23


root@solydx:/BackupStore/databases/addressesx# groupadd mariadb
bash: groupadd: command not found
root@solydx:/BackupStore/databases/addressesx# cd /usr/local
root@solydx:/usr/local# tar xvfz /tmp/mysql-version.tar.gz
tar (child): /tmp/mysql-version.tar.gz: Cannot open: No such file or
directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
root@solydx:/usr/local# cd /usr/local/mariadb
bash: cd: /usr/local/mariadb: No such file or directory
root@solydx:/usr/local# cd /usr/local/mysql
bash: cd: /usr/local/mysql: No such file or directory
root@solydx:/usr/local#

I am definitely not impressed by its response to a standard Debian 9
installation.



martin Welsh

martin welsh  Jan 05, 2022 
4
Chapter 4

INSERT INTO birdwatchers.humans(name_first, name_last, email_address)VALUES('Mr.', 'Russell', 'Dyer', 'russell@mysqlresources.com'),('Mr.', 'Richard', 'Stringer', 'richard@mysqlresources.com'),('Ms.', 'Rusty', 'Osborne', 'rusty@mysqlresources.com'),('Ms.', 'Lexi', 'Hollar', 'alexandra@mysqlresources.com');

forgot to add formal_title

Anonymous  Apr 15, 2017 
4
About 75% through the Subsection "More Perspectives on Tables" in Chapter 4

THE SAFARI BOOKS PRESENTATION OF THIS BOOK DOES NOT SHOW PAGE NUMBERS.

This issue is located in:

Chapter 4 - Creating Databases and Tables
Subsection: More Perspectives on Tables
About 75% through the Section.

The issue is one of CONFUSION rather than error per se.

Previously, the book had introduced the topic of Character Sets (CHARSET) and Collations (COLLATE). This was presented without issue in regards to the birds Table in the previous subsection and at the top of this Section using a CHARSET=latin1 and COLLATE=latin1_bin.

Later, readers are encouraged to create a bird_orders Table:

CREATE TABLE bird_orders (
order_id INT AUTO_INCREMENT PRIMARY KEY,
scientific_name VARCHAR(255) UNIQUE,
brief_description VARCHAR(255),
order_image BLOB
) DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci ;

This WORKS, but when reviewing the results, with the SHOW CREATE TABLE client command, one doesn't get any indication that the COLLATION was properly set:

Table: bird_orders
Create Table: CREATE TABLE `bird_orders` (
`order_id` int(11) NOT NULL AUTO_INCREMENT,
`scientific_name` varchar(255) DEFAULT NULL,
`brief_description` varchar(255) DEFAULT NULL,
`order_image` blob DEFAULT NULL,
PRIMARY KEY (`order_id`),
UNIQUE KEY `scientific_name` (`scientific_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

After further investigation, it APPEARS that the problem is that the specified Collation is the DEFAULT: COLLATE=utf8_general_ci .

If, instead of using the system DEFAULT Collation, I select another non-default Collation, such as German -- utf8_german2_ci -- then the SHOW CREATE TABLE command identifies the Collation:

CREATE TABLE bird_orders (
order_id INT AUTO_INCREMENT PRIMARY KEY,
scientific_name VARCHAR(255) UNIQUE,
brief_description VARCHAR(255),
order_image BLOB
) DEFAULT CHARSET=utf8 COLLATE=utf8_german2_ci ;

*

SHOW CREATE TABLE bird_orders \G

yields:

Table: bird_orders
Create Table: CREATE TABLE `bird_orders` (
`order_id` int(11) NOT NULL AUTO_INCREMENT,
`scientific_name` varchar(255) COLLATE utf8_german2_ci DEFAULT NULL,
`brief_description` varchar(255) COLLATE utf8_german2_ci DEFAULT NULL,
`order_image` blob DEFAULT NULL,
PRIMARY KEY (`order_id`),
UNIQUE KEY `scientific_name` (`scientific_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_german2_ci
1 row in set (0.00 sec)

* * * * *

My point here is that the FEEDBACK from the SHOW CREATE TABLE command seems to suggest that the COLLATE isn't taking, when, in fact, the issue seems to be that the Collation information is simply suppressed by the SHOW CREATE TABLE command when the specification is to the DEFAULT collation.

The absence of an explanation of this leads to some confusion and dissonance. Use of a non-default collation, such as German (utf8_german2_ci) avoids this confusion.

I spent some otherwise unnecessary time trying to determine WHY the COLLATE wasn't taking, though I learned a little about character sets and collation in the process.

I hope this helps someone else or the treatment of the default collation by the SHOW CREATE TABLE is noted in a future edition.

Thanks!

William A. Roper, Jr.  Apr 15, 2018 
4
ABout 1/3 of the way through Topic "Creating Tables" in Chapter 4

NOTE: THE SAFARI BOOKS ONLINE PRESENTATION OF THE BOOK Learning MySQL and MariaDB DOES NOT CONTAIN PAGE NUMBERS.

LOCATION:

Chapter 4 - Creating Databases and Tables
Topic Creating Tables
Paragraph beginning with the words: "The next column will contain the scientific name of each bird ..."

There is a minor grammatical error due to the apparent omission of a word.

The sentence which reads "In addition, would be awkward to enter ..." was probably intended to begin "In addition, IT would be awkward to enter ..."

Obviously, this is a minor issue, but might merit correct in a future printing or edition.

Thanks!

William A. Roper, Jr.  Apr 16, 2018 
5
About 60% of the way through this section.

NO PAGE NUMBERS GIVEN IN SAFARI BOOKS PRESNENTATION OF THE BOOK.

At Chapter 5 -- Altering Tables
Topic: "Essential Changes"

Half way down the page.

We are encouraged to make this alteration in the table birds.new:

MariaDB [test]> ALTER TABLE birds_new
-> MODIFY COLUMN endangered
-> ENUM('Extinct',
-> 'Extinct in Wild',
-> 'Threatened - Critically Endangered',
-> 'Threatened - Endangered',
-> 'Threatened - Vulnerable',
-> 'Lower Risk - Conservation Dependent',
-> 'Lower Risk - Near Threatened',
-> 'Lower Risk - Least Concern')
-> AFTER family_id ;

This yields this error message:

ERROR 1265 (01000): Data truncated for column 'endangered' at row 1

*

IT APPEARS THAT THIS MESSAGE ARISES BECAUSE THE field endangered IS POPULATED WITH SOME BIT DATA.

I UPDATED THE FIELD TO SET ALL VALUES TO NULL:

MariaDB [test]> UPDATE birds_new
-> SET endangered = Null ;

Thereafter, the command specified in the book allowed for the indicated column change:

MariaDB [test]> ALTER TABLE birds_new
-> MODIFY COLUMN endangered
-> ENUM('Extinct',
-> 'Extinct in Wild',
-> 'Threatened - Critically Endangered',
-> 'Threatened - Endangered',
-> 'Threatened - Vulnerable',
-> 'Lower Risk - Conservation Dependent',
-> 'Lower Risk - Near Threatened',
-> 'Lower Risk - Least Concern')
-> AFTER family_id ;
Query OK, 0 rows affected (0.05 sec)
Records: 0 Duplicates: 0 Warnings: 0

* * * * *

The error message wasn't overly informative. This was still a learning experience for me, but others less familiar with languages and computer programming might very well find the anomaly to be confusing!

William A. Roper, Jr.  Apr 15, 2018 
5
About 70% of the way through the Topic "Essential Changes" in Chapter 5

THERE ARE NO PAGE NUMBERS GIVEN IN SAFARI BOOKS PRESNENTATION OF THE BOOK.

At Chapter 5 -- Altering Tables
Topic: "Essential Changes"
About 70% through the topic.

Within the paragraph beginning "To set the values in a column that has an enumerated list ..." we are later told:

"For instance, you could do an UPDATE statement like this to set all birds in the table to Lower Risk - Least Concern, the seventh value:

UPDATE birds_new
SET endangered = 7 ;"

However, a review and inspection of the prior guidance shows that the ENUM data type declaration specified EIGHT values for endangered:

ALTER TABLE birds_new
-> MODIFY COLUMN endangered
-> ENUM('Extinct',
-> 'Extinct in Wild',
-> 'Threatened - Critically Endangered',
-> 'Threatened - Endangered',
-> 'Threatened - Vulnerable',
-> 'Lower Risk - Conservation Dependent',
-> 'Lower Risk - Near Threatened',
-> 'Lower Risk - Least Concern')
-> AFTER family_id ;

The SEVENTH of these values was 'Lower Risk - Near Threatened',
while the EIGHTH value was 'Lower Risk - Least Concern'.

Setting the value for endangered to 7 as directed should yield the enumerated endangered indication of 'Lower Risk - Near Threatened',
rather than 'Lower Risk - Least Concern'.

To set the value to 'Lower Risk - Least Concern', readers should specify this MySQL:

UPDATE birds_new
SET endangered = 8 ;

Thanks!

William A. Roper, Jr.  Apr 16, 2018 
5
About 25% of the way through the Topic "Optional Changes - Setting a Column's Default Value" in Chapter 5

THERE ARE NO PAGE NUMBERS GIVEN IN SAFARI BOOKS PRESNENTATION OF THE BOOK.

At Chapter 5 -- Altering Tables
Topic: "Optional Changes - Setting a Column's Default Value"
About 25% through the topic.

Within the paragraph beginning "We named the reference table conservation_status ...", the last sentence reads:

"We'll put Lower Risk in the conservation_category column and Least Concern in another column called, conservation_category."

It is clear that it is intended to describe two different fields and from context the sentence should probably read:

"We'll put Lower Risk in the conservation_category column and Least Concern in another column called, conservation_state."

* * * * *

This might be the same errata item noted by Anonymous on Oct 18, 2016 as appearing on Page 72 of the print edition.

William A. Roper, Jr.  Apr 16, 2018 
5
About 60% of the way through the Topic "Optional Changes - Setting a Column's Default Value" in Chapter 5

THERE ARE NO PAGE NUMBERS GIVEN IN SAFARI BOOKS PRESNENTATION OF THE BOOK.

At Chapter 5 -- Altering Tables
Topic: "Optional Changes - Setting a Column's Default Value"
About 60% through the topic.

There appears a paragraph which begins with these two sentences:

"Notice that we have been prefixing the table name with the database name (i.e. rookery.conservation_status). That's because we had set the default database to test with USE."

It is TRUE that we had been using a different database than rookery. However, UNLESS the reader SKIPPED the section on "Dynamic Columns," the most recent USE statement was "USE birdwatchers" rather than "USE test."

* * *

The LAST USE statement seems to have been set within the "Dynamic Columns" subtopic in the Topic "Essential Changes" in Chapter 5 ("Altering Tables):

USE birdwatchers;

This is shown about 75% of the way through the Topic "Essential Changes."

* * * * *

This is a rather persnickety typo, but probably should be corrected in a future edition.

Thanks!

William A. Roper, Jr.  Apr 16, 2018 
5
About 60% of the way through the Topic "Optional Changes - Another Method to Alter and Create a Table" in Chapter 5

THERE ARE NO PAGE NUMBERS GIVEN IN SAFARI BOOKS PRESNENTATION OF THE BOOK.

At Chapter 5 -- Altering Tables
Topic: "Optional Changes - Another Method to Alter and Create a Table"
About 55% through the topic.

In yet another instance of an inconsistency which causes confusion and distraction, we are given inconsistent information regarding the correct AUTO-INCREMENT value for table birds.

This text appears within the book:

"In this excerpt of the results, you can see that the variable, AUTO_INCREMENT is currently 6. Set AUTO_INCREMENT to the same value in the birds_new table by entering the following SQL statement in MySQL:

ALTER TABLE birds_new
AUTO_INCREMENT = 6 ; "

However, if one actually checks the value, the value is set to 10. This is because it was previously MANUALLY CHANGED in the prior lesson.

* * *

Within the immediate preceding topic "Setting the Value of AUTO_INCREMENT" the reader is instructed:

"Enter the following in MySQL:

USE rookery

ALTER TABLE birds
AUTO_INCREMENT = 10 ;

This will cause the bird_id to be set to 10 for the next row of data on a bird that we enter into the birds table."

If the reader follows this instruction, the the value of AUTO_INCREMENT will be 10 rather than 7 as erroneously shown in the subsequent section.

* * * * *

Thanks!

William A. Roper, Jr.  Apr 16, 2018 
6

NOTE: THE SAFARI BOOKS ONLINE PRESENTATION OF THE BOOK Learning MySQL and MariaDB DOES NOT CONTAIN PAGE NUMBERS.

Chapter 6 - Inserting Data
Topic: "Practical Examples - The Table for Bird Families"
The issue begins about 20% through this section with the treatment by the server of the suggested MySQL client statement:

INSERT INTO bird_families
-> VALUES ('Anatidae', "This family includes ducks, geese and swans.", NULL, 103) ;

The book indicates that the user will get a Warning message, but that the data will be entered into the bird_families table.

I received a different result, an ERROR message and the presented row DID NOT TAKE AT ALL:

MariaDB [rookery]> INSERT INTO bird_families
-> VALUES ('Anatidae', "This family includes ducks, geese and swans.", NULL,
103) ;
ERROR 1366 (22007): Incorrect integer value: 'Anatidae' for column 'family_id' at row 1

I DID also seek to verify the warning and received this response:

MariaDB [rookery]> SHOW WARNINGS \G
*************************** 1. row ***************************
Level: Error
Code: 1366
Message: Incorrect integer value: 'Anatidae' for column 'family_id' at row 1
1 row in set (0.00 sec)

* * * * *

I am using MariaDB Ver. 10.2.14 [mysql Ver 15.1 Distrib 10.2.14-MariaDB, for Win64 (AMD64)].

I am presuming that there has been some change in the treatment of anomalous data inserts since the book was published. I am making a note of the different outcome for the benefit of the editors, author and other readers. I will try to troubleshoot this more later, but do not intend to take further time from the chapter now.

Suffice it to say that the paragraphs explaining how the anomalous data was going to populate the row didn't seem to apply to me.

* * * * *

Thanks!

William A. Roper, Jr.  Apr 17, 2018 
7
Chapter 7 - Selecting Data, Within Paragraph 2 of the 1st page.

THERE ARE NO PAGE NUMBERS GIVEN IN SAFARI BOOKS PRESENTATION OF THE BOOK.

At Chapter 7 -- Selecting Data
Within Paragraph 2 of the 1st page.

The last sentence of the 2nd paragraph (beginning "The simplest was to retrieve data from ...") reads:

"It's not necessary to know or use all of the may options, but some techniques such as joining tables together are basic to using relational databases."

The word "may" within this sentence probably should have read "many," yielding:

"It's not necessary to know or use all of the many options, but some techniques such as joining tables together are basic to using relational databases."



William A. Roper, Jr.  Apr 18, 2018 
Printed Page 32
United States

6 lines down 'hep Data Manipulation" should be "help data Manipulation"

Andrew Lynch  Jun 09, 2015 
PDF Page 52
The INSERT INTO example in the middle of the page

The insert statement inserts into 3 columns:
(name_first, name_last, email_address)

But the data inserted has 4 values:
('Mr.', 'Russell', 'Dyer', 'russell@mysqlresources.com')

The insert statement should insert into:
(formal_title, name_first, name_last, email_address)

YellowMegaMan  Sep 17, 2015 
PDF Page 52
2nd Code

INSERT INTO birdwatchers.humans
(name_first, name_last, email_address)
VALUES
('Mr.', 'Russell', 'Dyer', 'russell@mysqlresources.com'),
('Mr.', 'Richard', 'Stringer', 'richard@mysqlresources.com'),
('Ms.', 'Rusty', 'Osborne', 'rusty@mysqlresources.com'),
('Ms.', 'Lexi', 'Hollar', 'alexandra@mysqlresources.com');

should be

INSERT INTO birdwatchers.humans
(formal_title, name_first, name_last, email_address)
VALUES
('Mr.', 'Russell', 'Dyer', 'russell@mysqlresources.com'),
('Mr.', 'Richard', 'Stringer', 'richard@mysqlresources.com'),
('Ms.', 'Rusty', 'Osborne', 'rusty@mysqlresources.com'),
('Ms.', 'Lexi', 'Hollar', 'alexandra@mysqlresources.com');

uthuts  Feb 25, 2016 
Printed Page 63
United States

The paragraph "Looking over the results..." the word "six" should be "five", as the original birds table only contained 5 columns.

Andrew  Jul 16, 2015 
Printed Page 63
Code output

Data type of 'scientific_name' column should be `varchar(255)` instead of `varchar(100)`.

Anonymous  Oct 18, 2016 
PDF Page 66-67
result of entering SQL

Get following error after entering listed SQL;
ERROR 1265 (01000) Data truncated for column 'endangered' at row 1
Had to DROP COLUMN then ADD COLUMN to get table to match?

Anonymous  Oct 06, 2015 
Printed Page 70
Final Line

The resources website address mysqlresources.com/files cannot be accessed, providing the following error message:

PDOException: SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111 "Connection refused") in lock_may_be_available() (line 167 of /var/www/mysqlresources/includes/lock.inc).

This will make following later examples impossible.

Lee Nash  Apr 17, 2017 
Printed Page 72
1st sentenc

Column name used at the end of the sentence continuation from the previous page should be `conservation_state` instead of `conservation_category`.

Anonymous  Oct 18, 2016 
Printed Page 76
First paragraphs

The 'AUTO_INCREMENT` variable should be equal to 7, since there are 6 birds in the table already. See page 74.

Anonymous  Oct 18, 2016 
Printed Page 96
Status line in last code block

SQL statement returns an error, instead of a warning.

Anonymous  Oct 20, 2016 
Printed Page 119

The database 'rookery' suggested on page 119 to be downloaded from 'mysqlresources.com/files' appears to incomplete. The 'select' examples starting on pages 122, 123 do not produce the results shown in the book. A closer look at the downloaded tables 'bird_families' and 'birds' show that some or all of the 'select' columns and the 'where' restrictions in the examples are not contained in the downloaded tables. There may be more inconsistencies but I haven't progressed beyond page 123. Am I wrong here? Without downloaded tables that correspond to the examples in the book, learning by following the book becomes difficult, frustrating and close to impossible.

Earl Cook  Jun 11, 2015 
PDF Page 119
3rd paragraph

Without the downloadable material from the printed web site, this book is useless since the exercises follow the database with the downloadable resources. I will not use this textbook again with my course.

Note from the Author or Editor:
Apologies; the author had a server problem and the content of all his websites was deleted. He is working to re-create the downloadable databases, but it is slow going. --O'Reilly

Leisa Zuccolotto  Mar 29, 2018 
Printed Page 146
Top

The final code sample under "Updating Multiple Tables" in Chapter 8 is not correct.
The author is correct in saying, "...there's no problem with using the ORDER BY clause in it." in the sense that the code executes without throwing an error. But, the code fails in that the output is not random. MySQL parses the rows of prize_winners in its own order. When it checks whether a human_id value is IN something else, it does not care what the order of the something else is. The update proceeds in MySQL's row order of prize_winners until the limit of 2 updates is reached.

Yes, MySQL performs the subquery first before evaluating the IN for each row, but that does not change the order of the rows being evaluated.

Below is some test code to show that I am correct. The test code runs in the birdwatchers database. It assumes that the birdwatchers database has been loaded from learningmariadb-ch08-start.sql, as extracted from Archive.zip at <https://resources.oreilly.com/examples/0636920029175> and that the the prize_winners table has been populated by the following query from page 143 of the book.

INSERT INTO prize_winners (human_id) SELECT human_id FROM humans;

Alternatively, if you do not want to reload the database, just run the following query on your existing birdwatchers database, and the test code should work fine.

UPDATE prize_winners SET winner_date=NULL;

# = = = = = Begin Test Code = = = = =
# Put more people in the UK to make the test more credible.
UPDATE humans SET country_id = 'uk'
WHERE country_id IS NULL;

# Look at the current data.
SELECT winner_id, winner_date, country_id
FROM prize_winners JOIN humans USING (human_id);

# Select three times using the same "order by"
# construct as in the book's update statement.

SELECT winner_id FROM prize_winners WHERE
winner_date IS NULL AND human_id IN
(SELECT human_id FROM humans WHERE country_id='uk'
ORDER BY RAND())
LIMIT 2;

SELECT winner_id FROM prize_winners WHERE
winner_date IS NULL AND human_id IN
(SELECT human_id FROM humans WHERE country_id='uk'
ORDER BY RAND())
LIMIT 2;

SELECT winner_id FROM prize_winners WHERE
winner_date IS NULL AND human_id IN
(SELECT human_id FROM humans WHERE country_id='uk'
ORDER BY RAND())
LIMIT 2;

# Note that the result was the same each time.
# Now execute the update as shown in the book.

UPDATE prize_winners
SET winner_date = CURDATE()
WHERE winner_date IS NULL
AND human_id IN
(SELECT human_id
FROM humans
WHERE country_id = 'uk'
ORDER BY RAND())
LIMIT 2;

# Look at the data.
SELECT winner_id, winner_date, country_id
FROM prize_winners JOIN humans USING (human_id);

# Reset the data.
UPDATE prize_winners SET winner_date=NULL;

# Execute again and look
UPDATE prize_winners
SET winner_date = CURDATE()
WHERE winner_date IS NULL
AND human_id IN
(SELECT human_id
FROM humans
WHERE country_id = 'uk'
ORDER BY RAND())
LIMIT 2;
SELECT winner_id, winner_date, country_id
FROM prize_winners JOIN humans USING (human_id);

# Reset and repeat
UPDATE prize_winners SET winner_date=NULL;
UPDATE prize_winners
SET winner_date = CURDATE()
WHERE winner_date IS NULL
AND human_id IN
(SELECT human_id
FROM humans
WHERE country_id = 'uk'
ORDER BY RAND())
LIMIT 2;
SELECT winner_id, winner_date, country_id
FROM prize_winners JOIN humans USING (human_id);
#= = = = = End Test Code = = = = =

You should have seen that the same rows got updated each time.

= = THE SOLUTION = =
The following code will work as the author intended.

UPDATE prize_winners
SET winner_date = CURDATE()
WHERE winner_date IS NULL
AND human_id IN
(SELECT human_id
FROM humans
WHERE country_id = 'uk')
ORDER BY RAND() LIMIT 2;

Arnold Cross  Aug 22, 2019 
PDF Page 152
4th paragraph

Exercise 2 of chapter 8 references an example of `DATE_ADD()` on page 138 but no such example exists. This exercise is the first appearance of `DATE_ADD()` in the book.

Gabriel Perdue  Jul 19, 2015 
Other Digital Version 169
1st paragraph

It orders the rows with newer members first based on the date the members joined ...

if you really wanted newer member come out first, you should use

ORDER BY join_date DESC

is SQL example

ken yuan  Jul 15, 2016 
Printed Page 191
Code block

Code is missing a second open parenthesis on the first line. The SQL query should read:

`SELECT IF((CHAR......'

instead of:

`SELECT IF(CHAR......'

Anonymous  Oct 21, 2016 
PDF Page 193
3rd paragraph

The text references using a `WHERE` clause in a `SELECT` statement. You cannot use a `WHERE` clause in a `SELECT` statement.

Gabriel Perdue  Sep 15, 2015 
Other Digital Version 216
paragraph beginnng with "This"

There are 6 rows in the "birds_new" table.
The UPDATE statement changes four rows, but leaves TWO unchanged - "where bird_id = 3" or 6

Gregory Sherman  Jun 06, 2017 
Printed Page 227
2nd paragraph

The questions asks the reader to use the `DATESUB()` function. The correct function name is `DATE_SUB()`.

Anonymous  Oct 24, 2016 
Printed Page 227
2nd paragraph

The third part of the question asks the reader to use the `ADD_DATE()` function. The correct function is actually `ADDDATE()`.

Anonymous  Oct 24, 2016 
Printed Page 339
and 341 - Sample C Code

The variable mysql is a null pointer when it's passed to mysql_init(). That's legal, but in that case, you are supposed to save the return value from the function, and it's not doing that either. My solution is to create a local variable of type MYSQL and use that to initialize mysql

MYSQL mysql_storage;
mysql = &mysql_storage;

if ( mysql_inti(mysql) ) ....

Peter Fales  Nov 09, 2019 
Other Digital Version 359
bottom of left column

There is no file named rookery.sql to dowload from http://mysqlresources.com/files/mysql-learning

Anonymous  Jun 09, 2017