MySQL 5.0 Reference Manual

Copyright 1997-2007 MySQL AB

This documentation is NOT distributed under a GPL license. Use of this documentation is subject to the following terms: You may create a printed copy of this documentation solely for your own personal use. Conversion to other formats is allowed as long as the actual content is not altered or edited in any way. You shall not publish or distribute this documentation in any form or on any media, except if you distribute the documentation in a manner similar to how MySQL disseminates it (that is, electronically for download on a Web site with the software) or on a CD-ROM or similar medium, provided however that the documentation is disseminated together with the software on the same medium. Any other use, such as any dissemination of printed copies or use of this documentation, in whole or in part, in another publication, requires the prior written consent from an authorized representative of MySQL AB. MySQL AB reserves any and all rights to this documentation not expressly granted above.

Please email for more information.

Abstract

This is the MySQL Reference Manual. It documents MySQL 5.0 through 5.0.46.

This manual is for MySQL Enterprise Server, our commercial offering, and for MySQL Community Server. Sections that do not apply for MySQL Enterprise Server users are marked:

This section does not apply to MySQL Enterprise Server users.

Sections that do not apply to MySQL Community Server users are marked:

This section does not apply to MySQL Community Server users.

Document generated on: 2007-07-10 (revision: 7062)


Table of Contents

