MySQL 5.0 Reference Manual


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. History of MySQL
1.4.2. The Main Features of MySQL
1.4.3. MySQL Stability
1.4.4. How Big MySQL Tables Can Be
1.4.5. Year 2000 Compliance
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 on IRC (Internet Relay Chat)
1.7.3. MySQL Community Support at the MySQL Forums
1.8. MySQL Standards Compliance
1.8.1. What Standards MySQL Follows
1.8.2. Selecting SQL Modes
1.8.3. Running MySQL in ANSI Mode
1.8.4. MySQL Extensions to Standard SQL
1.8.5. MySQL Differences from Standard SQL
1.8.6. How MySQL Deals with Constraints
2. Installing MySQL
2.1. General Installation Issues
2.1.1. Operating Systems Supported by MySQL
2.1.2. Choosing Which MySQL Distribution to Install
2.1.3. How to Get MySQL
2.1.4. Verifying Package Integrity Using MD5 Checksums or GnuPG
2.1.5. Installation Layouts
2.2. Standard MySQL Installation Using a Binary Distribution
2.3. Installing MySQL on Windows
2.3.1. Windows System Requirements
2.3.2. Choosing An Installation Package
2.3.3. Installing MySQL with the Automated Installer
2.3.4. Using the MySQL Installation Wizard
2.3.5. Using the Configuration Wizard
2.3.6. Installing MySQL from a Noinstall Zip Archive
2.3.7. Extracting the Install Archive
2.3.8. Creating an Option File
2.3.9. Selecting a MySQL Server type
2.3.10. Starting the Server for the First Time
2.3.11. Starting MySQL from the Windows Command Line
2.3.12. Starting MySQL as a Windows Service
2.3.13. Testing The MySQL Installation
2.3.14. Troubleshooting a MySQL Installation Under Windows
2.3.15. Upgrading MySQL on Windows
2.3.16. MySQL on Windows Compared to MySQL on Unix
2.4. Installing MySQL on Linux
2.5. Installing MySQL on Mac OS X
2.6. Installing MySQL on NetWare
2.7. Installing MySQL on Other Unix-Like Systems
2.8. MySQL Installation Using a Source Distribution
2.8.1. Source Installation Overview
2.8.2. Typical configure Options
2.8.3. Installing from the Development Source Tree
2.8.4. Dealing with Problems Compiling MySQL
2.8.5. MIT-pthreads Notes
2.8.6. Installing MySQL from Source on Windows
2.8.7. Compiling MySQL Clients on Windows
2.9. Post-Installation Setup and Testing
2.9.1. Windows Post-Installation Procedures
2.9.2. Unix Post-Installation Procedures
2.9.3. Securing the Initial MySQL Accounts
2.10. Upgrading MySQL
2.10.1. Upgrading from Version 5.0
2.10.2. Upgrading from Version 4.1 to 5.0
2.10.3. Upgrading the Grant Tables
2.10.4. Copying MySQL Databases to Another Machine
2.11. Downgrading MySQL
2.11.1. Downgrading to 4.1
2.12. Operating System-Specific Notes
2.12.1. Linux Notes
2.12.2. Mac OS X Notes
2.12.3. Solaris Notes
2.12.4. BSD Notes
2.12.5. Other Unix Notes
2.12.6. OS/2 Notes
2.13. Perl Installation Notes
2.13.1. Installing Perl on Unix
2.13.2. Installing ActiveState Perl on Windows
2.13.3. Problems Using the Perl DBI/DBD Interface
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 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. The MySQL Server and Server Startup Scripts
5.1.1. Overview of the Server-Side Scripts and Utilities
5.1.2. The mysqld-max Extended MySQL Server
5.1.3. mysqld_safe — MySQL Server Startup Script
5.1.4. mysql.server — MySQL Server Startup Script
5.1.5. mysqld_multi — Program for Managing Multiple MySQL Servers
5.2. mysqlmanager — The MySQL Instance Manager
5.2.1. Starting the MySQL Server with MySQL Instance Manager
5.2.2. Connecting to the MySQL Instance Manager and Creating User Accounts
5.2.3. MySQL Instance Manager Command-Line Options
5.2.4. MySQL Instance Manager Configuration Files
5.2.5. Commands Recognized by the MySQL Instance Manager
5.3. mysqld — The MySQL Server
5.3.1. mysqld Command-Line Options
5.3.2. The Server SQL Mode
5.3.3. Server System Variables
5.3.4. Server Status Variables
5.4. mysql_fix_privilege_tables — Upgrade MySQL System Tables
5.5. The MySQL Server Shutdown Process
5.6. General Security Issues
5.6.1. General Security Guidelines
5.6.2. Making MySQL Secure Against Attackers
5.6.3. Startup Options for mysqld Concerning Security
5.6.4. Security Issues with LOAD DATA LOCAL
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 in 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.9.5. myisamchk — MyISAM Table-Maintenance Utility
5.9.6. Setting Up a Table Maintenance Schedule
5.9.7. Getting Information About a Table
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.11. The MySQL Log Files
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. Log File 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
5.13. The MySQL Query Cache
5.13.1. How the Query Cache Operates
5.13.2. Query Cache SELECT Options
5.13.3. Query Cache Configuration
5.13.4. Query Cache Status and Maintenance
6. Replication in MySQL
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 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. Replication FAQ
6.10. Troubleshooting Replication
6.11. Reporting Replication Bugs
6.12. Auto-Increment in Multi-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 Statements and Other Queries
7.2.1. EXPLAIN Syntax (Get Information About a SELECT)
7.2.2. Estimating Query Performance
7.2.3. Speed of SELECT Queries
7.2.4. How MySQL Optimizes WHERE Clauses
7.2.5. Range Optimization
7.2.6. Index Merge Optimization
7.2.7. How MySQL Optimizes IS NULL
7.2.8. How MySQL Optimizes DISTINCT
7.2.9. How MySQL Optimizes LEFT JOIN and RIGHT JOIN
7.2.10. How MySQL Optimizes Nested Joins
7.2.11. How MySQL Simplifies Outer Joins
7.2.12. How MySQL Optimizes ORDER BY
7.2.13. How MySQL Optimizes GROUP BY
7.2.14. How MySQL Optimizes LIMIT
7.2.15. How to Avoid Table Scans
7.2.16. Speed of INSERT Statements
7.2.17. Speed of UPDATE Statements
7.2.18. Speed of DELETE Statements
7.2.19. Other Optimization Tips
7.3. Locking Issues
7.3.1. Locking Methods
7.3.2. Table Locking Issues
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 Counts Open Tables
7.4.9. How MySQL Opens and Closes Tables
7.4.10. 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. How Compiling and Linking Affects the Speed of MySQL
7.5.5. How MySQL Uses Memory
7.5.6. How MySQL Uses DNS
7.6. Disk Issues
7.6.1. Using Symbolic Links
8. Client and Utility Programs
8.1. Overview of the Client-Side Scripts and Utilities
8.2. myisampack — Generate Compressed, Read-Only MyISAM Tables
8.3. mysql — The MySQL Command-Line Tool
8.3.1. Options
8.3.2. mysql Commands
8.3.3. Executing SQL Statements from a Text File
8.3.4. mysql Tips
8.4. mysqlaccess — Client for Checking Access Privileges
8.5. mysqladmin — Client for Administering a MySQL Server
8.6. mysqlbinlog — Utility for Processing Binary Log Files
8.7. mysqlcheck — A Table Maintenance and Repair Program
8.8. mysqldump — A Database Backup Program
8.9. mysqlhotcopy — A Database Backup Program
8.10. mysqlimport — A Data Import Program
8.11. mysqlshow — Display Database, Table, and Column Information
8.12. myisamlog — Display Contents of MyISAM Log File
8.13. perror — Explain Error Codes
8.14. replace — A String-Replacement Utility
8.15. mysql_zap — Kill Processes That Match a Pattern
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.3. User Variables
9.4. System Variables
9.4.1. Structured System Variables
9.5. Comment Syntax
9.6. Treatment of Reserved Words in MySQL
10. Character Set Support
10.1. Character Sets and Collations in General
10.2. Character Sets and Collations in MySQL
10.3. Determining the Default Character Set and Collation
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. Examples of Character Set and Collation Assignment
10.3.6. Connection Character Sets and Collations
10.3.7. Character String Literal Character Set and Collation
10.3.8. Using COLLATE in SQL Statements
10.3.9. COLLATE Clause Precedence
10.3.10. BINARY Operator
10.3.11. Some Special Cases Where the Collation Determination Is Tricky
10.3.12. Collations Must Be for the Right Character Set
10.3.13. An Example of the Effect of Collation
10.4. Operations Affected by Character Set Support
10.4.1. Result Strings
10.4.2. CONVERT()
10.4.3. CAST()
10.4.4. SHOW Statements
10.5. Unicode Support
10.6. UTF8 for Metadata
10.7. Compatibility with Other DBMSs
10.8. New Character Set Configuration File Format
10.9. National Character Set
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. Column Types
11.1. Column 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.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. Y2K 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. Column Type Storage Requirements
11.6. Choosing the Right Type for a Column
11.7. Using Column Types from Other Database Engines
12. Functions and Operators
12.1. Operators
12.1.1. Operator Precedence
12.1.2. Parentheses
12.1.3. Comparison Functions and Operators
12.1.4. Logical Operators
12.2. Control Flow Functions
12.3. String Functions
12.3.1. String Comparison Functions
12.4. Numeric Functions
12.4.1. Arithmetic Operators
12.4.2. Mathematical Functions
12.5. Date and Time Functions
12.6. What Calendar Is Used By MySQL?
12.7. Full-Text Search Functions
12.7.1. Boolean Full-Text Searches
12.7.2. Full-Text Searches with Query Expansion
12.7.3. Full-Text Stopwords
12.7.4. Full-Text Restrictions
12.7.5. Fine-Tuning MySQL Full-Text Search
12.8. Cast Functions and Operators
12.9. Other Functions
12.9.1. Bit Functions
12.9.2. Encryption Functions
12.9.3. Information Functions
12.9.4. Miscellaneous Functions
12.10. Functions and Modifiers for Use with GROUP BY Clauses
12.10.1. GROUP BY (Aggregate) Functions
12.10.2. GROUP BY Modifiers
12.10.3. GROUP BY 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 (Get Information About Columns)
13.3.2. 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 and Table Types
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 MERGE Storage Engine
14.2.1. MERGE Table Problems
14.3. The MEMORY (HEAP) Storage Engine
14.4. The BDB (BerkeleyDB) Storage Engine
14.4.1. Operating Systems Supported by BDB
14.4.2. Installing BDB
14.4.3. BDB Startup Options
14.4.4. Characteristics of BDB Tables
14.4.5. Things We Need to Fix for BDB
14.4.6. Restrictions on BDB Tables
14.4.7. Errors That May Occur When Using BDB Tables
14.5. The EXAMPLE Storage Engine
14.6. The FEDERATED Storage Engine
14.6.1. Installing the FEDERATED Storage Engine
14.6.2. Description of the FEDERATED Storage Engine
14.6.3. How to use FEDERATED Tables
14.6.4. Limitations of the FEDERATED Storage Engine
14.7. The ARCHIVE Storage Engine
14.8. The CSV Storage Engine
14.9. The BLACKHOLE Storage Engine
15. The InnoDB Storage Engine
15.1. InnoDB Overview
15.2. InnoDB Contact Information
15.3. InnoDB Configuration
15.4. InnoDB Startup Options
15.5. Creating the InnoDB Tablespace
15.5.1. Dealing with InnoDB Initialization Problems
15.6. Creating InnoDB Tables
15.6.1. How to Use Transactions in InnoDB with Different APIs
15.6.2. Converting MyISAM Tables to InnoDB
15.6.3. How an AUTO_INCREMENT Column Works in InnoDB
15.6.4. FOREIGN KEY Constraints
15.6.5. InnoDB and MySQL Replication
15.6.6. Using Per-Table Tablespaces
15.7. Adding and Removing InnoDB Data and Log Files
15.8. Backing Up and Recovering an InnoDB Database
15.8.1. Forcing Recovery
15.8.2. Checkpoints
15.9. Moving an InnoDB Database to Another Machine
15.10. InnoDB Transaction Model and Locking
15.10.1. InnoDB Lock Modes
15.10.2. InnoDB and AUTOCOMMIT
15.10.3. InnoDB and TRANSACTION ISOLATION LEVEL
15.10.4. Consistent Non-Locking Read
15.10.5. Locking Reads SELECT ... FOR UPDATE and SELECT ... LOCK IN SHARE MODE
15.10.6. Next-Key Locking: Avoiding the Phantom Problem
15.10.7. An Example of How the Consistent Read Works in InnoDB
15.10.8. Locks Set by Different SQL Statements in InnoDB
15.10.9. When Does MySQL Implicitly Commit or Roll Back a Transaction?
15.10.10. Deadlock Detection and Rollback
15.10.11. How to Cope with Deadlocks
15.11. InnoDB Performance Tuning Tips
15.11.1. SHOW INNODB STATUS and the InnoDB Monitors
15.12. Implementation of Multi-Versioning
15.13. Table and Index Structures
15.13.1. Physical Structure of an Index
15.13.2. Insert Buffering
15.13.3. Adaptive Hash Indexes
15.13.4. Physical Record Structure
15.14. File Space Management and Disk I/O
15.14.1. Disk I/O
15.14.2. Using Raw Devices for the Tablespace
15.14.3. File Space Management
15.14.4. Defragmenting a Table
15.15. InnoDB Error Handling
15.15.1. InnoDB Error Codes
15.15.2. Operating System Error Codes
15.16. Restrictions on InnoDB Tables
15.17. InnoDB Troubleshooting
15.17.1. Troubleshooting InnoDB Data Dictionary Operations
16. MySQL Cluster
16.1. MySQL Cluster Overview
16.2. Basic MySQL Cluster Concepts
16.3. Simple Multi-Computer How-To
16.3.1. Hardware, Software, and Networking
16.3.2. Installation
16.3.3. Configuration
16.3.4. Initial Startup
16.3.5. Loading Sample Data and Performing Queries
16.3.6. Safe Shutdown and Restart
16.4. MySQL Cluster Configuration
16.4.1. Building MySQL Cluster from Source Code
16.4.2. Installing the Software
16.4.3. Quick Test Setup of MySQL Cluster
16.4.4. Configuration File
16.5. Process Management in MySQL Cluster
16.5.1. MySQL Server Process Usage for MySQL Cluster
16.5.2. ndbd, the Storage Engine Node Process
16.5.3. ndb_mgmd, the Management Server Process
16.5.4. ndb_mgm, the Management Client Process
16.5.5. Command Options for MySQL Cluster Processes
16.6. Management of MySQL Cluster
16.6.1. MySQL Cluster Startup Phases
16.6.2. Commands in the Management Client
16.6.3. Event Reports Generated in MySQL Cluster
16.6.4. Single User Mode
16.6.5. On-line Backup of MySQL Cluster
16.7. Using High-Speed Interconnects with MySQL Cluster
16.7.1. Configuring MySQL Cluster to use SCI Sockets
16.7.2. Understanding the Impact of Cluster Interconnects
16.8. Known Limitations of MySQL Cluster
16.9. MySQL Cluster Development Roadmap
16.9.1. MySQL Cluster Changes in MySQL 5.0
16.9.2. MySQL 5.1 Development Roadmap for MySQL Cluster
16.10. MySQL Cluster FAQ
16.11. MySQL Cluster Glossary
17. Spatial Extensions in MySQL
17.1. Introduction
17.2. The OpenGIS Geometry Model
17.2.1. The Geometry Class Hierarchy
17.2.2. Class Geometry
17.2.3. Class Point
17.2.4. Class Curve
17.2.5. Class LineString
17.2.6. Class Surface
17.2.7. Class Polygon
17.2.8. Class GeometryCollection
17.2.9. Class MultiPoint
17.2.10. Class MultiCurve
17.2.11. Class MultiLineString
17.2.12. Class MultiSurface
17.2.13. Class MultiPolygon
17.3. Supported Spatial Data Formats
17.3.1. Well-Known Text (WKT) Format
17.3.2. Well-Known Binary (WKB) Format
17.4. Creating a Spatially Enabled MySQL Database
17.4.1. MySQL Spatial Data Types
17.4.2. Creating Spatial Values
17.4.3. Creating Spatial Columns
17.4.4. Populating Spatial Columns
17.4.5. Fetching Spatial Data
17.5. Analyzing Spatial Information
17.5.1. Geometry Format Conversion Functions
17.5.2. Geometry Functions
17.5.3. Functions That Create New Geometries from Existing Ones
17.5.4. Functions for Testing Spatial Relations Between Geometric Objects
17.5.5. Relations on Geometry Minimal Bounding Rectangles (MBRs)
17.5.6. Functions That Test Spatial Relationships Between Geometries
17.6. Optimizing Spatial Analysis
17.6.1. Creating Spatial Indexes
17.6.2. Using a Spatial Index
17.7. MySQL Conformance and Compatibility
17.7.1. GIS Features That Are Not Yet Implemented
18. Stored Procedures and Functions
18.1. Stored Procedures and the Grant Tables
18.2. Stored Procedure Syntax
18.2.1. CREATE PROCEDURE and CREATE FUNCTION
18.2.2. ALTER PROCEDURE and ALTER FUNCTION
18.2.3. DROP PROCEDURE and DROP FUNCTION
18.2.4. SHOW CREATE PROCEDURE and SHOW CREATE FUNCTION
18.2.5. SHOW PROCEDURE STATUS and SHOW FUNCTION STATUS
18.2.6. CALL Statement
18.2.7. BEGIN ... END Compound Statement
18.2.8. DECLARE Statement
18.2.9. Variables in Stored Procedures
18.2.10. Conditions and Handlers
18.2.11. Cursors
18.2.12. Flow Control Constructs
18.3. Stored Procedures, Functions, Triggers, and Replication: Frequently Asked Questions
18.4. Binary Logging of Stored Routines and Triggers
19. Triggers
19.1. CREATE TRIGGER Syntax
19.2. DROP TRIGGER Syntax
19.3. Using Triggers
20. Views
20.1. ALTER VIEW Syntax
20.2. CREATE VIEW Syntax
20.3. DROP VIEW Syntax
20.4. SHOW CREATE VIEW Syntax
21. The INFORMATION_SCHEMA Information Database
21.1. INFORMATION_SCHEMA Tables
21.1.1. The INFORMATION_SCHEMA SCHEMATA Table
21.1.2. The INFORMATION_SCHEMA TABLES Table
21.1.3. The INFORMATION_SCHEMA COLUMNS Table
21.1.4. The INFORMATION_SCHEMA STATISTICS Table
21.1.5. The INFORMATION_SCHEMA USER_PRIVILEGES Table
21.1.6. The INFORMATION_SCHEMA SCHEMA_PRIVILEGES Table
21.1.7. The INFORMATION_SCHEMA TABLE_PRIVILEGES Table
21.1.8. The INFORMATION_SCHEMA COLUMN_PRIVILEGES Table
21.1.9. The INFORMATION_SCHEMA CHARACTER_SETS Table
21.1.10. The INFORMATION_SCHEMA COLLATIONS Table
21.1.11. The INFORMATION_SCHEMA COLLATION_CHARACTER_SET_APPLICABILITY Table
21.1.12. The INFORMATION_SCHEMA TABLE_CONSTRAINTS Table
21.1.13. The INFORMATION_SCHEMA KEY_COLUMN_USAGE Table
21.1.14. The INFORMATION_SCHEMA ROUTINES Table
21.1.15. The INFORMATION_SCHEMA VIEWS Table
21.1.16. The INFORMATION_SCHEMA TRIGGERS Table
21.1.17. Other INFORMATION_SCHEMA Tables
21.2. Extensions to SHOW Statements
22. Precision Math
22.1. Types of Numeric Values
22.2. DECIMAL Data Type Changes
22.3. Expression Handling
22.4. Rounding Behavior
22.5. Precision Math Examples
23. APIs and Libraries
23.1. libmysqld, the Embedded MySQL Server Library
23.1.1. Overview of the Embedded MySQL Server Library
23.1.2. Compiling Programs with libmysqld
23.1.3. Restrictions when using the Embedded MySQL Server
23.1.4. Options with the Embedded Server
23.1.5. Things left to do in Embedded Server (TODO)
23.1.6. Embedded Server Examples
23.1.7. Licensing the Embedded Server
23.2. MySQL C API
23.2.1. C API Data types
23.2.2. C API Function Overview
23.2.3. C API Function Descriptions
23.2.4. C API Prepared Statements
23.2.5. C API Prepared Statement Data types
23.2.6. C API Prepared Statement Function Overview
23.2.7. C API Prepared Statement Function Descriptions
23.2.8. C API Prepared statement problems
23.2.9. C API Handling of Multiple Query Execution
23.2.10. C API Handling of Date and Time Values
23.2.11. C API Threaded Function Descriptions
23.2.12. C API Embedded Server Function Descriptions
23.2.13. Common questions and problems when using the C API
23.2.14. Building Client Programs
23.2.15. How to Make a Threaded Client
23.3. MySQL PHP API
23.3.1. Common Problems with MySQL and PHP
23.4. MySQL Perl API
23.5. MySQL C++ API
23.5.1. Borland C++
23.6. MySQL Python API
23.7. MySQL Tcl API
23.8. MySQL Eiffel Wrapper
23.9. MySQL Program Development Utilities
23.9.1. msql2mysql — Convert mSQL Programs for Use with MySQL
23.9.2. mysql_config — Get Compile Options for Compiling Clients
24. Connectors
24.1. MySQL Connector/ODBC
24.1.1. Introduction to MyODBC
24.1.2. General Information About ODBC and MyODBC
24.1.3. How to Install MyODBC
24.1.4. Installing MyODBC from a Binary Distribution on Windows
24.1.5. Installing MyODBC from a Binary Distribution on Unix
24.1.6. Installing MyODBC from a Source Distribution on Windows
24.1.7. Installing MyODBC from a Source Distribution on Unix
24.1.8. Installing MyODBC from the BitKeeper Development Source Tree
24.1.9. MyODBC Configuration
24.1.10. MyODBC Connection-Related Issues
24.1.11. MyODBC and Microsoft Access
24.1.12. MyODBC and Microsoft VBA and ASP
24.1.13. MyODBC and Third-Party ODBC Tools
24.1.14. MyODBC General Functionality
24.1.15. Basic MyODBC Application Steps
24.1.16. MyODBC API Reference
24.1.17. MyODBC Data Types
24.1.18. MyODBC Error Codes
24.1.19. MyODBC With VB: ADO, DAO and RDO
24.1.20. MyODBC with Microsoft .NET
24.1.21. Credits
24.2. MySQL Connector/NET
24.2.1. Introduction
24.2.2. Downloading and Installing MySQL Connector/NET
24.2.3. Connector/NET Architecture
24.2.4. Using MySQL Connector/NET
24.2.5. MySQL Connector/NET Change History
24.3. MySQL Connector/J
24.3.1. Basic JDBC concepts
24.3.2. Installing Connector/J
24.3.3. JDBC Reference
24.3.4. Using Connector/J with J2EE and Other Java Frameworks
24.3.5. Diagnosing Connector/J Problems
24.3.6. Changelog
24.4. MySQL Connector/MXJ
24.4.1. Introduction
24.4.2. Support Platforms:
24.4.3. JUnit Test Requirements
24.4.4. Running the JUnit Tests
24.4.5. Running as part of the JDBC Driver
24.4.6. Running within a Java Object
24.4.7. The MysqldResource API
24.4.8. Running within a JMX Agent (custom)
24.4.9. Deployment in a standard JMX Agent environment (JBoss)
24.4.10. Installation
25. Extending MySQL
25.1. MySQL Internals
25.1.1. MySQL Threads
25.1.2. MySQL Test Suite
25.2. Adding New Functions to MySQL
25.2.1. Features of the User-Defined Function Interface
25.2.2. CREATE FUNCTION/DROP FUNCTION Syntax
25.2.3. Adding a New User-Defined Function
25.2.4. Adding a New Native Function
25.3. Adding New Procedures to MySQL
25.3.1. Procedure Analyse
25.3.2. Writing a Procedure
A. Problems and Common Errors
A.1. How to Determine What Is Causing a Problem
A.2. Common Errors When Using MySQL Programs
A.2.1. Access denied
A.2.2. Can't connect to [local] MySQL server
A.2.3. Client does not support authentication protocol
A.2.4. Password Fails When Entered Interactively
A.2.5. Host 'host_name' is blocked
A.2.6. Too many connections
A.2.7. Out of memory
A.2.8. MySQL server has gone away
A.2.9. Packet too large
A.2.10. Communication Errors and Aborted Connections
A.2.11. The table is full
A.2.12. Can't create/write to file
A.2.13. Commands out of sync
A.2.14. Ignoring user
A.2.15. Table 'tbl_name' doesn't exist
A.2.16. Can't initialize character set
A.2.17. File Not Found
A.3. Installation-Related Issues
A.3.1. Problems Linking to the MySQL Client Library
A.3.2. How to Run MySQL as a Normal User
A.3.3. Problems with File Permissions
A.4. Administration-Related Issues
A.4.1. How to Reset the Root Password
A.4.2. What to Do If MySQL Keeps Crashing
A.4.3. How MySQL Handles a Full Disk
A.4.4. Where MySQL Stores Temporary Files
A.4.5. How to Protect or Change the MySQL Socket File /tmp/mysql.sock
A.4.6. Time Zone Problems
A.5. Query-Related Issues
A.5.1. Case Sensitivity in Searches
A.5.2. Problems Using DATE Columns
A.5.3. Problems with NULL Values
A.5.4. Problems with Column Aliases
A.5.5. Rollback Failure for Non-Transactional Tables
A.5.6. Deleting Rows from Related Tables
A.5.7. Solving Problems with No Matching Rows
A.5.8. Problems with Floating-Point Comparisons
A.6. Optimizer-Related Issues
A.7. Table Definition-Related Issues
A.7.1. Problems with ALTER TABLE
A.7.2. How to Change the Order of Columns in a Table
A.7.3. TEMPORARY TABLE Problems
A.8. Known Issues in MySQL
A.8.1. Open Issues in MySQL
B. Error Codes and Messages
B.1. Server Error Codes and Messages
B.2. Client Error Codes and Messages
C. Credits
C.1. Developers at MySQL AB
C.2. Contributors to MySQL
C.3. Documenters and translators
C.4. Libraries used by and included with MySQL
C.5. Packages that support MySQL
C.6. Tools that were used to create MySQL
C.7. Supporters of MySQL
D. MySQL Change History
D.1. Changes in release 5.0.x (Production)
D.1.1. Changes in release 5.0.16 (Not yet released)
D.1.2. Changes in release 5.0.15 (19 October 2005: Production)
D.1.3. Changes in release 5.0.14 (Not released)
D.1.4. Changes in release 5.0.13 (22 Sept 2005: Release Candidate)
D.1.5. Changes in release 5.0.12 (02 Sept 2005)
D.1.6. Changes in release 5.0.11 (06 Aug 2005)
D.1.7. Changes in release 5.0.10 (27 July 2005)
D.1.8. Changes in release 5.0.9 (15 July 2005)
D.1.9. Changes in release 5.0.8 (Not released)
D.1.10. Changes in release 5.0.7 (10 June 2005)
D.1.11. Changes in release 5.0.6 (26 May 2005)
D.1.12. Changes in release 5.0.5 (Not released)
D.1.13. Changes in release 5.0.4 (16 Apr 2005)
D.1.14. Changes in release 5.0.3 (23 Mar 2005: Beta)
D.1.15. Changes in release 5.0.2 (01 Dec 2004)
D.1.16. Changes in release 5.0.1 (27 Jul 2004)
D.1.17. Changes in release 5.0.0 (22 Dec 2003: Alpha)
D.2. MySQL Cluster Change History
D.2.1. MySQL Cluster-5.0.7 (Not yet released)
D.2.2. MySQL Cluster-5.0.6 (26 May 2005)
D.2.3. MySQL Cluster-5.0.5 (Not released)
D.2.4. MySQL Cluster-5.0.4 (16 Apr 2005)
D.2.5. MySQL Cluster-5.0.3 (23 Mar 2005: Beta)
D.2.6. MySQL Cluster-5.0.1 (27 Jul 2004)
D.2.7. MySQL Cluster-4.1.13 (15 Jul 2005)
D.2.8. MySQL Cluster-4.1.12 (13 May 2005)
D.2.9. MySQL Cluster-4.1.11 (01 Apr 2005)
D.2.10. MySQL Cluster-4.1.10 (12 Feb 2005)
D.2.11. MySQL Cluster-4.1.9 (13 Jan 2005)
D.2.12. MySQL Cluster-4.1.8 (14 Dec 2004)
D.2.13. MySQL Cluster-4.1.7 (23 Oct 2004)
D.2.14. MySQL Cluster-4.1.6 (10 Oct 2004)
D.2.15. MySQL Cluster-4.1.5 (16 Sep 2004)
D.2.16. MySQL Cluster-4.1.4 (31 Aug 2004)
D.2.17. MySQL Cluster-4.1.3 (28 Jun 2004)
D.3. Changes in MyODBC
D.3.1. Changes in MyODBC 3.51.12
D.3.2. Changes in MyODBC 3.51.11
E. Porting to Other Systems
E.1. Debugging a MySQL Server
E.1.1. Compiling MySQL for Debugging
E.1.2. Creating Trace Files
E.1.3. Debugging mysqld under gdb
E.1.4. Using a Stack Trace
E.1.5. Using Log Files to Find Cause of Errors in mysqld
E.1.6. Making a Test Case If You Experience Table Corruption
E.2. Debugging a MySQL Client
E.3. The DBUG Package
E.4. Comments about RTS Threads
E.5. Differences Between Thread Packages
F. Environment Variables
G. MySQL Regular Expressions
H. Limits in MySQL
H.1. Limits of Joins
I. Feature Restrictions
I.1. Restrictions on Stored Routines and Triggers
I.2. Restrictions on Server-Side Cursors
I.3. Restrictions on Subqueries
I.4. Restrictions on Views
I.5. Restrictions on XA Transactions
J. GNU General Public License
K. MySQL FLOSS License Exception
Index

List of Tables

24.1. Connection Properties
24.2. Conversion Table
24.3. MySQL Types to Java Types for ResultSet.getObject()
24.4. MySQL to Java Encoding Name Translations

List of Examples

24.1. Obtaining a Connection From the DriverManager
24.2. Using java.sql.Statement to Execute a SELECT Query
24.3. Stored Procedure Example
24.4. Using Connection.prepareCall()
24.5. Registering Output Parameters
24.6. Setting CallableStatement Input Parameters
24.7. Retrieving Results and Output Parameter Values
24.8. Retrieving AUTO_INCREMENT Column Values using Statement.getGeneratedKeys()
24.9. Retrieving AUTO_INCREMENT Column Values using 'SELECT LAST_INSERT_ID()'
24.10. Retrieving AUTO_INCREMENT Column Values in Updatable ResultSets
24.11. Setting the CLASSPATH Under UNIX
24.12. Using a Connection Pool with a J2EE Application Server
24.13. Example of transaction with retry logic