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 O ered 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 Di erences 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 Veri cation . . . . . . . . . . . . . . . . . . . . . . . . .203
          4.2.10 Access Control, Stage 2: Request Veri cation . . . . . . . . . . . . . . . . . . . . . . . . . . 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 E ect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .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 De nition 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/Tradeo s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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 A ects 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-Speci c 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 De nition: 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 Speci cation 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 Con guration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .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 Di erent 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 Bu ering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .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 . . . . . . . . . . . . . . . . . . . . . . . . . .537
            7.6.7 Restrictions on BDB Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .537
            7.6.8 Errors That May Occur When Using BDB Tables . . . . . . . . . . . . . . . . .537

      8 MySQL APIs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539
      8.1 MySQL PHP API. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .539
            8.1.1 Common Problems with MySQL and PHP . . . . . . . . . .. . . . . . . . . . . . . . . . . . . .539
       8.2 MySQL Perl API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539
             8.2.1 DBI with DBD::mysql . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539
             8.2.2 The DBI Interface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540
             8.2.3 More DBI/DBD Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545
      8.3 MySQL ODBC Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546
            8.3.1 How To Install MyODBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546
            8.3.2 How to Fill in the Various Fields in the ODBC Administrator Program . . . . . 547
            8.3.3 Connect parameters for MyODBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .547
            8.3.4 How to Report Problems with MyODBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .549
            8.3.5 Programs Known to Work with MyODBC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549
            8.3.6 How to Get the Value of an AUTO_INCREMENT Column in ODBC. . . . . . . . 554
            8.3.7 Reporting Problems with MyODBC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554
      8.4 MySQL C API. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555
            8.4.1 C API Datatypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 556
            8.4.2 C API Function Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .558
            8.4.3 C API Function Descriptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 562
            8.4.3.1 mysql_affected_rows() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563
            8.4.3.2 mysql_change_user() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .563
            8.4.3.3 mysql_character_set_name(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .564
            8.4.3.4 mysql_close() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565
            8.4.3.6 mysql_create_db(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566
            8.4.3.8 mysql_debug() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567
            8.4.3.10 mysql_dump_debug_info() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568
            8.4.3.11 mysql_eof() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569
            8.4.3.12 mysql_errno() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570
            8.4.3.14 mysql_escape_string() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .571
            8.4.3.16 mysql_fetch_fields() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572
            8.4.3.17 mysql_fetch_field_direct(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .573
            8.4.3.19 mysql_fetch_row() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 574
            8.4.3.20 mysql_field_count() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .575
            8.4.3.21 mysql_field_seek() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576
            8.4.3.22 mysql_field_tell() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 577
            8.4.3.24 mysql_get_client_info() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 578
            8.4.3.27 mysql_get_server_info() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .579
            8.4.3.29 mysql_init() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 580
            8.4.3.31 mysql_kill() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 581
            8.4.3.33 mysql_list_fields() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 582
            8.4.3.34 mysql_list_processes() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583
            8.4.3.36 mysql_num_fields() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .584
            8.4.3.37 mysql_num_rows(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .585
            8.4.3.38 mysql_options() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 586
            8.4.3.39 mysql_ping() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .588
            8.4.3.41 mysql_real_connect() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 589
            8.4.3.42 mysql_real_escape_string(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .591
            8.4.3.43 mysql_real_query() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592
            8.4.3.44 mysql_reload() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .593
            8.4.3.45 mysql_row_seek(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594
            8.4.3.47 mysql_select_db() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .595
            8.4.3.49 mysql_stat() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596
            8.4.3.51 mysql_thread_id() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597
            8.4.3.52 mysql_use_result() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 598
            8.4.4 C Threaded Function Descriptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .599
            8.4.4.3 mysql_thread_end() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .600
            8.4.4.4 mysql_thread_safe() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 600
            8.4.5 C Embedded Server Function Descriptions. . . . . . . . . . . . . . . . . . . . . . . . . . . . 600
            8.4.5.1 mysql_server_init() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .601
            8.4.5.2 mysql_server_end() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .602
            8.4.6 Common questions and problems when using the C API . . . . . . . . . . . . . . . 602
            8.4.6.1 Why Is It that After mysql_query()
                               Returns Success, mysql_store_result()
                               Sometimes Returns NULL? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602

            8.4.6.2 What Results Can I Get From a Query?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602
            8.4.6.3 How Can I Get the Unique ID for the Last Inserted Row? . . . . . . . . . . . . . . 603
            8.4.6.4 Problems Linking with the C API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .603
            8.4.7 Building Client Programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .604
            8.4.8 How to Make a Threaded Client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604
            8.4.9 libmysqld, the Embedded MySQL Server Library . . . . . . . . . . . . . . . . . . . . . . . .605
            8.4.9.1 Overview of the Embedded MySQL Server Library . . . .. . . . . . . . . . . . . . . . . 605
            8.4.9.2 Compiling Programs with libmysqld . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 606
            8.4.9.3 Restrictions when using the Embedded MySQL Server. . . . . . . . . . . . . . . . 606
            8.4.9.4 Using Option Files with the Embedded Server. . . . . . . . . . . . . . . . . . . . . . . . 606
            8.4.9.5 Things left to do in Embedded Server (TODO) . . . . . . . . . . . . . . . . . . . . . . . .607
            8.4.9.6 A Simple Embedded Server Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 607
            8.4.9.7 Licensing the Embedded Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .611

      8.5 MySQL C++ APIs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .611
            8.5.1 Borland C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 611

      8.6 MySQL Java Connectivity (JDBC) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 611
      8.7 MySQL Python APIs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .611
      8.8 MySQL Tcl APIs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .612
      8.9 MySQL Eifiel wrapper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .612

       9 Extending MySQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613

       9.1 MySQL Internals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613
              9.1.1 MySQL Threads. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .613
              9.1.2 MySQL Test Suite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .613
              9.1.2.1 Running the MySQL Test Suite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 614
              9.1.2.2 Extending the MySQL Test Suite . . . . . . . . . . . . . . . . . . . . . . . . . . . . 614
              9.1.2.3 Reporting Bugs in the MySQL Test Suite . . . . . . . . . . . . . . . . . . . . .615

       9.2 Adding New Functions to MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .616
              9.2.1 CREATE FUNCTION/DROP FUNCTION Syntax. . . . . . . . . . . . . . . . . 617
              9.2.2 Adding a New User-de nable Function . . . . . . . . . . . . . . . . . . . . . . . . 617
              9.2.2.1 UDF Calling Sequences for simple functions . . . . . . . . . . . . . . . . 619
              9.2.2.2 UDF Calling Sequences for aggregate functions . . . . . . . . . . . . . 620
              9.2.2.3 Argument Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 621
              9.2.2.4 Return Values and Error Handling . . . . . . . . . . . . . . . . . . . . . . . . . . 622
              9.2.2.5 Compiling and Installing User-de nable Functions . . . . . . . . . . . 623
              9.2.3 Adding a New Native Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .624

       9.3 Adding New Procedures to MySQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .626
              9.3.1 Procedure Analyse. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 626
              9.3.2 Writing a Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .626

 

| | | | | | | |
 

Customer Support CentreMySQL Reference Manual

 
Web Hosting Services
UNIX WEB HOSTING
MERCHANT ACCOUNTS
DEDICATED SERVERS
E-COMMERCE HOSTING
SUPPORT & FAQ's
TERMS OF USE
Domain Services
DOMAIN
REGISTRATION
MANAGE
YOUR ACCOUNT
SUPPORT & FAQ's
TERMS OF USE
Corporate Info
ABOUT US
OUR NETWORK
CONTACT US
SITE MAP
Copyright © 2002 Dyntex Group, Inc. All Rights Reserved