Preface
1. General Information
1.1. About This Manual
1.2. Conventions Used in This Manual
1.3. Overview of MySQL AB
1.4. Overview of the MySQL Database Management System
1.4.1. What is MySQL?
1.4.2. History of MySQL
1.4.3. The Main Features of MySQL
1.5. Overview of the MaxDB Database Management System
1.5.1. What is MaxDB?
1.5.2. History of MaxDB
1.5.3. Features of MaxDB
1.5.4. Licensing and Support
1.5.5. Feature Differences Between MaxDB and MySQL
1.5.6. Interoperability Features Between MaxDB and MySQL
1.5.7. MaxDB-Related Links
1.6. MySQL Development Roadmap
1.6.1. What's New in MySQL 5.0
1.7. MySQL Information Sources
1.7.1. MySQL Mailing Lists
1.7.2. MySQL Community Support at the MySQL Forums
1.7.3. MySQL Community Support on Internet Relay Chat (IRC)
1.7.4. MySQL Enterprise
1.8. How to Report Bugs or Problems
1.9. MySQL Standards Compliance
1.9.1. What Standards MySQL Follows
1.9.2. Selecting SQL Modes
1.9.3. Running MySQL in ANSI Mode
1.9.4. MySQL Extensions to Standard SQL
1.9.5. MySQL Differences from Standard SQL
1.9.6. How MySQL Deals with Constraints
2. Installing and Upgrading MySQL
2.1. MySQL Installation Overview
2.2. Determining your current MySQL version
2.3. Installing MySQL Enterprise
2.3.1. Overview of MySQL Enterprise Installation
2.3.2. Enterprise Server Distribution Types
2.3.3. Installing the Enterprise MySQL Server
2.3.4. Upgrading MySQL Enterprise Server
2.3.5. Uninstalling MySQL Enterprise
2.4. Installing MySQL Community Server
2.4.1. Overview of MySQL Community Server Installation
2.4.2. Operating Systems Supported by MySQL Community Server
2.4.3. Choosing Which MySQL Distribution to Install
2.4.4. How to Get MySQL
2.4.5. Verifying Package Integrity Using MD5 Checksums or GnuPG
2.4.6. Installation Layouts
2.4.7. Standard MySQL Installation Using a Binary Distribution
2.4.8. Installing MySQL on Windows
2.4.9. Installing MySQL from RPM Packages on Linux
2.4.10. Installing MySQL on Mac OS X
2.4.11. Installing MySQL on Solaris
2.4.12. Installing MySQL on NetWare
2.4.13. Installing MySQL from tar.gz Packages on Other Unix-Like Systems
2.4.14. MySQL Installation Using a Source Distribution
2.4.15. Post-Installation Setup and Testing
2.4.16. Upgrading MySQL
2.4.17. Downgrading MySQL
2.4.18. Operating System-Specific Notes
2.4.19. Environment Variables
2.4.20. Perl Installation Notes
3. Tutorial
3.1. Connecting to and Disconnecting from the Server
3.2. Entering Queries
3.3. Creating and Using a Database
3.3.1. Creating and Selecting a Database
3.3.2. Creating a Table
3.3.3. Loading Data into a Table
3.3.4. Retrieving Information from a Table
3.4. Getting Information About Databases and Tables
3.5. Using mysql in Batch Mode
3.6. Examples of Common Queries
3.6.1. The Maximum Value for a Column
3.6.2. The Row Holding the Maximum of a Certain Column
3.6.3. Maximum of Column per Group
3.6.4. The Rows Holding the Group-wise Maximum of a Certain Field
3.6.5. Using User-Defined Variables
3.6.6. Using Foreign Keys
3.6.7. Searching on Two Keys
3.6.8. Calculating Visits Per Day
3.6.9. Using AUTO_INCREMENT
3.7. Queries from the Twin Project
3.7.1. Find All Non-distributed Twins
3.7.2. Show a Table of Twin Pair Status
3.8. Using MySQL with Apache
4. Using MySQL Programs
4.1. Overview of MySQL Programs
4.2. Invoking MySQL Programs
4.3. Specifying Program Options
4.3.1. Using Options on the Command Line
4.3.2. Using Option Files
4.3.3. Using Environment Variables to Specify Options
4.3.4. Using Options to Set Program Variables
5. Database Administration
5.1. Overview of Server-Side Programs
5.2. mysqld — The MySQL Server
5.2.1. Option and Variable Reference
5.2.2. Command Options
5.2.3. System Variables
5.2.4. Using System Variables
5.2.5. Status Variables
5.2.6. SQL Modes
5.2.7. The Shutdown Process
5.2.8. Server-Side Help
5.3. MySQL Server Startup Programs
5.3.1. mysqld_safe — MySQL Server Startup Script
5.3.2. mysql.server — MySQL Server Startup Script
5.3.3. mysqld_multi — Manage Multiple MySQL Servers
5.4. mysqlmanager — The MySQL Instance Manager
5.4.1. MySQL Instance Manager Command Options
5.4.2. MySQL Instance Manager Configuration Files
5.4.3. Starting the MySQL Server with MySQL Instance Manager
5.4.4. Instance Manager User and Password Management
5.4.5. MySQL Server Instance Status Monitoring
5.4.6. Connecting to MySQL Instance Manager
5.4.7. MySQL Instance Manager Commands
5.5. Installation-Related Programs
5.5.1. comp_err — Compile MySQL Error Message File
5.5.2. make_win_bin_dist — Package MySQL Distribution as ZIP Archive
5.5.3. make_win_src_distribution — Create Source Distribution for Windows
5.5.4. mysql_fix_privilege_tables — Upgrade MySQL System Tables
5.5.5. mysql_install_db — MySQL Data Directory Initialization Script
5.5.6. mysql_secure_installation — Improve MySQL Installation Security
5.5.7. mysql_tzinfo_to_sql — Load the Time Zone Tables
5.5.8. mysql_upgrade — Check Tables for MySQL Upgrade
5.6. General Security Issues
5.6.1. General Security Guidelines
5.6.2. Making MySQL Secure Against Attackers
5.6.3. Security-Related mysqld Options
5.6.4. Security Issues with LOAD DATA LOCAL
5.6.5. How to Run MySQL as a Normal User
5.7. The MySQL Access Privilege System
5.7.1. What the Privilege System Does
5.7.2. How the Privilege System Works
5.7.3. Privileges Provided by MySQL
5.7.4. Connecting to the MySQL Server
5.7.5. Access Control, Stage 1: Connection Verification
5.7.6. Access Control, Stage 2: Request Verification
5.7.7. When Privilege Changes Take Effect
5.7.8. Causes of Access denied Errors
5.7.9. Password Hashing as of MySQL 4.1
5.8. MySQL User Account Management
5.8.1. MySQL Usernames and Passwords
5.8.2. Adding New User Accounts to MySQL
5.8.3. Removing User Accounts from MySQL
5.8.4. Limiting Account Resources
5.8.5. Assigning Account Passwords
5.8.6. Keeping Your Password Secure
5.8.7. Using Secure Connections
5.9. Backup and Recovery
5.9.1. Database Backups
5.9.2. Example Backup and Recovery Strategy
5.9.3. Point-in-Time Recovery
5.9.4. Table Maintenance and Crash Recovery
5.10. MySQL Localization and International Usage
5.10.1. The Character Set Used for Data and Sorting
5.10.2. Setting the Error Message Language
5.10.3. Adding a New Character Set
5.10.4. The Character Definition Arrays
5.10.5. String Collating Support
5.10.6. Multi-Byte Character Support
5.10.7. Problems With Character Sets
5.10.8. MySQL Server Time Zone Support
5.10.9. MySQL Server Locale Support
5.11. MySQL Server Logs
5.11.1. The Error Log
5.11.2. The General Query Log
5.11.3. The Binary Log
5.11.4. The Slow Query Log
5.11.5. Server Log Maintenance
5.12. Running Multiple MySQL Servers on the Same Machine
5.12.1. Running Multiple Servers on Windows
5.12.2. Running Multiple Servers on Unix
5.12.3. Using Client Programs in a Multiple-Server Environment
6. Replication
6.1. Introduction to Replication
6.2. Replication Implementation Overview
6.3. Replication Implementation Details
6.3.1. Replication Master Thread States
6.3.2. Replication Slave I/O Thread States
6.3.3. Replication Slave SQL Thread States
6.3.4. Replication Slave Connection Thread States
6.3.5. Replication Relay and Status Files
6.4. How to Set Up Replication
6.5. Replication Compatibility Between MySQL Versions
6.6. Upgrading a Replication Setup
6.6.1. Upgrading Replication to 5.0
6.7. Replication Features and Known Problems
6.8. Replication Startup Options
6.9. How Servers Evaluate Replication Rules
6.10. Replication FAQ
6.11. Troubleshooting Replication
6.12. How to Report Replication Bugs or Problems
6.13. Auto-Increment in Multiple-Master Replication
7. Optimization
7.1. Optimization Overview
7.1.1. MySQL Design Limitations and Tradeoffs
7.1.2. Designing Applications for Portability
7.1.3. What We Have Used MySQL For
7.1.4. The MySQL Benchmark Suite
7.1.5. Using Your Own Benchmarks
7.2. Optimizing SELECT and Other Statements
7.2.1. Optimizing Queries with EXPLAIN
7.2.2. Estimating Query Performance
7.2.3. Speed of SELECT Queries
7.2.4. WHERE Clause Optimization
7.2.5. Range Optimization
7.2.6. Index Merge Optimization
7.2.7. IS NULL Optimization
7.2.8. LEFT JOIN and RIGHT JOIN Optimization
7.2.9. Nested Join Optimization
7.2.10. Outer Join Simplification
7.2.11. ORDER BY Optimization
7.2.12. GROUP BY Optimization
7.2.13. DISTINCT Optimization
7.2.14. Optimizing IN/=ANY Subqueries
7.2.15. LIMIT Optimization
7.2.16. How to Avoid Table Scans
7.2.17. Speed of INSERT Statements
7.2.18. Speed of UPDATE Statements
7.2.19. Speed of DELETE Statements
7.2.20. Other Optimization Tips
7.3. Locking Issues
7.3.1. Internal Locking Methods
7.3.2. Table Locking Issues
7.3.3. Concurrent Inserts
7.3.4. External Locking
7.4. Optimizing Database Structure
7.4.1. Design Choices
7.4.2. Make Your Data as Small as Possible
7.4.3. Column Indexes
7.4.4. Multiple-Column Indexes
7.4.5. How MySQL Uses Indexes
7.4.6. The MyISAM Key Cache
7.4.7. MyISAM Index Statistics Collection
7.4.8. How MySQL Opens and Closes Tables
7.4.9. Drawbacks to Creating Many Tables in the Same Database
7.5. Optimizing the MySQL Server
7.5.1. System Factors and Startup Parameter Tuning
7.5.2. Tuning Server Parameters
7.5.3. Controlling Query Optimizer Performance
7.5.4. The MySQL Query Cache
7.5.5. Examining Thread Information
7.5.6. How Compiling and Linking Affects the Speed of MySQL
7.5.7. How MySQL Uses Memory
7.5.8. How MySQL Uses Internal Temporary Tables
7.5.9. How MySQL Uses DNS
7.6. Disk Issues
7.6.1. Using Symbolic Links
8. Client and Utility Programs
8.1. Overview of Client and Utility Programs
8.2. innochecksum — Offline InnoDB File Checksum Utility
8.3. my_print_defaults — Display Options from Option Files
8.4. myisam_ftdump — Display Full-Text Index information
8.5. myisamchk — MyISAM Table-Maintenance Utility
8.5.1. myisamchk General Options
8.5.2. myisamchk Check Options
8.5.3. myisamchk Repair Options
8.5.4. Other myisamchk Options
8.5.5. myisamchk Memory Usage
8.6. myisamlog — Display MyISAM Log File Contents
8.7. myisampack — Generate Compressed, Read-Only MyISAM Tables
8.8. mysql — The MySQL Command-Line Tool
8.8.1. mysql Options
8.8.2. mysql Commands
8.8.3. mysql Server-Side Help
8.8.4. Executing SQL Statements from a Text File
8.8.5. mysql Tips
8.9. mysqlaccess — Client for Checking Access Privileges
8.10. mysqladmin — Client for Administering a MySQL Server
8.11. mysqlbinlog — Utility for Processing Binary Log Files
8.12. mysqlcheck — A Table Maintenance and Repair Program
8.13. mysqldump — A Database Backup Program
8.14. mysqlhotcopy — A Database Backup Program
8.15. mysqlimport — A Data Import Program
8.16. mysqlmanagerc — Internal Test-Suite Program
8.17. mysqlmanager-pwgen — Internal Test-Suite Program
8.18. mysqlshow — Display Database, Table, and Column Information
8.19. mysql_convert_table_format — Convert Tables to Use a Given Storage Engine
8.20. mysql_explain_log — Use EXPLAIN on Statements in Query Log
8.21. mysql_find_rows — Extract Queries from Update Log
8.22. mysql_fix_extensions — Make Table Filename Extensions Lowercase
8.23. mysql_setpermission — Interactively Set Permissions in Grant Tables
8.24. mysql_tableinfo — Generate Database Metadata
8.25. mysql_waitpid — Kill Process and Wait for Its Termination
8.26. mysql_zap — Kill Processes That Match a Pattern
8.27. perror — Explain Error Codes
8.28. replace — A String-Replacement Utility
8.29. resolveip — Resolve Hostname to IP Address or Vice Versa
8.30. resolve_stack_dump — Resolve Numeric Stack Trace Dump to Symbols
9. Language Structure
9.1. Literal Values
9.1.1. Strings
9.1.2. Numbers
9.1.3. Hexadecimal Values
9.1.4. Boolean Values
9.1.5. Bit-Field Values
9.1.6. NULL Values
9.2. Database, Table, Index, Column, and Alias Names
9.2.1. Identifier Qualifiers
9.2.2. Identifier Case Sensitivity
9.2.3. Function Name Parsing and Resolution
9.3. Reserved Words
9.4. User-Defined Variables
9.5. Comment Syntax
10. Character Set Support
10.1. Character Sets and Collations in General
10.2. Character Sets and Collations in MySQL
10.3. Specifying Character Sets and Collations
10.3.1. Server Character Set and Collation
10.3.2. Database Character Set and Collation
10.3.3. Table Character Set and Collation
10.3.4. Column Character Set and Collation
10.3.5. Character String Literal Character Set and Collation
10.3.6. National Character Set
10.3.7. Examples of Character Set and Collation Assignment
10.3.8. Compatibility with Other DBMSs
10.4. Connection Character Sets and Collations
10.5. Collation Issues
10.5.1. Using COLLATE in SQL Statements
10.5.2. COLLATE Clause Precedence
10.5.3. BINARY Operator
10.5.4. Some Special Cases Where the Collation Determination Is Tricky
10.5.5. Collations Must Be for the Right Character Set
10.5.6. An Example of the Effect of Collation
10.6. Operations Affected by Character Set Support
10.6.1. Result Strings
10.6.2. CONVERT() and CAST()
10.6.3. SHOW Statements and INFORMATION_SCHEMA
10.7. Unicode Support
10.8. UTF-8 for Metadata
10.9. Column Character Set Conversion
10.10. Character Sets and Collations That MySQL Supports
10.10.1. Unicode Character Sets
10.10.2. West European Character Sets
10.10.3. Central European Character Sets
10.10.4. South European and Middle East Character Sets
10.10.5. Baltic Character Sets
10.10.6. Cyrillic Character Sets
10.10.7. Asian Character Sets
11. Data Types
11.1. Data Type Overview
11.1.1. Overview of Numeric Types
11.1.2. Overview of Date and Time Types
11.1.3. Overview of String Types
11.1.4. Data Type Default Values
11.2. Numeric Types
11.3. Date and Time Types
11.3.1. The DATETIME, DATE, and TIMESTAMP Types
11.3.2. The TIME Type
11.3.3. The YEAR Type
11.3.4. Year 2000 Issues and Date Types
11.4. String Types
11.4.1. The CHAR and VARCHAR Types
11.4.2. The BINARY and VARBINARY Types
11.4.3. The BLOB and TEXT Types
11.4.4. The ENUM Type
11.4.5. The SET Type
11.5. Data Type Storage Requirements
11.6. Choosing the Right Type for a Column
11.7. Using Data Types from Other Database Engines
12. Functions and Operators
12.1. Operator and Function Reference
12.2. Operators
12.2.1. Operator Precedence
12.2.2. Type Conversion in Expression Evaluation
12.2.3. Comparison Functions and Operators
12.2.4. Logical Operators
12.3. Control Flow Functions
12.4. String Functions
12.4.1. String Comparison Functions
12.4.2. Regular Expressions
12.5. Numeric Functions
12.5.1. Arithmetic Operators
12.5.2. Mathematical Functions
12.6. Date and Time Functions
12.7. What Calendar Is Used By MySQL?
12.8. Full-Text Search Functions
12.8.1. Boolean Full-Text Searches
12.8.2. Full-Text Searches with Query Expansion
12.8.3. Full-Text Stopwords
12.8.4. Full-Text Restrictions
12.8.5. Fine-Tuning MySQL Full-Text Search
12.9. Cast Functions and Operators
12.10. Other Functions
12.10.1. Bit Functions
12.10.2. Encryption and Compression Functions
12.10.3. Information Functions
12.10.4. Miscellaneous Functions
12.11. Functions and Modifiers for Use with GROUP BY Clauses
12.11.1. GROUP BY (Aggregate) Functions
12.11.2. GROUP BY Modifiers
12.11.3. GROUP BY and HAVING with Hidden Fields
13. SQL Statement Syntax
13.1. Data Definition Statements
13.1.1. ALTER DATABASE Syntax
13.1.2. ALTER TABLE Syntax
13.1.3. CREATE DATABASE Syntax
13.1.4. CREATE INDEX Syntax
13.1.5. CREATE TABLE Syntax
13.1.6. DROP DATABASE Syntax
13.1.7. DROP INDEX Syntax
13.1.8. DROP TABLE Syntax
13.1.9. RENAME TABLE Syntax
13.2. Data Manipulation Statements
13.2.1. DELETE Syntax
13.2.2. DO Syntax
13.2.3. HANDLER Syntax
13.2.4. INSERT Syntax
13.2.5. LOAD DATA INFILE Syntax
13.2.6. REPLACE Syntax
13.2.7. SELECT Syntax
13.2.8. Subquery Syntax
13.2.9. TRUNCATE Syntax
13.2.10. UPDATE Syntax
13.3. MySQL Utility Statements
13.3.1. DESCRIBE Syntax
13.3.2. HELP Syntax
13.3.3. USE Syntax
13.4. MySQL Transactional and Locking Statements
13.4.1. START TRANSACTION, COMMIT, and ROLLBACK Syntax
13.4.2. Statements That Cannot Be Rolled Back
13.4.3. Statements That Cause an Implicit Commit
13.4.4. SAVEPOINT and ROLLBACK TO SAVEPOINT Syntax
13.4.5. LOCK TABLES and UNLOCK TABLES Syntax
13.4.6. SET TRANSACTION Syntax
13.4.7. XA Transactions
13.5. Database Administration Statements
13.5.1. Account Management Statements
13.5.2. Table Maintenance Statements
13.5.3. SET Syntax
13.5.4. SHOW Syntax
13.5.5. Other Administrative Statements
13.6. Replication Statements
13.6.1. SQL Statements for Controlling Master Servers
13.6.2. SQL Statements for Controlling Slave Servers
13.7. SQL Syntax for Prepared Statements
14. Storage Engines
14.1. The MyISAM Storage Engine
14.1.1. MyISAM Startup Options
14.1.2. Space Needed for Keys
14.1.3. MyISAM Table Storage Formats
14.1.4. MyISAM Table Problems
14.2. The InnoDB Storage Engine
14.2.1. InnoDB Overview
14.2.2. InnoDB Contact Information
14.2.3. InnoDB Configuration
14.2.4. InnoDB Startup Options and System Variables
14.2.5. Creating the InnoDB Tablespace
14.2.6. Creating and Using InnoDB Tables
14.2.7. Adding and Removing InnoDB Data and Log Files
14.2.8. Backing Up and Recovering an InnoDB Database
14.2.9. Moving an InnoDB Database to Another Machine
14.2.10. InnoDB Transaction Model and Locking
14.2.11. InnoDB Performance Tuning Tips
14.2.12. Implementation of Multi-Versioning
14.2.13. InnoDB Table and Index Structures
14.2.14. InnoDB File Space Management and Disk I/O
14.2.15. InnoDB Error Handling
14.2.16. Restrictions on InnoDB Tables
14.2.17. InnoDB Troubleshooting
14.3. The MERGE Storage Engine
14.3.1. MERGE Table Problems
14.4. The MEMORY (HEAP) Storage Engine
14.5. The BDB (BerkeleyDB) Storage Engine
14.5.1. Operating Systems Supported by BDB
14.5.2. Installing BDB
14.5.3. BDB Startup Options
14.5.4. Characteristics of BDB Tables
14.5.5. Restrictions on BDB Tables
14.5.6. Errors That May Occur When Using BDB Tables
14.6. The EXAMPLE Storage Engine
14.7. The FEDERATED Storage Engine
14.7.1. Description of the FEDERATED Storage Engine
14.7.2. How to use FEDERATED Tables
14.7.3. Limitations of the FEDERATED Storage Engine
14.8. The ARCHIVE Storage Engine
14.9. The CSV Storage Engine
14.10. The BLACKHOLE Storage Engine
15. MySQL Cluster
15.1. MySQL Cluster Overview
15.1.1. MySQL Cluster Core Concepts
15.1.2. MySQL Cluster Nodes, Node Groups, Replicas, and Partitions
15.2. Simple Multi-Computer How-To
15.2.1. Hardware, Software, and Networking
15.2.2. Multi-Computer Installation
15.2.3. Multi-Computer Configuration
15.2.4. Initial Startup
15.2.5. Loading Sample Data and Performing Queries
15.2.6. Safe Shutdown and Restart
15.3. MySQL Cluster Configuration
15.3.1. Building MySQL Cluster from Source Code
15.3.2. Installing the Cluster Software
15.3.3. Quick Test Setup of MySQL Cluster
15.3.4. Configuration File
15.3.5. Overview of Cluster Configuration Parameters
15.3.6. Configuring Parameters for Local Checkpoints
15.4. Upgrading and Downgrading MySQL Cluster
15.4.1. Performing a Rolling Restart of the Cluster
15.4.2. Cluster Upgrade and Downgrade Compatibility
15.5. Process Management in MySQL Cluster
15.5.1. MySQL Server Process Usage for MySQL Cluster
15.5.2. ndbd — The Storage Engine Node Process
15.5.3. ndb_mgmd — The Management Server Process
15.5.4. ndb_mgm — The Management Client Process
15.5.5. Command Options for MySQL Cluster Processes
15.6. Management of MySQL Cluster
15.6.1. Summary of MySQL Cluster Start Phases
15.6.2. Commands in the MySQL Cluster Management Client
15.6.3. Event Reports Generated in MySQL Cluster
15.6.4. Single User Mode
15.6.5. Quick Reference: MySQL Cluster SQL Statements
15.7. On-line Backup of MySQL Cluster
15.7.1. Cluster Backup Concepts
15.7.2. Using The Management Client to Create a Backup
15.7.3. ndb_restore — Restore a Cluster Backup
15.7.4. Configuration for Cluster Backup
15.7.5. Backup Troubleshooting
15.8. Cluster Utility Programs
15.8.1. ndb_config — Extract NDB Configuration Information
15.8.2. ndb_cpcd — Automate Testing for NDB Development
15.8.3. ndb_delete_all — Delete All Rows from NDB Table
15.8.4. ndb_desc — Describe NDB Tables
15.8.5. ndb_drop_index — Drop Index from NDB Table
15.8.6. ndb_drop_table — Drop NDB Table
15.8.7. ndb_error_reporter — NDB Error-Reporting Utility
15.8.8. ndb_print_backup_file — Print NDB Backup File Contents
15.8.9. ndb_print_schema_file — Print NDB Schema File Contents
15.8.10. ndb_print_sys_file — Print NDB System File Contents
15.8.11. ndb_select_all — Print Rows from NDB Table
15.8.12. ndb_select_count — Print Row Counts for NDB Tables
15.8.13. ndb_show_tables — Display List of NDB Tables
15.8.14. ndb_size.pl — NDBCluster Size Requirement Estimator
15.8.15. ndb_waiter — Wait for Cluster to Reach a Given Status
15.9. Using High-Speed Interconnects with MySQL Cluster
15.9.1. Configuring MySQL Cluster to use SCI Sockets
15.9.2. Understanding the Impact of Cluster Interconnects
15.10. Known Limitations of MySQL Cluster
15.10.1. Non-Compliance In SQL Syntax
15.10.2. Limits and Differences from Standard MySQL Limits
15.10.3. Limits Relating to Transaction Handling
15.10.4. Error Handling
15.10.5. Limits Associated with Database Objects
15.10.6. Unsupported Or Missing Features
15.10.7. Limitations Relating to Performance
15.10.8. Issues Exclusive to MySQL Cluster
15.10.9. Limitations Relating to Multiple Cluster Nodes
15.10.10. Previous MySQL Cluster Issues Resolved in MySQL 5.0
15.11. MySQL Cluster Development Roadmap
15.11.1. MySQL Cluster Changes in MySQL 5.0
15.11.2. MySQL 5.1 Development Roadmap for MySQL Cluster
15.12. MySQL Cluster Glossary
16. Spatial Extensions
16.1. Introduction to MySQL Spatial Support
16.2. The OpenGIS Geometry Model
16.2.1. The Geometry Class Hierarchy
16.2.2. Class Geometry
16.2.3. Class Point
16.2.4. Class Curve
16.2.5. Class LineString
16.2.6. Class Surface
16.2.7. Class Polygon
16.2.8. Class GeometryCollection
16.2.9. Class MultiPoint
16.2.10. Class MultiCurve
16.2.11. Class MultiLineString
16.2.12. Class MultiSurface
16.2.13. Class MultiPolygon
16.3. Supported Spatial Data Formats
16.3.1. Well-Known Text (WKT) Format
16.3.2. Well-Known Binary (WKB) Format
16.4. Creating a Spatially Enabled MySQL Database
16.4.1. MySQL Spatial Data Types
16.4.2. Creating Spatial Values
16.4.3. Creating Spatial Columns
16.4.4. Populating Spatial Columns
16.4.5. Fetching Spatial Data
16.5. Analyzing Spatial Information
16.5.1. Geometry Format Conversion Functions
16.5.2. Geometry Functions
16.5.3. Functions That Create New Geometries from Existing Ones
16.5.4. Functions for Testing Spatial Relations Between Geometric Objects
16.5.5. Relations on Geometry Minimal Bounding Rectangles (MBRs)
16.5.6. Functions That Test Spatial Relationships Between Geometries
16.6. Optimizing Spatial Analysis
16.6.1. Creating Spatial Indexes
16.6.2. Using a Spatial Index
16.7. MySQL Conformance and Compatibility
17. Stored Procedures and Functions
17.1. Stored Routines and the Grant Tables
17.2. Stored Routine Syntax
17.2.1. CREATE PROCEDURE and CREATE FUNCTION Syntax
17.2.2. ALTER PROCEDURE and ALTER FUNCTION Syntax
17.2.3. DROP PROCEDURE and DROP FUNCTION Syntax
17.2.4. CALL Statement Syntax
17.2.5. BEGIN ... END Compound Statement Syntax
17.2.6. DECLARE Statement Syntax
17.2.7. Variables in Stored Routines
17.2.8. Conditions and Handlers
17.2.9. Cursors
17.2.10. Flow Control Constructs
17.3. Stored Procedures, Functions, Triggers, and LAST_INSERT_ID()
17.4. Binary Logging of Stored Routines and Triggers
18. Triggers
18.1. CREATE TRIGGER Syntax
18.2. DROP TRIGGER Syntax
18.3. Using Triggers
19. Views
19.1. ALTER VIEW Syntax
19.2. CREATE VIEW Syntax
19.3. DROP VIEW Syntax
20. The INFORMATION_SCHEMA Database
20.1. The INFORMATION_SCHEMA SCHEMATA Table
20.2. The INFORMATION_SCHEMA TABLES Table
20.3. The INFORMATION_SCHEMA COLUMNS Table
20.4. The INFORMATION_SCHEMA STATISTICS Table
20.5. The INFORMATION_SCHEMA USER_PRIVILEGES Table
20.6. The INFORMATION_SCHEMA SCHEMA_PRIVILEGES Table
20.7. The INFORMATION_SCHEMA TABLE_PRIVILEGES Table
20.8. The INFORMATION_SCHEMA COLUMN_PRIVILEGES Table
20.9. The INFORMATION_SCHEMA CHARACTER_SETS Table
20.10. The INFORMATION_SCHEMA COLLATIONS Table
20.11. The INFORMATION_SCHEMA COLLATION_CHARACTER_SET_APPLICABILITY Table
20.12. The INFORMATION_SCHEMA TABLE_CONSTRAINTS Table
20.13. The INFORMATION_SCHEMA KEY_COLUMN_USAGE Table
20.14. The INFORMATION_SCHEMA ROUTINES Table
20.15. The INFORMATION_SCHEMA VIEWS Table
20.16. The INFORMATION_SCHEMA TRIGGERS Table
20.17. The INFORMATION_SCHEMA PROFILING Table
20.18. Other INFORMATION_SCHEMA Tables
20.19. Extensions to SHOW Statements
21. Precision Math
21.1. Types of Numeric Values
21.2. DECIMAL Data Type Changes
21.3. Expression Handling
21.4. Rounding Behavior
21.5. Precision Math Examples
22. APIs and Libraries
22.1. libmysqld, the Embedded MySQL Server Library
22.2. MySQL C API
22.2.1. C API Data types
22.2.2. C API Function Overview
22.2.3. C API Function Descriptions
22.2.4. C API Prepared Statements
22.2.5. C API Prepared Statement Data types
22.2.6. C API Prepared Statement Function Overview
22.2.7. C API Prepared Statement Function Descriptions
22.2.8. C API Prepared statement problems
22.2.9. C API Handling of Multiple Statement Execution
22.2.10. C API Handling of Date and Time Values
22.2.11. C API Threaded Function Descriptions
22.2.12. C API Embedded Server Function Descriptions
22.2.13. Controlling Automatic Reconnect Behavior
22.2.14. Common Questions and Problems When Using the C API
22.2.15. Building Client Programs
22.2.16. How to Make a Threaded Client
22.3. MySQL PHP API
22.3.1. Common Problems with MySQL and PHP
22.3.2. Enabling Both mysql and mysqli in PHP
22.4. MySQL Perl API
22.5. MySQL C++ API
22.6. MySQL Python API
22.7. MySQL Tcl API
22.8. MySQL Eiffel Wrapper
22.9. MySQL Program Development Utilities
22.9.1. msql2mysql — Convert mSQL Programs for Use with MySQL
22.9.2. mysql_config — Get Compile Options for Compiling Clients
23. Connectors
23.1. MySQL Connector/ODBC
23.1.1. Introduction to Connector/ODBC
23.1.2. Connector/ODBC Installation
23.1.3. Connector/ODBC Configuration
23.1.4. Connector/ODBC Examples
23.1.5. Connector/ODBC Reference
23.1.6. Connector/ODBC Notes and Tips
23.1.7. Connector/ODBC Support
23.2. MySQL Connector/NET
23.2.1. Connector/NET Versions
23.2.2. Connector/NET Installation
23.2.3. Connector/NET Examples and Usage Guide
23.2.4. Connector/NET Reference
23.2.5. Connector/NET Notes and Tips
23.2.6. Connector/NET Support
23.3. MySQL Visual Studio Plugin
23.3.1. Installing the MySQL Visual Studio Plugin
23.3.2. Creating a connection to the MySQL server
23.3.3. Using the MySQL Visual Studio Plugin
23.3.4. Visual Studio Plugin Support
23.4. MySQL Connector/J
23.4.1. Connector/J Versions
23.4.2. Connector/J Installation
23.4.3. Connector/J Examples
23.4.4. Connector/J (JDBC) Reference
23.4.5. Connector/J Notes and Tips
23.4.6. Connector/J Support
23.5. MySQL Connector/MXJ
23.5.1. Introduction to Connector/MXJ
23.5.2. Connector/MXJ Installation
23.5.3. Connector/MXJ Configuration
23.5.4. Connector/MXJ Reference
23.5.5. Connector/MXJ Notes and Tips
23.5.6. Connector/MXJ Support
23.6. Connector/PHP
24. Extending MySQL
24.1. MySQL Internals
24.1.1. MySQL Threads
24.1.2. MySQL Test Suite
24.2. Adding New Functions to MySQL
24.2.1. Features of the User-Defined Function Interface
24.2.2. CREATE FUNCTION Syntax
24.2.3. DROP FUNCTION Syntax
24.2.4. Adding a New User-Defined Function
24.2.5. Adding a New Native Function
24.3. Adding New Procedures to MySQL
24.3.1. Procedure Analyse
24.3.2. Writing a Procedure
A. MySQL 5.0 Frequently Asked Questions
A.1. MySQL 5.0 FAQ — General
A.2. MySQL 5.0 FAQ — Storage Engines
A.3. MySQL 5.0 FAQ — Server SQL Mode
A.4. MySQL 5.0 FAQ — Stored Procedures
A.5. MySQL 5.0 FAQ — Triggers
A.6. MySQL 5.0 FAQ — Views
A.7. MySQL 5.0 FAQ — INFORMATION_SCHEMA
A.8. MySQL 5.0 FAQ — Migration
A.9. MySQL 5.0 FAQ — Security
A.10. MySQL 5.0 FAQ — MySQL Cluster
A.11. MySQL 5.0 FAQ — MySQL Chinese, Japanese, and Korean Character Sets
A.12. MySQL 5.0 FAQ — Connectors & APIs
A.13. MySQL 5.0 FAQ — Replication
A.14. MySQL 5.0 FAQ — MySQL, DRBD, and Heartbeat
A.14.1. Distributed Replicated Block Device
A.14.2. Linux Heartbeat
A.14.3. DRBD Architecture
A.14.4. DRBD and MySQL Replication
A.14.5. DRBD and File Systems
A.14.6. DRBD and LVM
A.14.7. DRBD and Virtualization
A.14.8. DRBD and Security
A.14.9. DRBD and System Requirements
A.14.10. DBRD and Support and Consulting
B. Errors, Error Codes, and Common Problems
B.1. Problems and Common Errors
B.1.1. How to Determine What Is Causing a Problem
B.1.2. Common Errors When Using MySQL Programs
B.1.3. Installation-Related Issues
B.1.4. Administration-Related Issues
B.1.5. Query-Related Issues
B.1.6. Optimizer-Related Issues
B.1.7. Table Definition-Related Issues
B.1.8. Known Issues in MySQL
B.2. Server Error Codes and Messages
B.3. Client Error Codes and Messages
C. MySQL Enterprise Release Notes
C.1. MySQL Enterprise 5.0 Release Notes
C.1.1. Changes in release 5.0.46 (Not yet released)
C.1.2. Changes in MySQL Enterprise 5.0.44 (21 June 2007)
C.1.3. Release Notes for MySQL Enterprise 5.0.42 (23 May 2007)
C.1.4. Release Notes for MySQL Enterprise 5.0.40 (17 April 2007)
C.1.5. Release Notes for MySQL Enterprise 5.0.38 (20 March 2007 released)
C.1.6. Release Notes for MySQL Enterprise 5.0.36sp1 (12 April 2007)
C.1.7. Release Notes for MySQL Enterprise 5.0.36 (20 February 2007)
C.1.8. Release Notes for MySQL Enterprise 5.0.34 (17 January 2007)
C.1.9. Release Notes for MySQL Enterprise 5.0.32 (20 December 2006)
C.1.10. Release Notes for MySQL Enterprise 5.0.30sp1 (19 January 2007)
C.1.11. Release Notes for MySQL Enterprise 5.0.30 (14 November 2006)
C.1.12. Release Notes for MySQL Enterprise 5.0.28 (24 October 2006)
D. MySQL Community Server Enhancements and Release Notes
D.1. MySQL Community Server 5.0 Enhancements and Release Notes
D.1.1. Release Notes for MySQL Community Server 5.0.45 (04 July 2007)
D.1.2. Release Notes for MySQL Community Server 5.0.41 (01 May 2007)
D.1.3. Release Notes for MySQL Community Server 5.0.37 (27 February 2007)
D.1.4. Release Notes for MySQL Community Server 5.0.33 (09 January 2007)
D.1.5. Release Notes for MySQL Community Server 5.0.27 (21 October 2006)
E. MySQL Change History
E.1. Changes in release 5.0.x (Production)
E.1.1. Changes for release 5.0.27 and up
E.1.2. Changes in release 5.0.26 (03 October 2006)
E.1.3. Changes in release 5.0.25 (15 September 2006)
E.1.4. Changes in release 5.0.24a (25 August 2006)
E.1.5. Changes in release 5.0.24 (27 July 2006)
E.1.6. Changes in release 5.0.23 (Not released)
E.1.7. Changes in release 5.0.22 (24 May 2006)
E.1.8. Changes in release 5.0.21 (02 May 2006)
E.1.9. Changes in release 5.0.20a (18 April 2006)
E.1.10. Changes in release 5.0.20 (31 March 2006)
E.1.11. Changes in release 5.0.19 (04 March 2006)
E.1.12. Changes in release 5.0.18 (21 December 2005)
E.1.13. Changes in release 5.0.17 (14 December 2005)
E.1.14. Changes in release 5.0.16 (10 November 2005)
E.1.15. Changes in release 5.0.15 (19 October 2005: Production)
E.1.16. Changes in release 5.0.14 (Not released)
E.1.17. Changes in release 5.0.13 (22 September 2005: Release Candidate)
E.1.18. Changes in release 5.0.12 (02 September 2005)
E.1.19. Changes in release 5.0.11 (06 August 2005)
E.1.20. Changes in release 5.0.10 (27 July 2005)
E.1.21. Changes in release 5.0.9 (15 July 2005)
E.1.22. Changes in release 5.0.8 (Not released)
E.1.23. Changes in release 5.0.7 (10 June 2005)
E.1.24. Changes in release 5.0.6 (26 May 2005)
E.1.25. Changes in release 5.0.5 (Not released)
E.1.26. Changes in release 5.0.4 (16 April 2005)
E.1.27. Changes in release 5.0.3 (23 March 2005: Beta)
E.1.28. Changes in release 5.0.2 (01 December 2004)
E.1.29. Changes in release 5.0.1 (27 July 2004)
E.1.30. Changes in release 5.0.0 (22 December 2003: Alpha)
E.2. Changes in MySQL Cluster
E.2.1. Changes in MySQL Cluster-5.0.7 (10 June 2005)
E.2.2. Changes in MySQL Cluster-5.0.6 (26 May 2005)
E.2.3. Changes in MySQL Cluster-5.0.5 (Not released)
E.2.4. Changes in MySQL Cluster-5.0.4 (16 April 2005)
E.2.5. Changes in MySQL Cluster-5.0.3 (23 March 2005: Beta)
E.2.6. Changes in MySQL Cluster-5.0.1 (27 July 2004)
E.2.7. Changes in MySQL Cluster-4.1.13 (15 July 2005)
E.2.8. Changes in MySQL Cluster-4.1.12 (13 May 2005)
E.2.9. Changes in MySQL Cluster-4.1.11 (01 April 2005)
E.2.10. Changes in MySQL Cluster-4.1.10 (12 February 2005)
E.2.11. Changes in MySQL Cluster-4.1.9 (13 January 2005)
E.2.12. Changes in MySQL Cluster-4.1.8 (14 December 2004)
E.2.13. Changes in MySQL Cluster-4.1.7 (23 October 2004)
E.2.14. Changes in MySQL Cluster-4.1.6 (10 October 2004)
E.2.15. Changes in MySQL Cluster-4.1.5 (16 September 2004)
E.2.16. Changes in MySQL Cluster-4.1.4 (31 August 2004)
E.2.17. Changes in MySQL Cluster-4.1.3 (28 June 2004)
E.3. MySQL Connector/ODBC (MyODBC) Change History
E.3.1. Changes in Connector/ODBC 5.0.12 (Not yet released)
E.3.2. Changes in Connector/ODBC 5.0.11 (31 January 2007)
E.3.3. Changes in Connector/ODBC 5.0.10 (14 December 2006)
E.3.4. Changes in Connector/ODBC 5.0.9 (22 November 2006)
E.3.5. Changes in Connector/ODBC 5.0.8 (17 November 2006)
E.3.6. Changes in Connector/ODBC 5.0.7 (08 November 2006)
E.3.7. Changes in Connector/ODBC 5.0.6 (03 November 2006)
E.3.8. Changes in Connector/ODBC 5.0.5 (17 October 2006)
E.3.9. Changes in Connector/ODBC 5.0.3 (Connector/ODBC 5.0 Alpha 3) (20 June 2006)
E.3.10. Changes in Connector/ODBC 5.0.2 (Never released)
E.3.11. Changes in Connector/ODBC 5.0.1 (Connector/ODBC 5.0 Alpha 2) (05 June 2006)
E.3.12. Changes in Connector/ODBC 3.51.17 (Not yet released)
E.3.13. Changes in Connector/ODBC 3.51.16 (14 June 2007)
E.3.14. Changes in Connector/ODBC 3.51.15 (7 May 2007)
E.3.15. Changes in Connector/ODBC 3.51.14 (08 March 2007)
E.3.16. Changes in Connector/ODBC 3.51.13 (Never released)
E.3.17. Changes in Connector/ODBC 3.51.12
E.3.18. Changes in Connector/ODBC 3.51.11
E.4. Connector/NET Change History
E.4.1. Changes in MySQL Connector/NET Version 5.1.3 (Not yet released)
E.4.2. Changes in MySQL Connector/NET Version 5.1.2 (Not yet released)
E.4.3. Changes in MySQL Connector/NET Version 5.1.1 (23 May 2007)
E.4.4. Changes in MySQL Connector/NET Version 5.1.0 (01 May 2007)
E.4.5. Changes in MySQL Connector/NET Version 5.0.8 (Not yet released)
E.4.6. Changes in MySQL Connector/NET Version 5.0.7 (18 May 2007)
E.4.7. Changes in MySQL Connector/NET Version 5.0.6 (22 March 2007)
E.4.8. Changes in MySQL Connector/NET Version 5.0.5 (07 March 2007)
E.4.9. Changes in MySQL Connector/NET Version 5.0.4 (Not released)
E.4.10. Changes in MySQL Connector/NET Version 5.0.3 (05 January 2007)
E.4.11. Changes in MySQL Connector/NET Version 5.0.2 (06 November 2006)
E.4.12. Changes in MySQL Connector/NET Version 5.0.1 (01 October 2006)
E.4.13. Changes in MySQL Connector/NET Version 5.0.0 (08 August 2006)
E.4.14. Changes in MySQL Connector/NET Version 1.0.10 (Not yet released)
E.4.15. Changes in MySQL Connector/NET Version 1.0.9 (02 February 2007
E.4.16. Changes in MySQL Connector/NET Version 1.0.8 (20 October 2006)
E.4.17. Changes in MySQL Connector/NET Version 1.0.7 (21 November 2005)
E.4.18. Changes in MySQL Connector/NET Version 1.0.6 (03 October 2005)
E.4.19. Changes in MySQL Connector/NET Version 1.0.5 (29 August 2005)
E.4.20. Changes in MySQL Connector/NET Version 1.0.4 (20 January 2005)
E.4.21. Changes in MySQL Connector/NET Version 1.0.3-gamma (12 October 2004)
E.4.22. Changes in MySQL Connector/NET Version 1.0.2-gamma (15 November 2004)
E.4.23. Changes in MySQL Connector/NET Version 1.0.1-beta2 (27 October 2004)
E.4.24. Changes in MySQL Connector/NET Version 1.0.0 (01 September 2004)
E.4.25. Changes in MySQL Connector/NET Version 0.9.0 (30 August 2004)
E.4.26. Changes in MySQL Connector/NET Version 0.76
E.4.27. Changes in MySQL Connector/NET Version 0.75
E.4.28. Changes in MySQL Connector/NET Version 0.74
E.4.29. Changes in MySQL Connector/NET Version 0.71
E.4.30. Changes in MySQL Connector/NET Version 0.70
E.4.31. Changes in MySQL Connector/NET Version 0.68
E.4.32. Changes in MySQL Connector/NET Version 0.65
E.4.33. Changes in MySQL Connector/NET Version 0.60
E.4.34. Changes in MySQL Connector/NET Version 0.50
E.5. MySQL Visual Studio Plugin Change History
E.5.1. Changes in MySQL Visual Studio Plugin 1.1.3 (Not yet released)
E.5.2. Changes in MySQL Visual Studio Plugin 1.0.2 (Not yet released)
E.5.3. Changes in MySQL Visual Studio Plugin 1.0.1 (4 October 2006)
E.5.4. Changes in MySQL Visual Studio Plugin 1.0.0 (4 October 2006)
E.6. MySQL Connector/J Change History
E.6.1. Changes in MySQL Connector/J 5.1.x
E.6.2. Changes in MySQL Connector/J 5.0.x
E.6.3. Changes in MySQL Connector/J 3.1.x
E.6.4. Changes in MySQL Connector/J 3.0.x
E.6.5. Changes in MySQL Connector/J 2.0.x
E.6.6. Changes in MySQL Connector/J 1.2b (04 July 1999)
E.6.7. Changes in MySQL Connector/J 1.2.x and lower
E.7. MySQL Connector/MXJ Change History
E.7.1. Changes in MySQL Connector/MXJ 5.0.6 (04 May 2007)
E.7.2. Changes in MySQL Connector/MXJ 5.0.5 (14 March 2007)
E.7.3. Changes in MySQL Connector/MXJ 5.0.4 (28 January 2007)
E.7.4. Changes in MySQL Connector/MXJ 5.0.3 (24 June 2006)
E.7.5. Changes in MySQL Connector/MXJ 5.0.2 (15 June 2006)
E.7.6. Changes in MySQL Connector/MXJ 5.0.1 (Never released)
E.7.7. Changes in MySQL Connector/MXJ 5.0.0 (09 December 2005)
F. Limits and Restrictions
F.1. Restrictions on Stored Routines and Triggers
F.2. Restrictions on Server-Side Cursors
F.3. Restrictions on Subqueries
F.4. Restrictions on Views
F.5. Restrictions on XA Transactions
F.6. Limits in MySQL
F.6.1. Limits of Joins
G. Credits
G.1. Developers at MySQL AB
G.2. Contributors to MySQL
G.3. Documenters and translators
G.4. Libraries used by and included with MySQL
G.5. Packages that support MySQL
G.6. Tools that were used to create MySQL
G.7. Supporters of MySQL
Index

List of Figures

A.1. Availability comparison
A.2. Active-Master MySQL server

List of Tables

23.1. Mapping of MySQL Error Numbers to SQLStates

List of Examples

23.1. Obtaining a connection from the DriverManager
23.2. Using java.sql.Statement to execute a SELECT query
23.3. Stored Procedures
23.4. Using Connection.prepareCall()
23.5. Registering output parameters
23.6. Setting CallableStatement input parameters
23.7. Retrieving results and output parameter values
23.8. Retrieving AUTO_INCREMENT column values using Statement.getGeneratedKeys()
23.9. Retrieving AUTO_INCREMENT column values using SELECT LAST_INSERT_ID()
23.10. Retrieving AUTO_INCREMENT column values in Updatable ResultSets
23.11. Using a connection pool with a J2EE application server
23.12. Example of transaction with retry logic