| | | | | | | | | | | | | | | | |
Table of Contents
1. General
Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1 About
This Manual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1.1
Conventions Used in This Manual
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
1.2 What
Is MySQL? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2.1
History of MySQL . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 5
1.2.2
The Main Features of MySQL
. . . . . . . . . . .
. . . . . . .
. . . . . . . . . .
. . . . . . .
. . . . . . . 5
1.2.3
How Stable Is MySQL?
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 7
1.2.4
How Big Can MySQL Tables Be?
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 8
1.2.5
Year 2000 Compliance . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 9
1.3 What
Is MySQL AB? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.3.1
The Business Model and Services
of MySQL AB. . . . . . . . . . . . . . . . . . . . . . . . .11
1.3.1.1
Support . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 12
1.3.1.2
Training and Certification
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . .12
1.3.1.3
Consulting . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 13
1.3.1.4
Commercial Licenses . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . .13
1.3.1.5
Partnering . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . .. 13
1.3.1.6
Advertising . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 14
1.3.2
Contact Information . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 14
1.4 MySQL
Support and Licensing . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 15
1.4.1
Support Oered by MySQL AB.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 15
1.4.2
Copyrights and Licenses Used
by MySQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 16
1.4.3
MySQL Licenses. . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 16
1.4.3.1
Using the MySQL Software
Under a Commercial License . . . . . . . . . . . . . .17
1.4.3.2
Using the MySQL Software
for Free Under GPL . . . . . . . . . . . . . . . . . . . . . . . 17
1.4.4
MySQL AB Logos and Trademarks
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18
1.4.4.1
The Original MySQL Logo.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . .18
1.4.4.2
MySQL Logos that may be Used
Without Written Permission . . . . . . . . . . .18
1.4.4.3
When do you need a Written
Permission to use MySQL Logos? . . . . . . . . 19
1.4.4.4
MySQL AB Partnership Logos
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 19
1.4.4.5
Using the word MySQL in Printed
Text or Presentations. . . . . . . . . . . . . . . .19
1.4.4.6
Using the word MySQL in Company
and Product Names . . . . . . . . . . . . . . 20
1.5 MySQL
4.0 In A Nutshell . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 20
1.5.1
Stepwise Rollout. . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 20
1.5.2
Ready for Immediate Development
Use . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.5.3
Embedded MySQL . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . 20
1.5.4
Other Features Available
From MySQL 4.0.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . .21
1.5.5
Future MySQL 4.0 Features
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . .21
1.5.6
MySQL 4.1, The Following
Development Release . . . . . . . . . . . . . . . . . . . . . . .22
1.6 MySQL
Information Sources . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .22
1.6.1
MySQL Portals . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . .22
1.6.2
MySQL Mailing Lists . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . .23
1.6.2.1
The MySQL Mailing Lists .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . .23
1.6.2.2
Asking Questions or Reporting
Bugs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.6.2.3
How to Report Bugs or Problems
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .26
1.6.2.4
Guidelines for Answering
Questions on the Mailing List . . . . . . . . . . . . . . . 30
1.7 How
Standards-compatible Is MySQL?. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 30
1.7.1
What Standards Does MySQL
Follow? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
1.7.2
Running MySQL in ANSI Mode
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . .31
1.7.3
MySQL Extensions to ANSI
SQL92 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . 32
1.7.4
MySQL Dierences Compared
to ANSI SQL92. . . . . . . . . . . . . . . . . . . . . . . . . . .34
1.7.4.1
SubSELECTs . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . .34
1.7.4.2
SELECT INTO TABLE . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . .35
1.7.4.3
Transactions and Atomic Operations
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .35
1.7.4.4
Stored Procedures and Triggers
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .38
1.7.4.5
Foreign Keys . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 38
1.7.4.6
Views . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . .39
1.7.4.7
`--' as the Start of a Comment
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 40
1.7.5
Known Errors and Design De
ciencies in MySQL . . . . . . . . . . . . . . . . . . . . . . .40
1.8 MySQL
and The Future (The TODO) . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 43
1.8.1
Things That Should be in
4.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . .44
1.8.2
Things That Should be in
4.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . .44
1.8.3
Things That Must be Done
in the Near Future. . . . . . . . . . . . . . . . . . . . . . . . . . .45
1.8.4
Things That Have to be Done
Sometime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
1.8.5
Things We Don't Plan To Do.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . .49
1.9 How
MySQL Compares to Other Databases . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . 50
1.9.1
How MySQL Compares to mSQL
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
50
1.9.1.1
How to Convert mSQL Tools
for MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .53
1.9.1.2
How mSQL and MySQL Client/Server
Communications Protocols Dif . . . 53
1.9.1.3
How mSQL 2.0 SQL Syntax Differs
from MySQL . . . . . . . . . . . . . . . . . . . . . . .54
1.9.2
How MySQL Compares to PostgreSQL
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .56
1.9.2.1
MySQL and PostgreSQL development
strategies . . . . . . . . . . . . . . . . . . . . . 56
1.9.2.2
Featurewise Comparison of
MySQL and PostgreSQL . . . . . . . . . . . . . . . . . 57
1.9.2.3
Benchmarking MySQL and PostgreSQL
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
2 MySQL
Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .65
2.1 Quick
Standard Installation of MySQL. . . . . . . . . . . . . . . . . . . . . .
. . . . . . .. . . . . . . . 65
2.1.1
Installing MySQL on Linux.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . 65
2.1.2
Installing MySQL on Windows
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
2.1.2.1
Installing the Binaries .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . .67
2.1.2.2
Preparing the Windows MySQL
Environment . . . . . . . . . . . . . . . . . . . . . 67
2.1.2.3
Starting the Server for the
First Time . . . . . . . . . . . . . . . . . . . . . . . . . . . . .69
2.2 General
Installation Issues . . . . . . . . . . . . . . . . . . . . .. . . . . . .
. . . . . . . . . . . . . . . . . .69
2.2.1
How to Get MySQL . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . .69
2.2.2
Operating Systems Supported
by MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . .69
2.2.3
Which MySQL Version to Use
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .71
2.2.4
Installation Layouts. . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . 74
2.2.5
How and When Updates Are
Released. . . . . . . . . . . . . . . . . . . . . . . . . . . . .74
2.2.6
MySQL Binaries Compiled by
MySQL AB. . . . . . . . . . . . . . . . . . . . . . . . . . . .75
2.2.7
Installing a MySQL Binary
Distribution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
2.3 Installing
a MySQL Source Distribution. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 79
2.3.1
Quick Installation Overview
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. .80
2.3.2
Applying Patches . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . .83
2.3.3
Typical configure Options
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 83
2.3.4
Installing from the Development
Source Tree. . . . . . . . . . . . . . . . . . . . . . . 86
2.3.5
Problems Compiling? . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 87
2.3.6
MIT-pthreads Notes . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . 89
2.3.7
Windows Source Distribution
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .90
2.4 Post-installation
Setup and Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . .91
2.4.1
Problems Running mysql_install_db
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .95
2.4.2
Problems Starting the MySQL
Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
2.4.3
Starting and Stopping MySQL
Automatically . . . . . . . . . . . . . . . . . . . . . . . . 98
2.5 Upgrading/Downgrading
MySQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . .99
2.5.1
Upgrading From Version 3.23
to Version 4.0 . . . . . . . . . . . . . . . . . . . . . . 100
2.5.2
Upgrading From Version 3.22
to Version 3.23 . . . . . . . . . . . . . . . . . . . . . 102
2.5.3
Upgrading from Version 3.21
to Version 3.22 . . . . . . . . . . . . . . . . . . . . . .103
2.5.4
Upgrading from Version 3.20
to Version 3.21 . . . . . . . . . . . . . . . . . . . . . .104
2.5.5
Upgrading to Another Architecture
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .105
2.6 Operating
System Specific Notes . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . .106
2.6.1
Linux Notes (All Linux Versions)
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
2.6.1.1
Linux Notes for Binary Distributions
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
2.6.1.2
Linux x86 Notes . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . .111
2.6.1.3
Linux SPARC Notes . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . 111
2.6.1.4
Linux Alpha Notes . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . .112
2.6.1.5
Linux PowerPC Notes . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 112
2.6.1.6
Linux MIPS Notes . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 113
2.6.1.7
Linux IA64 Notes . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . .113
2.6.2
Windows Notes. . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . .113
2.6.2.1
Starting MySQL on Windows
95, 98 or Me . . . . . . . . . . . . . . . . . . . . . . .113
2.6.2.2
Starting MySQL on Windows
NT, 2000 or XP . . . . . . . . . . . . . . . . . . . . 114
2.6.2.3
Running MySQL on Windows.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
2.6.2.4
Connecting to a Remote MySQL
from Windows with SSH . . . . . . . . .117
2.6.2.5
Splitting Data Across Di
erent Disks on Windows . . . . . . . . . . . . . . . .117
2.6.2.6
Compiling MySQL Clients
on Windows . . . . . . . . . . . . . . . . . . . . . . . . . 118
2.6.2.7
MySQL-Windows Compared to
Unix MySQL . . . . . . . . . . . . . . . . . . . . . 118
2.6.3
Solaris Notes . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . .120
2.6.3.1
Solaris 2.7/2.8 Notes .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 123
2.6.3.2
Solaris x86 Notes . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 124
2.6.4
BSD Notes . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . .124
2.6.4.1
FreeBSD Notes . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . .124
2.6.4.2
NetBSD notes . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 125
2.6.4.3
OpenBSD 2.5 Notes . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. .125
2.6.4.4
OpenBSD 2.8 Notes . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. .126
2.6.4.5
BSD/OS Version 2.x Notes
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
2.6.4.6
BSD/OS Version 3.x Notes
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
2.6.4.7
BSD/OS Version 4.x Notes
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
2.6.5
Mac OS X Notes . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . 127
2.6.5.1
Mac OS X Public Beta . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. .127
2.6.5.2
Mac OS X Server . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 127
2.6.6
Other Unix Notes . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . .128
2.6.6.1
HP-UX Notes for Binary Distributions
. . . . . . . . . . . . . . . . . . . . . . . . . . .128
2.6.6.2
HP-UX Version 10.20 Notes.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
2.6.6.3
HP-UX Version 11.x Notes.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .129
2.6.6.4
IBM-AIX notes . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . .131
2.6.6.5
SunOS 4 Notes . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . .132
2.6.6.6
Alpha-DEC-UNIX Notes (Tru64).
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .132
2.6.6.7
Alpha-DEC-OSF/1 Notes. .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
2.6.6.8
SGI Irix Notes . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . .135
2.6.6.9
Caldera (SCO) Notes. . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 136
2.6.6.10
Caldera (SCO) Unixware Version
7.0 Notes . . .. . . . . . . . . . . . . . . . . 138
2.6.7
OS/2 Notes . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . .138
2.6.8
BeOS Notes . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . .139
2.6.9
Novell NetWare Notes . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . .139
2.7 Perl
Installation Comments . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .139
2.7.1
Installing Perl on Unix
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . 139
2.7.2
Installing ActiveState Perl
on Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . .140
2.7.3
Installing the MySQL Perl
Distribution on Windows . . . . . . . . . . . . . . . . .141
2.7.4
Problems Using the Perl
DBI/DBD Interface . . . . . . . . . . . . . . . . . . . . . . .141
3 Tutorial
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 144
3.1 Connecting
to and Disconnecting from the Server . . . . . . . . . . . . . . . . . . .
. . . . .144
3.2 Entering
Queries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 145
3.3 Creating
and Using a Database. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 148
3.3.1
Creating and Selecting a
Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
3.3.2
Creating a Table . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . 150
3.3.3
Loading Data into a Table
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. .151
3.3.4
Retrieving Information from
a Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
3.3.4.1
Selecting All Data . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 152
3.3.4.2
Selecting Particular Rows.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
3.3.4.3
Selecting Particular Columns
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .154
3.3.4.4
Sorting Rows . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . 156
3.3.4.5
Date Calculations . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . .157
3.3.4.6
Working with NULL Values
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .160
3.3.4.7
Pattern Matching . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 160
3.3.4.8
Counting Rows . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 163
3.3.4.9
Using More Than one Table
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
3.4 Getting
Information About Databases and Tables . . . . . . . . . . . . . . . . . .
. . . . . . 167
3.5 Examples
of Common Queries. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . .168
3.5.1
The Maximum Value for a
Column . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
3.5.2
The Row Holding the Maximum
of a Certain Column . . . . . . . . . . . . . . .169
3.5.3
Maximum of Column per Group
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .169
3.5.4
The Rows Holding the Group-wise
Maximum of a Certain Field . . . . . 170
3.5.5
Using user variables. .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . .171
3.5.6
Using Foreign Keys . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 171
3.5.7
Searching on Two Keys .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . .172
3.5.8
Calculating Visits Per Day
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. .173
3.5.9
Using AUTO_INCREMENT. .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
3.6 Using
mysql in Batch Mode. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 175
3.7 Queries
from Twin Project . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .176
3.7.1
Find all Non-distributed
Twins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.176
3.7.2
Show a Table on Twin Pair
Status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
3.8 Using
MySQL with Apache . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .179
4 Database
Administration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 181
4.1 Con
guring MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 181
4.1.1 mysqld
Command-line Options . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 181
4.1.2 `my.cnf'
Option Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .186
4.1.3 Installing
Many Servers on the Same Machine . . . . . . . . . . . . . . . . . . . . .
. . . . . .189
4.1.4 Running
Multiple MySQL Servers on the Same Machine . . . . . . . . . . . . . . . .
. . 190
4.2 General
Security Issues and the MySQL Access Privilege System . . . . . . . . . .
. . . . 191
4.2.1 General
Security Guidelines . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .191
4.2.2 How
to Make MySQL Secure Against Crackers . . . . . . . . . . . . . . . . . .
. . . . . . . . 194
4.2.3 Startup
Options for mysqld Concerning Security . . . . . . . . . . . . . . . . . .
. . . . . . . 195
4.2.4 Security
issues with LOAD DATA LOCAL . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . .196
4.2.5 What
the Privilege System Does . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .197
4.2.6 How
the Privilege System Works . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .197
4.2.7 Privileges
Provided by MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 200
4.2.8 Connecting
to the MySQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . .202
4.2.9 Access
Control, Stage 1: Connection Verication . . . . . . . . . . . . . . . . .
. . . . . . . .203
4.2.10 Access
Control, Stage 2: Request Verication . . . . . . . . . . . . . . . . . .
. . . . . . . . 206
4.2.11 Causes
of Access denied Errors . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 208
4.3 MySQL
User Account Management . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .212
4.3.1 GRANT
and REVOKE Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 212
4.3.2 MySQL
User Names and Passwords . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . .216
4.3.3 When
Privilege Changes Take Eect . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . .217
4.3.4 Setting
Up the Initial MySQL Privileges. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 218
4.3.5 Adding
New Users to MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 219
4.3.6 Limiting
user resources. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .222
4.3.7 Setting
Up Passwords . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .223
4.3.8 Keeping
Your Password Secure . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 224
4.3.9 Using
Secure Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .225
4.3.9.1 Basics
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 225
4.3.9.2 Requirements
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 225
4.3.9.3 GRANT
Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .226
4.4 Disaster
Prevention and Recovery . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .227
4.4.1 Database
Backups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .227
4.4.2 BACKUP
TABLE Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 228
4.4.3 RESTORE
TABLE Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .229
4.4.5 REPAIR
TABLE Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 230
4.4.6 Using
myisamchk for Table Maintenance and Crash Recovery . . . . . . . . . . . .
231
4.4.6.1 myisamchk
Invocation Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . .232
4.4.6.2 General
Options for myisamchk . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . .233
4.4.6.3 Check
Options for myisamchk . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 234
4.4.6.4 Repair
Options for myisamchk . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . .235
4.4.6.5 Other
Options for myisamchk . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .236
4.4.6.7 Using
myisamchk for Crash Recovery . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 237
4.4.6.8 How
to Check Tables for Errors . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .238
4.4.6.9 How
to Repair Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .239
4.4.6.10 Table
Optimisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .241
4.4.7 Setting
Up a Table Maintenance Regimen . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . 242
4.4.8 Getting
Information About a Table . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 242
4.5 Database
Administration Language Reference . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . .247
4.5.1 OPTIMIZE
TABLE Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . 247
4.5.2 ANALYZE
TABLE Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .248
4.5.3 FLUSH
Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 248
4.5.4 RESET
Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 250
4.5.5 KILL
Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .250
4.5.6 SHOW
Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .251
4.5.6.1 Retrieving
information about Database, Tables, Columns, and Indexes. . .251
4.5.6.2 SHOW
TABLE STATUS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 252
4.5.6.3 SHOW
STATUS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .253
4.5.6.4 SHOW
VARIABLES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 256
4.5.6.5 SHOW
LOGS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 265
4.5.6.6 SHOW
PROCESSLIST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .265
4.5.6.7 SHOW
GRANTS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 267
4.5.6.8 SHOW
CREATE TABLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 267
4.6 MySQL
Localisation and International Usage. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 267
4.6.1 The
Character Set Used for Data and Sorting. . . . . . . . . . . . . . . . . .
. . . . . . . . . .267
4.6.1.1 German
character set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 268
4.6.2 Non-English
Error Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 269
4.6.3 Adding
a New Character Set . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . 269
4.6.4 The
Character Denition Arrays . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 271
4.7 MySQL
Server-Side Scripts and Utilities . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .272
4.7.1 Overview
of the Server-Side Scripts and Utilities. . . . . . . . . . . . . . . . .
. . . . . . . . .272
4.7.2 safe_mysqld,
The Wrapper Around mysqld . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . 274
4.7.3 mysqld_multi,
Program for Managing Multiple MySQL Servers . . . . . . . . . . . . .275
4.7.4 myisampack,
The MySQL Compressed Read-only Table Generator . . . . . . . 279
4.7.5 mysqld-max,
An Extended mysqld Server. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . .285
4.8 MySQL
Client-Side Scripts and Utilities . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 287
4.8.1 Overview
of the Client-Side Scripts and Utilities . . . . . . . . . . . . . . . . .
. . . . . . . . .287
4.8.2 mysql,
The Command-line Tool. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . .288
4.8.3 mysqladmin,
Administrating a MySQL Server . . . . . . . . . . . . . . . . . . . . . .
. . . . . .295
4.8.4 Using
mysqlcheck for Table Maintenance and Crash Recovery . . . . . . . . . . .
.297
4.8.5 mysqldump,
Dumping Table Structure and Data. . . . . . . . . . . . . . . . . . . . .
. . . . 299
4.8.6 mysqlhotcopy,
Copying MySQL Databases and Tables . . . . . . . . . . . . . . . . . . .303
4.8.7 mysqlimport,
Importing Data from Text Files . . . . . . . . . . . . . . . . . . . . . .
. . . . . . .304
4.8.8 Showing
Databases, Tables, and Columns . . . . . . . . . . . . . . . . . . . . . .
. . . . . . .307
4.9 The
MySQL Log Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 308
4.9.1 The
Error Log. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 308
4.9.2 The
General Query Log . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 309
4.9.4 The
Binary Update Log . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 310
4.9.5 The
Slow Query Log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .311
4.10 Replication
in MySQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 312
4.10.1 Introduction
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 312
4.10.2 Replication
Implementation Overview . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . 313
4.10.3 How
To Set Up Replication . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .314
4.10.4 Replication
Features and Known Problems . . . . . . . . . . . . . . . . . . . . . . .
. . . . .316
4.10.5 Replication
Options in `my.cnf' . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . .318
4.10.6 SQL
Commands Related to Replication . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . .323
4.10.7 Replication
FAQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 326
4.10.8 Troubleshooting
Replication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 331
5
MySQL Optimisation
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .333
5.1 Optimisation
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .333
5.1.1 MySQL
Design Limitations/Tradeos . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 333
5.1.2 Portability
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 334
5.1.3 What
Have We Used MySQL For? . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . .335
5.1.4 The
MySQL Benchmark Suite . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .336
5.1.5 Using
Your Own Benchmarks. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .337
5.2 Optimising
SELECTs and Other Queries . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 338
5.2.1 EXPLAIN
Syntax (Get Information About a SELECT). . . . . . . . . . . . . . . . . .
. . . . .338
5.2.2 Estimating
Query Performance . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 343
5.2.3 Speed
of SELECT Queries . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .344
5.2.4 How
MySQL Optimises WHERE Clauses . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . .344
5.2.5 How
MySQL Optimises DISTINCT. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 346
5.2.6 How
MySQL Optimises LEFT JOIN and RIGHT JOIN . . . . . . . . . . . . . . . . .
. . . . 346
5.2.7 How
MySQL Optimises ORDER BY . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 347
5.2.8 How
MySQL Optimises LIMIT . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .348
5.2.9 Speed
of INSERT Queries . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 349
5.2.10 Speed
of UPDATE Queries . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .351
5.2.11 Speed
of DELETE Queries . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .351
5.2.12 Other
Optimisation Tips . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 351
5.3 Locking
Issues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 354
5.3.1 How
MySQL Locks Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 354
5.3.2 Table
Locking Issues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 355
5.4 Optimising
Database Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 356
5.4.1 Design
Choices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 356
5.4.2 Get
Your Data as Small as Possible . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 357
5.4.3 How
MySQL Uses Indexes . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 358
5.4.4 Column
Indexes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 360
5.4.5 Multiple-Column
Indexes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 360
5.4.6 Why
So Many Open tables? . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 361
5.4.7 How
MySQL Opens and Closes Tables . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 361
5.4.8 Drawbacks
to Creating Large Numbers of Tables in the Same Database . . 362
5.5 Optimising
the MySQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .363
5.5.1 System/Compile
Time and Startup Parameter Tuning . . . . . . . . . . . . . . . . . . . .363
5.5.2 Tuning
Server Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 363
5.5.3 How
Compiling and Linking Aects the Speed of MySQL . . . . . . . . . . . . .
. . . . . 365
5.5.4 How
MySQL Uses Memory. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .367
5.5.5 How
MySQL uses DNS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 368
5.5.6 SET
Syntax. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . 369
5.6 Disk
Issues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 372
5.6.1 Using
Symbolic Links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 373
5.6.1.1 Using
Symbolic Links for Databases . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 374
5.6.1.2 Using
Symbolic Links for Tables . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . .374
6
MySQL Language Reference
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 376
6.1 Language
Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 376
6.1.1
Literals: How to Write Strings
and Numbers . . . . . . . . . . . . . . . . . . . . . . . .376
6.1.1.1
Strings . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 376
6.1.1.2
Numbers . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . 378
6.1.1.3
Hexadecimal Values . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . .378
6.1.1.4
NULL Values . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . 378
6.1.2
Database, Table, Index,
Column, and Alias Names . . . . . . . . . . . . . . . . . 379
6.1.3
Case Sensitivity in Names
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . .380
6.1.4
User Variables . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . .380
6.1.5
System Variables . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . .381
6.1.6
Comment Syntax . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . 385
6.1.7
Is MySQL Picky About Reserved
Words?. . . . . . . . . . . . . . . . . . . . . . . . . . . .385
6.2 Column
Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 387
6.2.1
Numeric Types . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . .392
6.2.2
Date and Time Types . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . 394
6.2.2.1
Y2K Issues and Date Types.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .395
6.2.2.2
The DATETIME, DATE, and
TIMESTAMP Types. . . . . . . . . . . . . . . . . . . . 395
6.2.2.3
The TIME Type . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . 398
6.2.2.4
The YEAR Type . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . .399
6.2.3
String Types . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 400
6.2.3.1
The CHAR and VARCHAR Types
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400
6.2.3.2
The BLOB and TEXT Types
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
401
6.2.3.3
The ENUM Type . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . 402
6.2.3.4
The SET Type . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . 403
6.2.4
Choosing the Right Type
for a Column. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
6.2.5
Using Column Types from
Other Database Engines . . . . . . . . . . . . . . . . 404
6.2.6
Column Type Storage Requirements
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405
6.3 Functions
for Use in SELECT and WHERE Clauses . . . . . . . . . . . . . . . . . . .
. . . 406
6.3.1
Non-Type-Specic Operators
and Functions . . . . . . . . . . . . . . . . . . . . . . . . 407
6.3.1.1
Parentheses. . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . 407
6.3.1.2
Comparison Operators . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. .407
6.3.1.3
Logical Operators . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . 411
6.3.1.4
Control Flow Functions.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 412
6.3.2
String Functions . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . .413
6.3.2.1
String Comparison Functions
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .420
6.3.2.2
Case-Sensitivity. . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . .422
6.3.3
Numeric Functions. . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . .423
6.3.3.1
Arithmetic Operations .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 423
6.3.3.2
Mathematical Functions .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . 424
6.3.4
Date and Time Functions
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . .429
6.3.5
Cast Functions . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . .437
6.3.6
Other Functions . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . 438
6.3.6.1
Bit Functions . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . .438
6.3.6.2
Miscellaneous Functions
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. .439
6.3.7
Functions for Use with GROUP
BY Clauses . . . . . . . . . . . . . . . . . . . . . . . . 445
6.4 Data
Manipulation: SELECT, INSERT, UPDATE, DELETE . . . . . . . . . . . . . . .
. . .447
6.4.1
SELECT Syntax . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 447
6.4.1.1
JOIN Syntax . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . .451
6.4.1.2
UNION Syntax . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . .453
6.4.2
HANDLER Syntax . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . 453
6.4.3
INSERT Syntax . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . .454
6.4.3.1
INSERT ... SELECT Syntax
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.456
6.4.4
INSERT DELAYED Syntax .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . 457
6.4.5
UPDATE Syntax . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 458
6.4.6
DELETE Syntax . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 459
6.4.7
TRUNCATE Syntax . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . 460
6.4.8
REPLACE Syntax . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . .461
6.4.9
LOAD DATA INFILE Syntax
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . .461
6.4.10
DO Syntax. . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . .467
6.5 Data
Denition: CREATE, DROP, ALTER . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 468
6.5.1
CREATE DATABASE Syntax .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.468
6.5.2
DROP DATABASE Syntax . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. .468
6.5.3
CREATE TABLE Syntax . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . .469
6.5.3.1
Silent Column Specication
Changes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476
6.5.4
ALTER TABLE Syntax . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 476
6.5.5
RENAME TABLE Syntax . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 480
6.5.6
DROP TABLE Syntax . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . .480
6.5.7
CREATE INDEX Syntax . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . .481
6.5.8
DROP INDEX Syntax . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . .481
6.6 Basic
MySQL User Utility Commands . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 482
6.6.1
USE Syntax. . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 482
6.6.2
DESCRIBE Syntax (Get Information
About Columns). . . . . . . . . . . . . . . . .482
6.7 MySQL
Transactional and Locking Commands . . . . . . . . . . . . . . . . . . . .
. . . . . . .482
6.7.1
BEGIN/COMMIT/ROLLBACK Syntax.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 482
6.7.2
LOCK TABLES/UNLOCK TABLES
Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . .483
6.7.3
SET TRANSACTION Syntax .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.485
6.8 MySQL
Full-text Search . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .485
6.8.1
Full-text Restrictions .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 489
6.8.2
Fine-tuning MySQL Full-text
Search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .489
6.8.3
Full-text Search TODO .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . 490
6.9 MySQL
Query Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .490
6.9.1
How The Query Cache Operates
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491
6.9.2
Query Cache Conguration.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. .492
6.9.3
Query Cache Options in SELECT
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492
6.9.4
Query Cache Status and Maintenance
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492
7
MySQL Table Types
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 494
7.1 MyISAM
Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 494
7.1.1
Space Needed for Keys .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.497
7.1.2
MyISAM Table Formats . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.497
7.1.2.1
Static (Fixed-length) Table
Characteristics . . . . . . . . . . . . . . . . . . . . .498
7.1.2.2
Dynamic Table Characteristics
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498
7.1.2.3
Compressed Table Characteristics
. . . . . . . . . . . . . . . . . . . . . . . . . . 499
7.1.3
MyISAM Table Problems .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
500
7.1.3.1
Corrupted MyISAM Tables
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500
7.1.3.2
Clients is using or hasn't
closed the table properly. . . . . . . . . . . . . 500
7.2 MERGE
Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 501
7.2.1
MERGE Table Problems . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .503
7.3 ISAM
Tables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 504
7.4 HEAP
Tables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 505
7.5 InnoDB
Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 506
7.5.1
InnoDB Tables Overview .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .506
7.5.2
InnoDB Startup Options .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.507
7.5.3
Creating InnoDB Tablespace
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .512
7.5.3.1
If Something Goes Wrong
in Database Creation . . . . . . . . . . . . . . .513
7.5.4
Creating InnoDB Tables .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
514
7.5.4.1
Converting MyISAM Tables
to InnoDB. . . . . . . . . . . . . . . . . . . . . . . . . 514
7.5.4.2
Foreign Key Constraints
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515
7.5.5
Adding and Removing InnoDB
Data and Log Files. . . . . . . . . . . . . . . 516
7.5.6
Backing up and Recovering
an InnoDB Database . . . . . . . . . . . . . . . .517
7.5.6.1
Checkpoints . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . .518
7.5.7
Moving an InnoDB Database
to Another Machine. . . . . . . . . . . . . . . . .518
7.5.8
InnoDB Transaction Model
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .519
7.5.8.1
Consistent Read . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. .519
7.5.8.2
Locking Reads . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . 520
7.5.8.3
Next-key Locking: Avoiding
the Phantom Problem. . . . . . . . . . . . . . 520
7.5.8.4
Locks Set by Dierent SQL
Statements in InnoDB . . . . . . . . . . . . . . 521
7.5.8.5
Deadlock Detection and Rollback.
. . . . . . . . . . . . . . . . . . . . . . . . . . . 522
7.5.8.6
An Example of How the Consistent
Read Works in InnoDB . . . . . 522
7.5.8.7
How to cope with deadlocks?
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .523
7.5.9
Performance Tuning Tips
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
523
7.5.9.1
The InnoDB Monitor. . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 524
7.5.10
Implementation of Multi-versioning
. . . . . . . . . . . . . . . . . . . . . . . . . . . .527
7.5.11
Table and Index Structures.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527
7.5.11.1
Physical Structure of an
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .528
7.5.11.2
Insert Buering . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . .528
7.5.11.3
Adaptive Hash Indexes .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 529
7.5.11.4
Physical Record Structure
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .529
7.5.11.5
How an Auto-increment Column
Works in InnoDB . . . . . . . . . . . . 529
7.5.12
File Space Management and
Disk I/O . . . . . . . . . . . . . . . . . . . . . . . . . 530
7.5.12.1
Disk I/O . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . 530
7.5.12.2
File Space Management .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531
7.5.12.3
Defragmenting a Table .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 532
7.5.13
Error Handling . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . .532
7.5.14
Restrictions on InnoDB Tables
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 532
7.5.15
InnoDB Contact Information
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .533
7.6 BDB
or BerkeleyDB Tables . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .533
7.6.1
Overview of BDB Tables .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.534
7.6.2
Installing BDB . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . 534
7.6.3
BDB startup options. . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . 534
7.6.4
Characteristics of BDB tables:
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .535
7.6.5
Things we need to x for
BDB in the near future: . . . . . . . . . . . . . . . . . . 536
7.6.6
Operating systems supported
by BDB