START-INFO-DIR-ENTRY * mysql: (mysql). MySQL documentation. END-INFO-DIR-ENTRY Table of Contents ***************** General Information About MySQL MySQL, MySQL AB, and Open Source What Is MySQL What Is MySQL AB Contact Information About This Manual Conventions Used in This Manual History of MySQL The Main Features of MySQL How Stable Is MySQL? How Big Can MySQL Tables Be? Year 2000 Compliance MySQL Information Sources Books About MySQL General SQL Information and Tutorials Useful MySQL-related Links MySQL Mailing Lists The MySQL Mailing Lists Asking Questions or Reporting Bugs How to Report Bugs or Problems Guidelines for Answering Question on the Mailing List MySQL Support and Licensing Support offered by MySQL AB Copyrights Used by MySQL Copyright Changes MySQL Licensing Policy Example Licensing Situations Selling Products that use MySQL ISP MySQL Services Running a Web Server Using MySQL How Standards-compatible Is MySQL? MySQL Extensions to ANSI SQL92 MySQL Differences Compared to ANSI SQL92 Running MySQL in ANSI Mode Functionality Missing from MySQL Sub-selects `SELECT INTO TABLE' Transactions Stored Procedures and Triggers Foreign Keys Why We Did Not Implement Foreign Keys Views `--' as the Start of a Comment What Standards Does MySQL Follow? How to Cope Without `COMMIT'/`ROLLBACK' Known errors and design deficiencies in MySQL How MySQL Compares to Other Databases How MySQL Compares to `mSQL' How to Convert `mSQL' Tools for MySQL How `mSQL' and MySQL Client/Server Communications Protocols Differ How `mSQL' 2.0 SQL Syntax Differs from MySQL How MySQL Compares to PostgreSQL MySQL and PostgreSQL development strategies Featurewise Comparison of MySQL and PostgreSQL Benchmarking MySQL and PostgreSQL MySQL and the future (The TODO) Things that should be in 4.0 Things that must be done in the real near future Things that have to be done sometime Some things we don't have any plans to do MySQL Installation Quick Standard Installation of MySQL Installing MySQL on Linux Installing MySQL on Windows General Installation Issues How to Get MySQL Operating Systems Supported by MySQL Which MySQL Version to Use Installation Layouts How and When Updates Are Released MySQL Binaries Compiled by MySQL AB Installing a MySQL Source Distribution Quick Installation Overview Applying Patches Typical `configure' Options Installing from the Development Source Tree Problems Compiling? MIT-pthreads Notes Post-installation Setup and Testing Problems Running `mysql_install_db' Problems Starting the MySQL Server Starting and Stopping MySQL Automatically Upgrading/Downgrading MySQL Upgrading From Version 3.23 to Version 4.0 Upgrading From Version 3.22 to Version 3.23 Upgrading from Version 3.21 to Version 3.22 Upgrading from Version 3.20 to Version 3.21 Upgrading to Another Architecture Operating System Specific Notes Linux Notes (All Linux Versions) Linux Notes for Binary Distributions Linux x86 Notes Linux SPARC Notes Linux Alpha Notes Linux PowerPC Notes Linux MIPS Notes Linux IA64 Notes Windows Notes Starting MySQL on Windows 95 or Windows 98 Starting MySQL on Windows NT or Windows 2000 Running MySQL on Windows Connecting to a Remote MySQL from Windows with SSH Splitting Data Across Different Disks on Windows Compiling MySQL Clients on Windows MySQL-Windows Compared to Unix MySQL Solaris Notes Solaris 2.7/2.8 Notes Solaris x86 Notes BSD Notes FreeBSD Notes NetBSD notes OpenBSD Notes OpenBSD 2.5 Notes OpenBSD 2.8 Notes BSD/OS Notes BSD/OS Version 2.x Notes BSD/OS Version 3.x Notes BSD/OS Version 4.x Notes Mac OS X Notes Mac OS X Public Beta Mac OS X Server Other Unix Notes HP-UX Notes for Binary Distributions HP-UX Version 10.20 Notes HP-UX Version 11.x Notes IBM-AIX notes SunOS 4 Notes Alpha-DEC-UNIX Notes (Tru64) Alpha-DEC-OSF1 Notes SGI Irix Notes SCO Notes SCO Unixware Version 7.0 Notes OS/2 Notes BeOS Notes Novell Netware Notes Introduction to MySQL: A MySQL Tutorial Connecting to and Disconnecting from the Server Entering Queries Creating and Using a Database Creating and Selecting a Database Creating a Table Loading Data into a Table Retrieving Information from a Table Selecting All Data Selecting Particular Rows Selecting Particular Columns Sorting Rows Date Calculations Working with `NULL' Values Pattern Matching Counting Rows Using More Than one Table Getting Information About Databases and Tables Examples of Common Queries The Maximum Value for a Column The Row Holding the Maximum of a Certain Column Maximum of Column per Group The Rows Holding the Group-wise Maximum of a Certain Field Using user variables Using Foreign Keys Searching on Two Keys Calculating visits per day Using `mysql' in Batch Mode Queries from Twin Project Find all Non-distributed Twins Show a Table on Twin Pair Status Using MySQL with Apache MySQL Database Administration Configuring MySQL mysqld Command-line Options my.cnf Option Files Installing Many Servers on the Same Machine Running Multiple MySQL Servers on the Same Machine General Security Issues and the MySQL Access Privilege System General Security Guidelines How to Make MySQL Secure Against Crackers Startup Options for `mysqld' Concerning Security What the Privilege System Does How the Privilege System Works Privileges Provided by MySQL Connecting to the MySQL Server Access Control, Stage 1: Connection Verification Access Control, Stage 2: Request Verification Causes of `Access denied' Errors MySQL User Account Management `GRANT' and `REVOKE' Syntax MySQL User Names and Passwords When Privilege Changes Take Effect Setting Up the Initial MySQL Privileges Adding New Users to MySQL Setting Up Passwords Keeping Your Password Secure Using Secure Connections Basics Requirements GRANT options Disaster Prevention and Recovery Database Backups `BACKUP TABLE' Syntax `RESTORE TABLE' Syntax `CHECK TABLE' Syntax `REPAIR TABLE' Syntax Using `myisamchk' for Table Maintenance and Crash Recovery `myisamchk' Invocation Syntax General Options for `myisamchk' Check Options for `myisamchk' Repair Options for myisamchk Other Options for `myisamchk' `myisamchk' Memory Usage Using `myisamchk' for Crash Recovery How to Check Tables for Errors How to Repair Tables Table Optimization Setting Up a Table Maintenance Regimen Getting Information About a Table Database Administration Language Reference `OPTIMIZE TABLE' Syntax `ANALYZE TABLE' Syntax `FLUSH' Syntax `KILL' Syntax `SHOW' Syntax Retrieving information about Database, Tables, Columns, and Indexes `SHOW TABLE STATUS' `SHOW STATUS' `SHOW VARIABLES' `SHOW LOGS' `SHOW PROCESSLIST' `SHOW GRANTS' `SHOW CREATE TABLE' MySQL Localization and International Usage The Character Set Used for Data and Sorting German character set Non-English Error Messages Adding a New Character Set The character definition arrays String Collating Support Multi-byte Character Support Problems With Character Sets MySQL Server-Side Scripts and Utilities Overview of the Server-Side Scripts and Utilities safe_mysqld, the wrapper around mysqld mysqld_multi, program for managing multiple MySQL servers myisampack, The MySQL Compressed Read-only Table Generator mysqld-max, An extended mysqld server MySQL Client-Side Scripts and Utilities Overview of the Client-Side Scripts and Utilities The Command-line Tool mysqladmin, Administrating a MySQL Server Using `mysqlcheck' for Table Maintenance and Crash Recovery mysqldump, Dumping Table Structure and Data mysqlhotcopy, Copying MySQL Databases and Tables mysqlimport, Importing Data from Text Files Showing Databases, Tables, and Columns perror, Explaining Error Codes How to Run SQL Commands from a Text File The MySQL Log Files The Error Log The General Query Log The Update Log The Binary Update Log The Slow Query Log Log File Maintenance Replication in MySQL Introduction Replication Implementation Overview How To Set Up Replication Replication Features and Known Problems Replication Options in my.cnf SQL Commands Related to Replication Replication FAQ Troubleshooting Replication MySQL Optimization Optimization Overview MySQL Design Limitations/Tradeoffs Portability What Have We Used MySQL For? The MySQL Benchmark Suite Using Your Own Benchmarks Optimizing `SELECT's and Other Queries `EXPLAIN' Syntax (Get Information About a `SELECT') Estimating Query Performance Speed of `SELECT' Queries How MySQL Optimizes `WHERE' Clauses How MySQL Optimizes `DISTINCT' How MySQL Optimizes `LEFT JOIN' and `RIGHT JOIN' How MySQL Optimizes `LIMIT' Speed of `INSERT' Queries Speed of `UPDATE' Queries Speed of `DELETE' Queries Other Optimization Tips Locking Issues How MySQL Locks Tables Table Locking Issues Optimizing Database Structure Design Choices Get Your Data as Small as Possible How MySQL Uses Indexes Column Indexes Multiple-Column Indexes How MySQL Opens and Closes Tables Drawbacks to Creating Large Numbers of Tables in the Same Database Why So Many Open tables? Optimizing the MySQL Server System/Compile Time and Startup Parameter Tuning Tuning Server Parameters How Compiling and Linking Affects the Speed of MySQL How MySQL Uses Memory How MySQL uses DNS `SET' Syntax Disk Issues Using Symbolic Links Using Symbolic Links for Databases Using Symbolic Links for Tables MySQL Language Reference Language Structure Literals: How to Write Strings and Numbers Strings Numbers Hexadecimal Values `NULL' Values Database, Table, Index, Column, and Alias Names Case Sensitivity in Names User Variables Comment Syntax Is MySQL Picky About Reserved Words? Column Types Numeric Types Date and Time Types Y2K Issues and Date Types The `DATETIME', `DATE', and `TIMESTAMP' Types The `TIME' Type The `YEAR' Type String Types The `CHAR' and `VARCHAR' Types The `BLOB' and `TEXT' Types The `ENUM' Type The `SET' Type Choosing the Right Type for a Column Using Column Types from Other Database Engines Column Type Storage Requirements Functions for Use in `SELECT' and `WHERE' Clauses Non-Type-Specific Operators and Functions Parenthesis Comparison Operators Logical Operators Control Flow Functions String Functions String Comparison Functions Case Sensitivity Numeric Functions Arithmetic Operations Mathematical Functions Date and Time Functions Other Functions Bit Functions Miscellaneous Functions Data Manipulation: `SELECT', `INSERT', `UPDATE', `DELETE' `SELECT' Syntax `JOIN' Syntax `UNION' Syntax `INSERT' Syntax `INSERT ... SELECT' Syntax `INSERT DELAYED' syntax `UPDATE' Syntax `DELETE' Syntax `TRUNCATE' Syntax `REPLACE' Syntax `LOAD DATA INFILE' Syntax Data Definition: `CREATE', `DROP', `ALTER' `CREATE DATABASE' Syntax `DROP DATABASE' Syntax `CREATE TABLE' Syntax Silent Column Specification Changes `ALTER TABLE' Syntax `RENAME TABLE' Syntax `DROP TABLE' Syntax `CREATE INDEX' Syntax `DROP INDEX' Syntax Basic MySQL User Utility Commands `USE' Syntax `DESCRIBE' Syntax (Get Information About Columns) MySQL Transactional and Locking Commands `BEGIN/COMMIT/ROLLBACK' Syntax `LOCK TABLES/UNLOCK TABLES' Syntax `SET TRANSACTION' Syntax `HANDLER' Syntax MySQL Full-text Search Fulltext restrictions Fine-tuning MySQL Full-text Search New Features of Full-text Search to Appear in MySQL 4.0 Full-text Search TODO MySQL Table Types MyISAM Tables Space Needed for Keys MyISAM Table Formats Static (Fixed-length) Table Characteristics Dynamic Table Characteristics Compressed Table Characteristics MyISAM table problems. Corrupted MyISAM tables. Clients is using or hasn't closed the table properly MERGE Tables ISAM Tables HEAP Tables BDB or Berkeley_DB Tables Overview of BDB Tables Installing BDB BDB startup options Some characteristic of `BDB' tables: Some things we need to fix for BDB in the near future: Operating systems supported by *BDB* Errors You May Get When Using BDB Tables InnoDB Tables InnoDB tables overview InnoDB startup options Creating InnoDB table space If something goes wrong in database creation Creating InnoDB tables Converting MyISAM tables to InnoDB Adding and removing InnoDB data and log files Backing up and recovering an InnoDB database Checkpoints Moving an InnoDB database to another machine InnoDB transaction model Consistent read Locking reads Next-key locking: avoiding the phantom problem Locks set by different SQL statements in InnoDB Deadlock detection and rollback An example of how the consistent read works in InnoDB Performance tuning tips The InnoDB Monitor Implementation of multiversioning Table and index structures Physical structure of an index Insert buffering Adaptive hash indexes Physical record structure How an auto-increment column works in InnoDB File space management and disk i/o Disk i/o File space management Defragmenting a table Error handling Some restrictions on InnoDB tables InnoDB contact information MySQL APIs MySQL PHP API Common Problems with MySQL and PHP MySQL Perl API `DBI' with `DBD::mysql' The `DBI' Interface More `DBI'/`DBD' Information MySQL ODBC Support How To Install MyODBC How to Fill in the Various Fields in the ODBC Administrator Program Connect parameters for MyODBC How to Report Problems with MyODBC Programs Known to Work with MyODBC How to Get the Value of an `AUTO_INCREMENT' Column in ODBC Reporting Problems with MyODBC MySQL C API C API Datatypes C API Function Overview C API Function Descriptions `mysql_affected_rows()' `mysql_close()' `mysql_connect()' `mysql_change_user()' `mysql_character_set_name()' `mysql_create_db()' `mysql_data_seek()' `mysql_debug()' `mysql_drop_db()' `mysql_dump_debug_info()' `mysql_eof()' `mysql_errno()' `mysql_error()' `mysql_escape_string()' `mysql_fetch_field()' `mysql_fetch_fields()' `mysql_fetch_field_direct()' `mysql_fetch_lengths()' `mysql_fetch_row()' `mysql_field_count()' `mysql_field_seek()' `mysql_field_tell()' `mysql_free_result()' `mysql_get_client_info()' `mysql_get_host_info()' `mysql_get_proto_info()' `mysql_get_server_info()' `mysql_info()' `mysql_init()' `mysql_insert_id()' `mysql_kill()' `mysql_list_dbs()' `mysql_list_fields()' `mysql_list_processes()' `mysql_list_tables()' `mysql_num_fields()' `mysql_num_rows()' `mysql_options()' `mysql_ping()' `mysql_query()' `mysql_real_connect()' `mysql_real_escape_string()' `mysql_real_query()' `mysql_reload()' `mysql_row_seek()' `mysql_row_tell()' `mysql_select_db()' `mysql_shutdown()' `mysql_stat()' `mysql_store_result()' `mysql_thread_id()' `mysql_use_result()' C Threaded Function Descriptions `my_init()' `mysql_thread_init()' `mysql_thread_end()' C Embedded Server Function Descriptions `mysql_server_init()' `mysql_server_end()' Common questions and problems when using the C API Why Is It that After `mysql_query()' Returns Success, `mysql_store_result()' Sometimes Returns `NULL?' What Results Can I Get From a Query? How Can I Get the Unique ID for the Last Inserted Row? Problems Linking with the C API Building Client Programs How to Make a Threaded Client libmysqld, the Embedded MySQL Server Library Overview of the Embedded MySQL Server Library Compiling Programs with `libmysqld' Restrictions when using the Embedded MySQL Server Using option files with the embedded server Things left to do in Embedded Server (TODO) A Simple Embedded Server Example Licensing the Embedded Server MySQL C++ APIs Borland C++ MySQL Java Connectivity (JDBC) MySQL Python APIs MySQL Tcl APIs MySQL Eiffel wrapper Extending MySQL Adding New Functions to MySQL `CREATE FUNCTION/DROP FUNCTION' Syntax Adding a New User-definable Function UDF Calling Sequences Argument Processing Return Values and Error Handling Compiling and Installing User-definable Functions Adding a New Native Function Adding New Procedures to MySQL Procedure Analyse Writing a Procedure MySQL Internals MySQL Threads MySQL Test Suite Running the MySQL Test Suite Extending the MySQL Test Suite Reporting Bugs in the MySQL Test Suite Problems and Common Errors How to Determine What Is Causing Problems Some Common Errors When Using MySQL `Access denied' Error `MySQL server has gone away' Error `Can't connect to [local] MySQL server' error `Host '...' is blocked' Error `Too many connections' Error `Some non-transactional changed tables couldn't be rolled back' Error `Out of memory' Error `Packet too large' Error Communication Errors / Aborted Connection `The table is full' Error `Can't create/write to file' Error `Commands out of sync' Error in Client `Ignoring user' Error `Table 'xxx' doesn't exist' Error `Cant' initialize character set xxx' error. File Not Found Installation Related Issues Problems When Linking with the MySQL Client Library How to Run MySQL As a Normal User Problems with File Permissions Administration Related Issues What To Do If MySQL Keeps Crashing How to Reset a Forgotten Password How MySQL Handles a Full Disk Where MySQL Stores Temporary Files How to Protect or change the MySQL socket file `/tmp/mysql.sock' Time Zone Problems Query Related Issues Case Sensitivity in Searches Problems Using `DATE' Columns Problems with `NULL' Values Problems with `alias' Deleting Rows from Related Tables Solving Problems with No Matching Rows Table Definition Related Issues Problems with `ALTER TABLE'. How To Change the Order of Columns in a Table TEMPORARY TABLE problems Some MySQL Users General News Sites Some Web Search Engines Some Information Search Engines Concentrated on Some Area Online Magazines Web Sites that Use MySQL as a Backend Some Domain/Internet/Web and Related Services Web Sites that Use `PHP' and MySQL Some MySQL Consultants Programming Uncategorized Pages MySQL customer usage Contributed Programs APIs Clients Web Tools Performance Benchmarking Tools Authentication Tools Converters Using MySQL with Other Products Useful Tools RPMs for Common Tools (Most Are for RedHat 6.1) Useful Functions Windows programs Uncategorized Credits Developers at MySQL AB Contributors to MySQL Supporters to MySQL MySQL change history Changes in release 4.0.x (Development; Alpha) Changes in release 4.0.0 Changes in release 3.23.x (Stable) Changes in release 3.23.44 Changes in release 3.23.43 Changes in release 3.23.42 Changes in release 3.23.41 Changes in release 3.23.40 Changes in release 3.23.39 Changes in release 3.23.38 Changes in release 3.23.37 Changes in release 3.23.36 Changes in release 3.23.35 Changes in release 3.23.34a Changes in release 3.23.34 Changes in release 3.23.33 Changes in release 3.23.32 Changes in release 3.23.31 Changes in release 3.23.30 Changes in release 3.23.29 Changes in release 3.23.28 Changes in release 3.23.27 Changes in release 3.23.26 Changes in release 3.23.25 Changes in release 3.23.24 Changes in release 3.23.23 Changes in release 3.23.22 Changes in release 3.23.21 Changes in release 3.23.20 Changes in release 3.23.19 Changes in release 3.23.18 Changes in release 3.23.17 Changes in release 3.23.16 Changes in release 3.23.15 Changes in release 3.23.14 Changes in release 3.23.13 Changes in release 3.23.12 Changes in release 3.23.11 Changes in release 3.23.10 Changes in release 3.23.9 Changes in release 3.23.8 Changes in release 3.23.7 Changes in release 3.23.6 Changes in release 3.23.5 Changes in release 3.23.4 Changes in release 3.23.3 Changes in release 3.23.2 Changes in release 3.23.1 Changes in release 3.23.0 Changes in release 3.22.x (Older; Still supported) Changes in release 3.22.35 Changes in release 3.22.34 Changes in release 3.22.33 Changes in release 3.22.32 Changes in release 3.22.31 Changes in release 3.22.30 Changes in release 3.22.29 Changes in release 3.22.28 Changes in release 3.22.27 Changes in release 3.22.26 Changes in release 3.22.25 Changes in release 3.22.24 Changes in release 3.22.23 Changes in release 3.22.22 Changes in release 3.22.21 Changes in release 3.22.20 Changes in release 3.22.19 Changes in release 3.22.18 Changes in release 3.22.17 Changes in release 3.22.16 Changes in release 3.22.15 Changes in release 3.22.14 Changes in release 3.22.13 Changes in release 3.22.12 Changes in release 3.22.11 Changes in release 3.22.10 Changes in release 3.22.9 Changes in release 3.22.8 Changes in release 3.22.7 Changes in release 3.22.6 Changes in release 3.22.5 Changes in release 3.22.4 Changes in release 3.22.3 Changes in release 3.22.2 Changes in release 3.22.1 Changes in release 3.22.0 Changes in release 3.21.x Changes in release 3.21.33 Changes in release 3.21.32 Changes in release 3.21.31 Changes in release 3.21.30 Changes in release 3.21.29 Changes in release 3.21.28 Changes in release 3.21.27 Changes in release 3.21.26 Changes in release 3.21.25 Changes in release 3.21.24 Changes in release 3.21.23 Changes in release 3.21.22 Changes in release 3.21.21a Changes in release 3.21.21 Changes in release 3.21.20 Changes in release 3.21.19 Changes in release 3.21.18 Changes in release 3.21.17 Changes in release 3.21.16 Changes in release 3.21.15 Changes in release 3.21.14b Changes in release 3.21.14a Changes in release 3.21.13 Changes in release 3.21.12 Changes in release 3.21.11 Changes in release 3.21.10 Changes in release 3.21.9 Changes in release 3.21.8 Changes in release 3.21.7 Changes in release 3.21.6 Changes in release 3.21.5 Changes in release 3.21.4 Changes in release 3.21.3 Changes in release 3.21.2 Changes in release 3.21.0 Changes in release 3.20.x Changes in release 3.20.18 Changes in release 3.20.17 Changes in release 3.20.16 Changes in release 3.20.15 Changes in release 3.20.14 Changes in release 3.20.13 Changes in release 3.20.11 Changes in release 3.20.10 Changes in release 3.20.9 Changes in release 3.20.8 Changes in release 3.20.7 Changes in release 3.20.6 Changes in release 3.20.3 Changes in release 3.20.0 Changes in release 3.19.x Changes in release 3.19.5 Changes in release 3.19.4 Changes in release 3.19.3 Comments on porting to other systems Debugging a MySQL server Compiling MYSQL for debugging. Creating trace files Debugging mysqld under gdb Using a stack trace Using log files to find cause of errors in mysqld Making a test case when you experience table corruption Debugging a MySQL client The DBUG package. Locking methods Comments about RTS threads Differences between different thread packages Environment Variables Description of MySQL regular expression syntax What is Unireg? GNU GENERAL PUBLIC LICENSE Preamble How to Apply These Terms to Your New Programs GNU LESSER GENERAL PUBLIC LICENSE Preamble How to Apply These Terms to Your New Libraries Pieces of the manual in transit Installing a MySQL Binary Distribution Perl Installation Comments Installing Perl on Unix Installing ActiveState Perl on Windows Installing the MySQL Perl Distribution on Windows Problems Using the Perl `DBI'/`DBD' Interface Functions for Use with `GROUP BY' Clauses SQL command, type and function index Concept Index This is a manual for MySQL. This version is about the 4.0.0-alpha version of MySQL. You can find a manual about any older version of MySQL in the binary or source distribution for that version. General Information About MySQL ******************************* This is the MySQL reference manual; it documents MySQL Version 4.0.0-alpha. As MySQL is work in progress, the manual gets updated frequently. There is a very good chance that this version is out of date, unless you are looking at it online. The most recent version of this manual is available at `http://www.mysql.com/documentation/index.html' in many different formats. If you have a hard time finding information in the manual, you can try the searchable PHP version at `http://www.mysql.com/doc'. MySQL is a very fast, multi-threaded, multi-user, and robust SQL (Structured Query Language) database server. MySQL is free software. It is licensed with the *GNU GENERAL PUBLIC LICENSE* `http://www.gnu.org/'. *Note Licensing and Support::. The MySQL home page (http://www.mysql.com/) provides the latest information about MySQL. The following list describes some useful sections of the manual: * For information about the company behind MySQL, see *Note What is MySQL AB::. * For a discussion of MySQL's capabilities, see *Note Features::. * For installation instructions, see *Note Installing::. * For tips on porting MySQL to new architectures or operating systems, see *Note Porting::. * For information about upgrading from a Version 3.23 release, see *Note Upgrading-from-3.23::. * For information about upgrading from a Version 3.22 release, see *Note Upgrading-from-3.22::. * For a tutorial introduction to MySQL, see *Note Tutorial::. * For examples of SQL and benchmarking information, see the benchmarking directory (`sql-bench' in the distribution). * For a history of new features and bug fixes, see *Note News::. * For a list of currently known bugs and misfeatures, see *Note Bugs::. * For future plans, see *Note TODO::. * For a list of all the contributors to this project, see *Note Credits::. *IMPORTANT:* Reports of errors (often called bugs), as well as questions and comments, should be sent to the mailing list at . *Note Bug reports::. The `mysqlbug' script should be used to generate bug reports. For source distributions, the `mysqlbug' script can be found in the `scripts' directory. For binary distributions, `mysqlbug' can be found in the `bin' directory. If you have found a sensitive security bug in MySQL, you should send an e-mail to . If you have any suggestions concerning additions or corrections to this manual, please send them to the manual team at . This is a reference manual; it does not provide general instruction on SQL or relational database concepts. If you want general information about SQL, see *Note General-SQL::. For books that focus more specifically on MySQL, see *Note MySQL-Books::. MySQL, MySQL AB, and Open Source ================================ What Is MySQL ------------- MySQL, the most popular Open Source SQL database, is provided by MySQL AB. MySQL AB is a commercial company that builds its business providing services around the MySQL database. *Note What is MySQL AB::. MySQL is a database management system. A database is a structured collection of data. It may be anything from a simple shopping list to a picture gallery or the vast amounts of information in a corporate network. To add, access, and process data stored in a computer database, you need a database management system such as MySQL. Since computers are very good at handling large amounts of data, database management plays a central role in computing, as stand-alone utilities, or as parts of other applications. MySQL is a relational database management system. A relational database stores data in separate tables rather than putting all the data in one big storeroom. This adds speed and flexibility. The tables are linked by defined relations making it possible to combine data from several tables on request. The SQL part of MySQL stands for "Structured Query Language" - the most common standardized language used to access databases. MySQL is Open Source Software. Open Source means that it is possible for anyone to use and modify. Anybody can download MySQL from the Internet and use it without paying anything. Anybody so inclined can study the source code and change it to fit their needs. MySQL uses the GPL (GNU General Public License) `http://www.gnu.org', to define what you may and may not do with the software in different situations. If you feel uncomfortable with the GPL or need to embed MySQL into a commercial application you can buy a commercially licensed version from us. Why use MySQL? MySQL is very fast, reliable, and easy to use. If that is what you are looking for, you should give it a try. MySQL also has a practical set of features developed in close cooperation with our users. You can find a performance comparison of MySQL to some other database managers on our benchmark page. *Note MySQL Benchmarks::. MySQL was originally developed to handle large databases much faster than existing solutions and has been successfully used in highly demanding production environments for several years. Though under constant development, MySQL today offers a rich and useful set of functions. The connectivity, speed, and security make MySQL highly suited for accessing databases on the Internet. The technical features of MySQL For advanced technical information, see *Note Reference::. MySQL is a client/server system that consists of a multi-threaded SQL server that supports different backends, several different client programs and libraries, administrative tools, and several programming interfaces. We also provide MySQL as a multi-threaded library which you can link into your application to get a smaller, faster, easier to manage product. MySQL has a lot of contributed software available. It is very likely that you will find that your favorite application or language already supports MySQL. The official way to pronounce MySQL is "My Ess Que Ell" (not MY-SEQUEL). But we try to avoid correcting people who say MY-SEQUEL. What Is MySQL AB ---------------- MySQL AB is the Swedish company owned and run by the MySQL founders and main developers. We are dedicated to developing MySQL and spreading our database to new users. MySQL AB owns the copyright to the MySQL server source code and the MySQL trademark. A significant amount of revenues from our services goes to developing MySQL. *Note What-is::. MySQL AB has been profitable providing MySQL from the start. We don't get any outside funding, but have earned all our money ourselves. We are searching for partners that would like to support our development of MySQL so that we can accelerate the pace of development. If you are interested in doing this, please e-mail ! MySQL AB currently has over twenty people (`http://www.mysql.com/development/team.html') on its payroll and is growing rapidly. Our main sources of income are: * Commercial high quality support for MySQL provided by the MySQL developers themselves. If you are interested in purchasing a support contract, please visit `https://order.mysql.com/' to view our support options and order support. * Consulting services. We have developers and consultants in 12 countries and partners in many other countries that can help you with almost any MySQL related issues. If you need consulting services, please e-mail a good description of your needs to ! If we can't handle this ourselves we can usually find a partner or a developer that can help you with your problems. * Licensing MySQL for use as an embedded database. *Note Licensing policy::. If you have a commercial product for which you need a fast, high quality database, but you can't afford to make your product Open Source, you can buy the right to use the MySQL server under a commercial copyright. If you are interested in this you can buy MySQL licenses at `https://order.mysql.com/' or contact us at . * Advertising. `http://www.mysql.com/' is a very popular web site with more than 10,000,000 page views per months (January 2001). By putting a banner on this site you are guaranteed to reach a lot of potential customers in the open source, Linux and database communities. If you are interested in this e-mail . * We are building a partner program to be able to provide MySQL services in every country. If you are interested in becoming a partner of MySQL AB please visit `http://www.mysql.com/information/partners.html' or e-mail . * We provide MySQL training through our partner programs. For more information, please e-mail . * The MySQL brand has, since 1995, been associated with speed and reliability, and is known to be something you can depend upon. If you are interested in using the MySQL trademark in your marketing, you can e-mail about this. The MySQL core values show our dedication to MySQL and Open Source. We want MySQL to be: * The best and the most widely used database in the world. * Available and affordable for all. * Easy to use. * Continuously improving while remaining fast and safe. * Fun to use and improve. * Free from bugs. MySQL AB and the people of MySQL AB: * Promote Open Source Philosophy and support the Open Source Community. * Aim to be good citizens. * Prefer partners that share our values and mind-set. * Answer e-mail and provide support. * Are a virtual company, networking with others. * Work against software patents. Contact Information ................... For commercial licensing, please contact the MySQL licensing team. The much preferred method is by e-mail to . Fax is also possible but handling of these may take much longer (Fax +46-8-729 69 05). If you represent a business that is interested in partnering with MySQL, please send e-mail to . For timely, precise answers to technical questions about MySQL you should order one of our support contracts (https://order.mysql.com/). MySQL support is provided by the MySQL developers so the standard is extremely high. If you are interested in placing a banner advertisement on our Web site, please send e-mail to . If you are interested in any of the jobs listed in our jobs (http://www.mysql.com/development/jobs/) section, please send e-mail to . For general discussion amongst our many users, please direct your attention to the appropriate mailing list (http://www.mysql.com/documentation/lists.html). For general information inquires, please send e-mail to . For questions or comments about the workings or content of the Web site, please send e-mail to . About This Manual ----------------- This manual is currently available in Texinfo, plain text, Info, HTML, PostScript, and PDF versions. The primary document is the Texinfo file. The HTML version is produced automatically using a modified version of `texi2html'. The plain text and Info versions are produced with `makeinfo'. The Postscript version is produced using `texi2dvi' and `dvips'. The PDF version is produced with `pdftex'. This manual is written and maintained by David Axmark, Michael (Monty) Widenius, Jeremy Cole, Arjen Lentz, and Paul DuBois. For other contributors, see *Note Credits::. Conventions Used in This Manual ------------------------------- This manual uses certain typographical conventions: `constant' Constant-width font is used for command names and options; SQL statements; database, table and column names; C and Perl code; and environment variables. Example: "To see how `mysqladmin' works, invoke it with the `--help' option." `filename' Constant-width font with surrounding quotes is used for filenames and pathnames. Example: "The distribution is installed under the `/usr/local/' directory." `c' Constant-width font with surrounding quotes is also used to indicate character sequences. Example: "To specify a wild card, use the `%' character." _italic_ Italic font is used for emphasis, _like this_. *boldface* Boldface font is used for access privilege names (for example, "do not grant the *process* privilege lightly") and occasionally to convey *especially strong emphasis*. When commands are shown that are meant to be executed by a particular program, the program is indicated by a prompt shown before the command. For example, `shell>' indicates a command that you execute from your login shell, and `mysql>' indicates a command that you execute from the `mysql' client program: shell> type a shell command here mysql> type a mysql command here Shell commands are shown using Bourne shell syntax. If you are using a `csh'-style shell, you may need to issue commands slightly differently. For example, the sequence to set an environment variable and run a command looks like this in Bourne shell syntax: shell> VARNAME=value some_command For `csh', you would execute the sequence like this: shell> setenv VARNAME value shell> some_command Often database, table, and column names must be substituted into commands. To indicate that such substitution is necessary, this manual uses `db_name', `tbl_name' and `col_name'. For example, you might see a statement like this: mysql> SELECT col_name FROM db_name.tbl_name; This means that if you were to enter a similar statement, you would supply your own database, table, and column names, perhaps like this: mysql> SELECT author_name FROM biblio_db.author_list; SQL statements may be written in uppercase or lowercase. When this manual shows a SQL statement, uppercase is used for particular keywords if those keywords are under discussion (to emphasize them) and lowercase is used for the rest of the statement. For example, you might see the following in a discussion of the `SELECT' statement: mysql> SELECT count(*) FROM tbl_name; On the other hand, in a discussion of the `COUNT()' function, the same statement would be written like this: mysql> select COUNT(*) from tbl_name; If no particular emphasis is intended, all keywords are written uniformly in uppercase. In syntax descriptions, square brackets (`[' and `]') are used to indicate optional words or clauses: DROP TABLE [IF EXISTS] tbl_name When a syntax element consists of a number of alternatives, the alternatives are separated by vertical bars (`|'). When one member from a set of choices *may* be chosen, the alternatives are listed within square brackets (`[' and `]'): TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str) When one member from a set of choices *must* be chosen, the alternatives are listed within braces (`{' and `}'): {DESCRIBE | DESC} tbl_name {col_name | wild} History of MySQL ---------------- We once started out with the intention of using `mSQL' to connect to our tables using our own fast low-level (ISAM) routines. However, after some testing we came to the conclusion that `mSQL' was not fast enough nor flexible enough for our needs. This resulted in a new SQL interface to our database but with almost the same API interface as `mSQL'. This API was chosen to ease porting of third-party code. The derivation of the name MySQL is not perfectly clear. Our base directory and a large number of our libraries and tools have had the prefix "my" for well over 10 years. However, Monty's daughter (some years younger) is also named My. Which of the two gave its name to MySQL is still a mystery, even for us. The Main Features of MySQL -------------------------- The following list describes some of the important characteristics of MySQL: * Fully multi-threaded using kernel threads. This means it can easily use multiple CPUs if available. * C, C++, Eiffel, Java, Perl, PHP, Python and Tcl APIs. *Note Clients::. * Works on many different platforms. *Note Which OS::. * Many column types: signed/unsigned integers 1, 2, 3, 4, and 8 bytes long, `FLOAT', `DOUBLE', `CHAR', `VARCHAR', `TEXT', `BLOB', `DATE', `TIME', `DATETIME', `TIMESTAMP', `YEAR', `SET', and `ENUM' types. *Note Column types::. * Very fast joins using an optimized one-sweep multi-join. * Full operator and function support in the `SELECT' and `WHERE' parts of queries. For example: mysql> SELECT CONCAT(first_name, " ", last_name) FROM tbl_name WHERE income/dependents > 10000 AND age > 30; * SQL functions are implemented through a highly optimized class library and should be as fast as possible! Usually there isn't any memory allocation at all after query initialization. * Full support for SQL `GROUP BY' and `ORDER BY' clauses. Support for group functions (`COUNT()', `COUNT(DISTINCT ...)', `AVG()', `STD()', `SUM()', `MAX()' and `MIN()'). * Support for `LEFT OUTER JOIN' and `RIGHT OUTER JOIN' with ANSI SQL and ODBC syntax. * You can mix tables from different databases in the same query (as of Version 3.22). * A privilege and password system that is very flexible and secure, and allows host-based verification. Passwords are secure because all password traffic is encrypted when you connect to a server. * ODBC (Open-DataBase-Connectivity) support for Win32 (with source). All ODBC 2.5 functions and many others. For example, you can use MS Access to connect to your MySQL server. *Note ODBC::. * Very fast B-tree disk tables with index compression. * Up to 32 indexes per table are allowed. Each index may consist of 1 to 16 columns or parts of columns. The maximum index length is 500 bytes (this may be changed when compiling MySQL). An index may use a prefix of a `CHAR' or `VARCHAR' field. * Fixed-length and variable-length records. * In-memory hash tables which are used as temporary tables. * Handles large databases. We are using MySQL with some databases that contain 50,000,000 records and we know of users that uses MySQL with 60,000 tables and about 5,000,000,000 rows * All columns have default values. You can use `INSERT' to insert a subset of a table's columns; those columns that are not explicitly given values are set to their default values. * Uses GNU Automake, Autoconf, and Libtool for portability. * Written in C and C++. Tested with a broad range of different compilers. * A very fast thread-based memory allocation system. * No memory leaks. MySQL has been tested with Purify, a commercial memory leakage detector. * Includes `myisamchk', a very fast utility for table checking, optimization, and repair. All of the functionality of `myisamchk' is also available through the SQL interface as well. *Note MySQL Database Administration::. * Full support for several different character sets, including ISO-8859-1 (Latin1), german, big5, ujis, and more. For example, the Scandinavian characters `a*', `a"' and `o"' are allowed in table and column names. * All data are saved in the chosen character set. All comparisons for normal string columns are case insensitive. * Sorting is done according to the chosen character set (the Swedish way by default). It is possible to change this when the MySQL server is started up. To see an example of very advanced sorting, look at the Czech sorting code. MySQL supports many different character sets that can be specified at compile and run time. * Aliases on tables and columns are allowed as in the SQL92 standard. * `DELETE', `INSERT', `REPLACE', and `UPDATE' return the number of rows that were changed (affected). It is possible to return the number of rows matched instead by setting a flag when connecting to the server. * Function names do not clash with table or column names. For example, `ABS' is a valid column name. The only restriction is that for a function call, no spaces are allowed between the function name and the `(' that follows it. *Note Reserved words::. * All MySQL programs can be invoked with the `--help' or `-?' options to obtain online assistance. * The server can provide error messages to clients in many languages. *Note Languages::. * Clients may connect to the MySQL server using TCP/IP Sockets, Unix Sockets (Unix), or Named Pipes (NT). * The MySQL-specific `SHOW' command can be used to retrieve information about databases, tables, and indexes. The `EXPLAIN' command can be used to determine how the optimizer resolves a query. How Stable Is MySQL? -------------------- This section addresses the questions "How stable is MySQL?" and "Can I depend on MySQL in this project?" We will try to clarify some issues and to answer some of the more important questions that seem to concern many people. This section has been put together from information gathered from the mailing list (which is very active in reporting bugs). At TcX, MySQL has worked without any problems in our projects since mid-1996. When MySQL was released to a wider public, we noticed that there were some pieces of "untested code" that were quickly found by the new users who made queries in a manner different than our own. Each new release has had fewer portability problems than the previous one (even though each has had many new features). Each release of MySQL has been usable, and there have been problems only when users start to use code from the "gray zones." Naturally, outside users don't know what the gray zones are; this section attempts to indicate those that are currently known. The descriptions deal with Version 3.23 of MySQL. All known and reported bugs are fixed in the latest version, with the exception of the bugs listed in the bugs section, which are things that are design-related. *Note Bugs::. MySQL is written in multiple layers and different independent modules. These modules are listed below with an indication of how well-tested each of them is: *The ISAM table handler -- Stable* This manages storage and retrieval of all data in MySQL Version 3.22 and earlier. In all MySQL releases there hasn't been a single (reported) bug in this code. The only known way to get a corrupted table is to kill the server in the middle of an update. Even that is unlikely to destroy any data beyond rescue, because all data are flushed to disk between each query. There hasn't been a single bug report about lost data because of bugs in MySQL. *The MyISAM table handler -- Stable* This is new in MySQL Version 3.23. It's largely based on the ISAM table code but has a lot of new and very useful features. *The parser and lexical analyser -- Stable* There hasn't been a single reported bug in this system for a long time. *The C client code -- Stable* No known problems. In early Version 3.20 releases, there were some limitations in the send/receive buffer size. As of Version 3.21, the buffer size is now dynamic up to a default of 16M. *Standard client programs -- Stable* These include `mysql', `mysqladmin', `mysqlshow', `mysqldump', and `mysqlimport'. *Basic SQL -- Stable* The basic SQL function system and string classes and dynamic memory handling. Not a single reported bug in this system. *Query optimizer -- Stable* *Range optimizer -- Stable* *Join optimizer -- Stable* *Locking -- Gamma* This is very system-dependent. On some systems there are big problems using standard OS locking (`fcntl()'). In these cases, you should run the MySQL daemon with the `--skip-locking' flag. Problems are known to occur on some Linux systems, and on SunOS when using NFS-mounted file systems. *Linux threads -- Stable* The major problem found has been with the `fcntl()' call, which is fixed by using the `--skip-locking' option to `mysqld'. Some people have reported lockup problems with Version 0.5. LinuxThreads will need to be recompiled if you plan to use 1000+ concurrent connections. Although it is possible to run that many connections with the default LinuxThreads (however, you will never go above 1021), the default stack spacing of 2 MB makes the application unstable, and we have been able to reproduce a coredump after creating 1021 idle connections. *Note Linux::. *Solaris 2.5+ pthreads -- Stable* We use this for all our production work. *MIT-pthreads (Other systems) -- Stable* There have been no reported bugs since Version 3.20.15 and no known bugs since Version 3.20.16. On some systems, there is a "misfeature" where some operations are quite slow (a 1/20 second sleep is done between each query). Of course, MIT-pthreads may slow down everything a bit, but index-based `SELECT' statements are usually done in one time frame so there shouldn't be a mutex locking/thread juggling. *Other thread implementions -- Beta - Gamma* The ports to other systems are still very new and may have bugs, possibly in MySQL, but most often in the thread implementation itself. *`LOAD DATA ...', `INSERT ... SELECT' -- Stable* Some people thought they had found bugs here, but these usually have turned out to be misunderstandings. Please check the manual before reporting problems! *`ALTER TABLE' -- Stable* Small changes in Version 3.22.12. *DBD -- Stable* Now maintained by Jochen Wiedmann (). Thanks! *`mysqlaccess' -- Stable* Written and maintained by Yves Carlier (). Thanks! *`GRANT' -- Stable* Big changes made in MySQL Version 3.22.12. **MyODBC* (uses ODBC SDK 2.5) -- Gamma* It seems to work well with some programs. *Replication - Beta / Gamma* We are still working on replication, so don't expect this to be rock solid yet. On the other hand, some MySQL users are already using this with good results. *BDB Tables - Beta* The Berkeley DB code is very stable, but we are still improving the interface between MySQL and BDB tables, so it will take some time before this is tested as well as the other table types. *InnoDB Tables - Beta* This is a recent addition to `MySQL'. They appear to work well and can be used after some initial testing. *Automatic recovery of MyISAM tables - Beta* This only affects the new code that checks if the table was closed properly on open and executes an automatic check/repair of the table if it wasn't. *MERGE tables - Beta / Gamma* The usage of keys on `MERGE' tables is still not well tested. The other parts of the `MERGE' code are quite well tested. *FULLTEXT - Beta* Text search seems to work, but is still not widely used. MySQL AB provides high-quality support for paying customers, but the MySQL mailing list usually provides answers to common questions. Bugs are usually fixed right away with a patch; for serious bugs, there is almost always a new release. How Big Can MySQL Tables Be? ---------------------------- MySQL Version 3.22 has a 4G limit on table size. With the new `MyISAM' in MySQL Version 3.23 the maximum table size is pushed up to 8 million terabytes (2 ^ 63 bytes). Note, however, that operating systems have their own file size limits. Here are some examples: *Operating System* *File Size Limit* Linux-Intel 32 bit 2G, 4G or more, depends on Linux version Linux-Alpha 8T (?) Solaris 2.5.1 2G (possible 4G with patch) Solaris 2.6 4G Solaris 2.7 Intel 4G Solaris 2.7 ULTRA-SPARC 8T (?) On Linux 2.2 you can get bigger tables than 2G by using the LFS patch for the ext2 file system. On Linux 2.4 there exists also patches for ReiserFS to get support for big files. This means that the table size for MySQL is normally limited by the operating system. By default, MySQL tables have a maximum size of about 4G. You can check the maximum table size for a table with the `SHOW TABLE STATUS' command or with the `myisamchk -dv table_name'. *Note SHOW::. If you need bigger tables than 4G (and your operating system supports this), you should set the `AVG_ROW_LENGTH' and `MAX_ROWS' parameter when you create your table. *Note CREATE TABLE::. You can also set these later with `ALTER TABLE'. *Note ALTER TABLE::. If your big table is going to be read-only, you could use `myisampack' to merge and compress many tables to one. `myisampack' usually compresses a table by at least 50%, so you can have, in effect, much bigger tables. *Note `myisampack': myisampack. You can go around the operating system file limit for `MyISAM' data files by using the `RAID' option. *Note CREATE TABLE::. Another solution can be the included MERGE library, which allows you to handle a collection of identical tables as one. *Note MERGE tables: MERGE. Year 2000 Compliance -------------------- MySQL itself has no problems with Year 2000 (Y2K) compliance: * MySQL uses Unix time functions and has no problems with dates until `2069'; all 2-digit years are regarded to be in the range `1970' to `2069', which means that if you store `01' in a `year' column, MySQL treats it as `2001'. * All MySQL date functions are stored in one file `sql/time.cc' and coded very carefully to be year 2000-safe. * In MySQL Version 3.22 and later, the new `YEAR' column type can store years `0' and `1901' to `2155' in 1 byte and display them using 2 or 4 digits. You may run into problems with applications that use MySQL in a way that is not Y2K-safe. For example, many old applications store or manipulate years using 2-digit values (which are ambiguous) rather than 4-digit values. This problem may be compounded by applications that use values such as `00' or `99' as "missing" value indicators. Unfortunately, these problems may be difficult to fix, because different applications may be written by different programmers, each of whom may use a different set of conventions and date-handling functions. Here is a simple demonstration illustrating that MySQL doesn't have any problems with dates until the year 2030: mysql> DROP TABLE IF EXISTS y2k; Query OK, 0 rows affected (0.01 sec) mysql> CREATE TABLE y2k (date date, date_time datetime, time_stamp timestamp); Query OK, 0 rows affected (0.00 sec) mysql> INSERT INTO y2k VALUES -> ("1998-12-31","1998-12-31 23:59:59",19981231235959), -> ("1999-01-01","1999-01-01 00:00:00",19990101000000), -> ("1999-09-09","1999-09-09 23:59:59",19990909235959), -> ("2000-01-01","2000-01-01 00:00:00",20000101000000), -> ("2000-02-28","2000-02-28 00:00:00",20000228000000), -> ("2000-02-29","2000-02-29 00:00:00",20000229000000), -> ("2000-03-01","2000-03-01 00:00:00",20000301000000), -> ("2000-12-31","2000-12-31 23:59:59",20001231235959), -> ("2001-01-01","2001-01-01 00:00:00",20010101000000), -> ("2004-12-31","2004-12-31 23:59:59",20041231235959), -> ("2005-01-01","2005-01-01 00:00:00",20050101000000), -> ("2030-01-01","2030-01-01 00:00:00",20300101000000), -> ("2050-01-01","2050-01-01 00:00:00",20500101000000); Query OK, 13 rows affected (0.01 sec) Records: 13 Duplicates: 0 Warnings: 0 mysql> SELECT * FROM y2k; +------------+---------------------+----------------+ | date | date_time | time_stamp | +------------+---------------------+----------------+ | 1998-12-31 | 1998-12-31 23:59:59 | 19981231235959 | | 1999-01-01 | 1999-01-01 00:00:00 | 19990101000000 | | 1999-09-09 | 1999-09-09 23:59:59 | 19990909235959 | | 2000-01-01 | 2000-01-01 00:00:00 | 20000101000000 | | 2000-02-28 | 2000-02-28 00:00:00 | 20000228000000 | | 2000-02-29 | 2000-02-29 00:00:00 | 20000229000000 | | 2000-03-01 | 2000-03-01 00:00:00 | 20000301000000 | | 2000-12-31 | 2000-12-31 23:59:59 | 20001231235959 | | 2001-01-01 | 2001-01-01 00:00:00 | 20010101000000 | | 2004-12-31 | 2004-12-31 23:59:59 | 20041231235959 | | 2005-01-01 | 2005-01-01 00:00:00 | 20050101000000 | | 2030-01-01 | 2030-01-01 00:00:00 | 20300101000000 | | 2050-01-01 | 2050-01-01 00:00:00 | 00000000000000 | +------------+---------------------+----------------+ 13 rows in set (0.00 sec) This shows that the `DATE' and `DATETIME' types will not give any problems with future dates (they handle dates until the year 9999). The `TIMESTAMP' type, which is used to store the current time, has a range up to only `2030-01-01'. `TIMESTAMP' has a range of `1970' to `2030' on 32-bit machines (signed value). On 64-bit machines it handles times up to `2106' (unsigned value). Even though MySQL is Y2K-compliant, it is your responsibility to provide unambiguous input. See *Note Y2K issues:: for MySQL's rules for dealing with ambiguous date input data (data containing 2-digit year values). MySQL Information Sources ========================= Books About MySQL ----------------- For the latest book information, with user comments, please visit `http://www.mysql.com/portal/books/html/index.html'. While this manual is still the right place for up to date technical information, its primary goal is to contain everything there is to know about MySQL. It is sometimes nice to have a bound book to read in bed or while you travel. Here is a list of books about MySQL and related subjects (in English). By purchasing a book through these hyperlinks provided herein, you are contributing to the development of MySQL. _MySQL_ Available Barnes and Noble (http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=0735709211&bfmtype=book) Publisher New Riders Author Paul DuBois Pub Date 1st Edition December 1999 ISBN 0735709211 Pages 800 Price $49.99 US Downloadable examples `samp_db' distribution (http://www.kitebird.com/mysql-book/) Errata are available here (http://www.kitebird.com/mysql-book/errata.html) Foreword by Michael "Monty" Widenius, MySQL Moderator. In _MySQL_, Paul DuBois provides you with a comprehensive guide to one of the most popular relational database systems. Paul has contributed to the online documentation for MySQL and is an active member of the MySQL community. The principal MySQL developer, Monty Widenius, and a network of his fellow developers reviewed the manuscript, and provided Paul with the kind of insight no one else could supply. Instead of merely giving you a general overview of MySQL, Paul teaches you how to make the most of its capabilities. Through two sample database applications that run throughout the book, he gives you solutions to problems you're sure to face. He helps you integrate MySQL efficiently with third-party tools, such as PHP and Perl, enabling you to generate dynamic Web pages through database queries. He teaches you to write programs that access MySQL databases, and also provides a comprehensive set of references to column types, operators, functions, SQL syntax, MySQL programming, C API, Perl `DBI', and PHP API. _MySQL_ simply gives you the kind of information you won't find anywhere else. If you use MySQL, this book provides you with: * An introduction to MySQL and SQL. * Coverage of MySQL's data types and how to use them. * Thorough treatment of how to write client programs in C. * A guide to using the Perl `DBI' and PHP APIs for developing command-line and Web-based applications. * Tips on administrative issues such as user accounts, backup, crash recovery, and security. * Help in choosing an ISP for MySQL access. * A comprehensive reference for MySQL's data types, operators, functions, and SQL statements and utilities. * Complete reference guides for MySQL's C API, the Perl `DBI' API, and PHP's MySQL-related functions. _MySQL & mSQL_ Available Barnes and Noble (http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=1565924347&bfmtype=book) Publisher O'Reilly Authors Randy Jay Yarger, George Reese & Tim King Pub Date 1st Edition July 1999 ISBN 1-56592-434-7, Order Number: 4347 Pages 506 Price $34.95 This book teaches you how to use MySQL and `mSQL', two popular and robust database products that support key subsets of SQL on both Linux and Unix systems. Anyone who knows basic C, Java, Perl, or Python can write a program to interact with a database, either as a stand-alone application or through a Web page. This book takes you through the whole process, from installation and configuration to programming interfaces and basic administration. Includes plenty of tutorial material. _Sams' Teach Yourself MySQL in 21 Days_ Available Barnes and Noble (http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=0672319144&bfmtype=book) Publisher Sams Authors Mark Maslakowski and Tony Butcher Pub Date June 2000 ISBN 0672319144 Pages 650 Price $39.99 Sams' _Teach Yourself MySQL in 21 Days_ is for intermediate Linux users who want to move into databases. A large share of the audience is Web developers who need a database to store large amounts of information that can be retrieved via the Web. Sams' _Teach Yourself MySQL in 21 Days_ is a practical, step-by-step tutorial. The reader will learn to design and employ this open source database technology into his or her Web site using practical, hands-on examples to follow. _E-Commerce Solutions with MySQL_ Available Barnes and Noble (http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=0761524452&bfmtype=book) Publisher Prima Communications, Inc. Authors N/A Pub Date January 2000 ISBN 0761524452 Pages 500 Price $39.99 No description available. _MySQL and PHP from Scratch_ Available Barnes and Noble (http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=0789724405&bfmtype=book) Publisher Que Authors N/A Pub Date September 2000 ISBN 0789724405 Pages 550 Price $34.99 This book puts together information on installing, setting up, and troubleshooting Apache, MySQL, PHP3, and IMP into one complete volume. You also learn how each piece is part of a whole by learning, step-by-step, how to create a web-based e-mail system. Learn to run the equivalent of Active Server Pages (ASP) using PHP3, set up an e-commerce site using a database and the Apache web server, and create a data entry system (such as sales, product quality tracking, customer preferences, etc) that no installation in the PC. _Professional MySQL Programming_ Available Barnes and Noble (http://shop.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=1861005164) Publisher Wrox Press, Inc. Authors N/A Pub Date Late 2001 ISBN 1861005164 Pages 1000 Price $49.99 No description available. _Professional Linux Programming_ Available Barnes and Noble (http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=1861003013&bfmtype=book) Publisher Wrox Press, Inc. Authors N/A Pub Date September 2000 ISBN 1861003013 Pages 1155 Price $47.99 In this follow-up to the best-selling _Beginning Linux Programming_, you will learn from the authors' real-world knowledge and experience of developing software for Linux; you'll be taken through the development of a sample 'DVD Store' application, with 'theme' chapters addressing different aspects of its implementation. Meanwhile, individual "take-a-break" chapters cover important topics that go beyond the bounds of the central theme. All focus on the practical aspects of programming, showing how crucial it is to choose the right tools for the job, use them as they should be used, and get things right first time. _PHP and MySQL Web Development_ Available Barnes and Noble (http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=0672317842&bfmtype=book) Publisher Sams Authors Luke Welling, Laura Thomson Pub Date March 2001 ISBN 0672317842 Pages 700 Price $49.99 _PHP and MySQL Web Development_ introduces you to the advantages of implementing both MySQL and PHP. These advantages are detailed through the provision of both statistics and several case studies. A practical web application is developed throughout the book, providing you with the tools necessary to implement a functional online database. Each function is developed separately, allowing you the choice to incorporate only those parts that you would like to implement. Programming concepts of the PHP language are highlighted, including functions which tie MySQL support into a PHP script and advanced topics regarding table manipulation. *Books recommended by the MySQL Developers* _SQL-99 Complete, Really_ Available Barnes and Noble (http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=0879305681&bfmtype=book) Publisher CMP Books Authors Peter Gulutzan, Trudy Pelzer Pub Date April 1999 ISBN 0879305681 Pages 1104 Price $55.96 This book contains complete descriptions of the new standards for syntax, data structures, and retrieval processes of SQL databases. As an example-based reference manual, it includes all of the CLI functions, information, schema tables, and status codes, as well as a working SQL database provided on the companion disk. _C, A reference manual_ Available Barnes and Noble (http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=0133262243&bfmtype=book) Publisher Prentice Hall Authors Samuel P. Harbison, Guy L. Steele Pub Date September 1994 ISBN 0133262243 Pages 480 Price $35.99 A new and improved revision of the bestselling C language reference. This manual introduces the notion of "Clean C", writing C code that can be compiled as a C++ program, C programming style that emphasizes correctness, portability, maintainability, and incorporates the ISO C Amendment 1 (1994) which specifies new facilities for writing portable, international programs in C. _C++ for Real Programmers_ Available Barnes and Noble (http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=0120499428&bfmtype=book) Publisher Academic Press, Incorporated Authors Jeff Alger, Jim Keogh Pub Date February 1998 ISBN 0120499428 Pages 388 Price $39.95 _C++ For Real Programmers_ bridges the gap between C++ as described in beginner and intermediate-level books and C++ as it is practiced by experts. Numerous valuable techniques are described, organized into three simple themes: indirection, class hierarchies, and memory management. It also provides in-depth coverage of template creation, exception handling, pointers and optimization techniques. The focus of the book is on ANSI C++ and, as such, is compiler independent. _C++ For Real Programmers_ is a revision of _Secrets of the C++ Masters_ and includes a new appendix comparing C++ with Java. The book comes with a 3.5" disk for Windows with source code. _Algorithms in C_ Available Barnes and Noble (http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=0201514257&bfmtype=book) Publisher Addison Wesley Longman, Inc. Authors Robert Sedgewick Pub Date April 1990 ISBN 0201514257 Pages 648 Price $45.75 _Algorithms in C_ describes a variety of algorithms in a number of areas of interest, including: sorting, searching, string-processing, and geometric, graph and mathematical algorithms. The book emphasizes fundamental techniques, providing readers with the tools to confidently implement, run, and debug useful algorithms. _Multithreaded Programming with Pthreads_ Available Barnes and Noble (http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=0136807291&bfmtype=book) Publisher Prentice Hall Authors Bil Lewis, Daniel J. Berg Pub Date October 1997 ISBN 0136807291 Pages 432 Price $34.95 Based on the best-selling _Threads Primer_, _Multithreaded Programming with Pthreads_ gives you a solid understanding of Posix threads: what they are, how they work, when to use them, and how to optimize them. It retains the clarity and humor of _Threads Primer_, but includes expanded comparisons to Win32 and OS/2 implementations. Code examples tested on all of the major UNIX platforms are featured along with detailed explanations of how and why they use threads. _Programming the PERL DBI: Database Programming with PERL_ Available Barnes and Noble (http://service.bfast.com/bfast/click?bfmid=2181&sourceid=34233559&bfpid=1565926994&bfmtype=book) Publisher O'Reilly & Associates, Incorporated Authors Alligator Descartes, Tim Bunce Pub Date February 2000 ISBN 1565926994 Pages 400 Price $27.96 _Programming the Perl DBI_ is coauthored by Alligator Descartes, one of the most active members of the DBI community, and by Tim Bunce, the inventor of DBI. For the uninitiated, the book explains the architecture of DBI and shows you how to write DBI-based programs. For the experienced DBI dabbler, this book explains DBI's nuances and the peculiarities of each individual DBD. The book includes: * An introduction to DBI and its design. * How to construct queries and bind parameters. * Working with database, driver, and statement handles. * Debugging techniques. * Coverage of each existing DBD. * A complete reference to DBI. General SQL Information and Tutorials ------------------------------------- The MySQL book portal is split into different sections to make it easy to locate books for various purposes. `http://www.mysql.com/portal/books/html/index.html' Tutorials can be found at: `http://www.mysql.com/portal/development/html/development-61-1.html' Useful MySQL-related Links -------------------------- The MySQL development portal is the ultimate source of MySQL related links. `http://www.mysql.com/portal/development/html/index.html' Apart from the following links, you can find and download a lot of MySQL programs, tools and APIs from the Contrib directory (http://www.mysql.com/Downloads/Contrib/). MySQL Tutorials and Manuals --------------------- MySQL Myths Debunked (http://michael.bacarella.com/research/mysqlmyths.html) MySQL used in the real world. `http://www.4t2.com/mysql' Information about the German MySQL mailing list. `http://www2.rent-a-database.de/mysql/' MySQL handbook in German. `http://www.bitmover.com:8888//home/bk/mysql' Web access to the MySQL BitKeeper repository. `http://www.analysisandsolutions.com/code/mybasic.htm' Beginners MySQL Tutorial on how to install and set up MySQL on a Windows machine. `http://www.devshed.com/Server_Side/MySQL/' A lot of MySQL tutorials. `http://mysql.hitstar.com/' MySQL manual in Chinese. `http://www.linuxplanet.com/linuxplanet/tutorials/1046/1/' Setting Up a MySQL-based Web site. `http://www.hotwired.com/webmonkey/backend/tutorials/tutorial1.html' MySQL-Perl tutorial. `http://www.iserver.com/support/contrib/perl5/modules.html' Installing new Perl modules that require locally installed modules. `http://www.hotwired.com/webmonkey/databases/tutorials/tutorial4.html' PHP/MySQL Tutorial. `http://www.useractive.com/' Hands on tutorial for MySQL. Porting MySQL/Using MySQL on Different Systems ---------------------------------------------- `http://www.entropy.ch/software/macosx/mysql/' Binary of MySQL for Mac OS X Client. Includes information of how to build and use MySQL on Mac OS X. `http://xclave.macnn.com/MySQL/' The Mac OS Xclave. Running MySQL on Mac OS X. `http://www.prnet.de/RegEx/mysql.html' MySQL for Mac OS X Server. `http://www.latencyzero.com/macosx/mysql.html' Building MySQL for Mac OS X. `http://www.essencesw.com/Software/mysqllib.html' New Client libraries for the Mac OS Classic (Macintosh). `http://www.lilback.com/macsql/' Client libraries for Mac OS Classic (Macintosh). `http://sixk.maniasys.com/index_en.html' MySQL for Amiga Perl-related Links ------------------ `http://dbimysql.photoflux.com/' Perl DBI with MySQL FAQ. MySQL Discussion Forums ----------------------- `http://www.weberdev.com/' Examples using MySQL; (check Top 20) `http://futurerealm.com/forum/futureforum.htm' FutureForum Web Discussion Software. Commercial Applications that Support MySQL ------------------------------------------ `http://www.supportwizard.com/' SupportWizard; Interactive helpdesk on the Web. This product includes a licensed copy of MySQL. `http://www.sonork.com/' Sonork, Instant Messenger that is not only Internet oriented. It's focused on private networks and on small to medium companies. Client is free, server is free for up to 5 seats. `http://www.stweb.org/' StWeb - Stratos Web and Application server - An easy-to-use, cross platform, Internet/Intranet development and deployment system for development of web-enabled applications. The standard version of StWeb has a native interface to MySQL database. `http://www.rightnowtech.com/' Right Now Web; Web automation for customer service. `http://www.icaap.org/Bazaar/' Bazaar; Interactive Discussion Forums with Web interface. `http://www.phonesweep.com/' PhoneSweepT is the world's first commercial Telephone Scanner. Many break-ins in recent years have come not through the Internet, but through unauthorized dial-up modems. PhoneSweep lets you find these modems by repeatedly placing phone calls to every phone number that your organization controls. PhoneSweep has a built-in expert system that can recognize more than 250 different kinds of remote-access programs, including Carbon Copy(TM), pcANYWHERE(TM), and Windows NT RAS. All information is stored in the SQL database. It then generates a comprehensive report detailing which services were discovered on which dial-up numbers in your organization. SQL Clients and Report Writers ------------------------------ urSQL (http://www.urbanresearch.com/software/utils/urbsql/index.html) SQL Editor and Query Utility. Custom syntax highlighting, editable results grid, exportable result-sets, basic MySQL admin functions, Etc.. For Windows. MySQL Data Manager (http://www.edatanew.com/) MySQL Data Manager * is platform independent web client (written in perl) for MySQL server over TCP/IP. `http://ksql.sourceforge.net/' KDE MySQL client. `http://www.ecker-software.de' A Windows GUI client by David Ecker. `http://www.icaap.org/software/kiosk/' Kiosk; a MySQL client for database management. Written in Perl. Will be a part of Bazaar. `http://www.casestudio.com/' Db design tool that supports MySQL 3.23. `http://home.skif.net/~voland/zeos/eng/index.html' Zeos - A client that supports MySQL, Interbase and PostgreSQL. `http://www.geocities.com/SiliconValley/Ridge/4280/GenericReportWriter/grwhome.html' A free report writer in Java `http://www.javaframework.de' MySQLExport - Export of MySQL create statements and data in a lot of different formats (SQL, HTML, CVS, text, ZIP, GZIP...). `http://dlabs.4t2.com' M2D, a MySQL Administration client for Windows. M2D supports administration of MySQL databases, creation of new databases and tables, editing, and more. `http://dlabs.4t2.com' Dexter, a small server written in Perl which can be used as a proxy server for MySQL or as a database extender. `http://www.scibit.com/Products/Software/Utils/Mascon.asp' Mascon is a powerful Win32 GUI for administering MySQL databases. `http://www.rtlabs.com/' MacSQL Monitor. GUI for MySQL, ODBC, and JDBC databases for the Mac OS. Distributions that Include MySQL -------------------------------- `http://www.suse.com/' SuSE Linux (6.1 and above) `http://www.redhat.com/' RedHat Linux (7.0 and above) `http://distro.conectiva.com.br' Conectiva Linux (4.0 and above) Web Development Tools that Support MySQL ---------------------------------------- `http://www.php.net/' PHP: A server-side HTML-embedded scripting language. `http://www.midgard-project.org' The Midgard Application Server; a powerful Web development environment based on MySQL and PHP. `http://www.dbServ.de/' dbServ is an extension to a web server to integrate database output into your HTML code. You may use any HTML function in your output. Only the client will stop you. It works as standalone server or as Java servlet. `http://www.chilisoft.com/' Platform independent ASP from Chili!Soft `http://www.voicenet.com/~zellert/tjFM' A JDBC driver for MySQL. `http://www.wernhart.priv.at/php/' MySQL + PHP demos. `http://www.dbwww.com/' ForwardSQL: HTML interface to manipulate MySQL databases. `http://www.daa.com.au/~james/www-sql/' WWW-SQL: Display database information. `http://www.heitml.com/' HeiTML: A server-side extension of HTML and a 4GL language at the same time. `http://hawkeye.net/' Hawkeye Internet Server Suite. `http://www.webgroove.com/' WebGroove Script: HTML compiler and server-side scripting language. `http://www.ihtml.com/' A server-side Web site scripting language. `ftp://ftp.igc.apc.org/pub/myodbc/README' How to use MySQL with ColdFusion on Solaris. `http://calistra.com/MySQL/' Calistra's ODBC MySQL Administrator. `http://phpclub.net/' PHPclub - Tips and tricks for PHP. `http://www.widgetchuck.com' The Widgetchuck; Web Site Tools and Gadgets `http://www.adcycle.com/' AdCycle - advertising management software. `http://sourceforge.net/projects/pwpage/' pwPage - provides an extremely fast and simple approach to the creation of database forms. That is, if a database table exists and an HTML page has been constructed using a few simple guidelines, pwPage can be immediately used for table data selections, insertions, updates, deletions and selectable table content reviewing. `http://www.omnis-software.com/products/studio/studio.html' OMNIS Studio is a rapid application development (RAD) tool. Database Design Tools with MySQL Support ---------------------------------------- `http://www.mysql.com/documentation/dezign/' "DeZign for databases" is a database development tool that uses an entity relationship diagram (ERD). Web Servers with MySQL Tools ---------------------------- `ftp://ftp.kcilink.com/pub/' mod_auth_mysql, An Apache authentication module. `http://www.roxen.com/' The Roxen Challenger Web server. Extensions for Other Programs ----------------------------- `http://www.seawood.org/msql_bind/' MySQL support for BIND (The Internet Domain Name Server). `http://www.inet-interactive.com/sendmail/' MySQL support for Sendmail and Procmail. Using MySQL with Other Programs ------------------------------- `http://www.iserver.com/support/addonhelp/database/mysql/msaccess.html' Using MySQL with Access. `http://www.iserver.com/support/contrib/perl5/modules.html' Installing new Perl modules that require locally installed modules. ODBC-related Links ------------------ `http://www.iodbc.org/' Popular iODBC Driver Manager (libiodbc) now available as Open Source. `http://users.ids.net/~bjepson/freeODBC/' The FreeODBC Pages. `http://genix.net/unixODBC/' The unixODBC Project goals are to develop and promote unixODBC to be the definitive standard for ODBC on the Linux platform. This is to include GUI support for KDE. `http://www.sw-soft.com/products/BtrieveODBC/' A MySQL-based ODBC driver for Btrieve. *API*-related Links ------------------- `http://www.jppp.com/' Partially implemented TDataset-compatible components for MySQL. `http://www.riverstyx.net/qpopmysql/' qpopmysql - A patch to allow POP3 authentication from a MySQL database. There's also a link to Paul Khavkine's patch for Procmail to allow any MTA to deliver to users in a MySQL database. `http://www.essencesw.com/Software/mysqllib.html' New Client libraries for the Mac OS Classic (Macintosh). `http://www.lilback.com/macsql/' Client libraries for the Macintosh. `http://www.essencesw.com/Plugins/mysqlplug.html' Plugin for REALbasic (for Macintosh) `http://www.iis.ee.ethz.ch/~neeri/macintosh/gusi-qa.html' A library that emulates BSD sockets and pthreads on Macintosh. This can be used if you want to compile the MySQL client library on Mac. It could probably even be sued to port MySQL to Macintosh, but we don't know of anyone that has tried that. `http://www.dedecker.net/jessie/scmdb/' SCMDB - an add-on for SCM that ports the MySQL C library to scheme (SCM). With this library scheme developers can make connections to a MySQL database and use embedded SQL in their programs. Other MySQL-related Links ------------------------- SAT (http://www.satisoft.com/) The Small Application Toolkit (SAT) is a collection of utilities intended to simplify the development of small, multi-user, GUI based applications in a (Microsoft -or- X) Windows Client / Unix Server environment. `http://www.wix.com/mysql-hosting/' Registry of Web providers who support MySQL. `http://www.softagency.co.jp/mysql/index.en.html' Links about using MySQL in Japan/Asia. `http://abattoir.cc.ndsu.nodak.edu/~nem/mysql/udf/' MySQL UDF Registry. `http://www.open.com.au/products.html' Commercial Web defect tracking system. `http://www.stonekeep.com/pts/' PTS: Project Tracking System. `http://tomato.nvgc.vt.edu/~hroberts/mot' Job and software tracking system. `http://www.cynergi.net/exportsql/' ExportSQL: A script to export data from Access95+. `http://SAL.KachinaTech.COM/H/1/MYSQL.html' SAL (Scientific Applications on Linux) MySQL entry. `http://www.infotech-nj.com/itech/index.shtml' A consulting company which mentions MySQL in the right company. `http://www.pmpcs.com/' PMP Computer Solutions. Database developers using MySQL and `mSQL'. `http://www.dedserius.com/y2kmatrix/' Y2K tester. SQL and Database Interfaces --------------------------- `http://java.sun.com/products/jdbc/' The JDBC database access API. `http://www.gagme.com/mysql' Patch for `mSQL' Tcl. `http://www.amsoft.ru/easysql/' EasySQL: An ODBC-like driver manager. `http://www.lightlink.com/hessling/rexxsql.html' A REXX interface to SQL databases. `http://www.binevolve.com/~tdarugar/tcl-sql/' Tcl interface for MySQL. `http://www.contrib.andrew.cmu.edu/~shadow/sql.html' SQL Reference Page with a lot of interesting links. Examples of MySQL Use --------------------- `http://www.little6.com/about/linux/' Little6 Inc., An online contract and job finding site that is powered by MySQL, PHP3, and Linux. `http://www.worldrecords.com' World Records - A search engine for information about music that uses MySQL and PHP. `http://www.webtechniques.com/archives/1998/01/note/' A Contact Database using MySQL and PHP. `http://modems.rosenet.net/mysql/' Web based interface and Community Calendar with PHP. `http://www.odbsoft.com/cook/sources.htm' Perl package to generate html from a SQL table structure and for generating SQL statements from an html form. `http://www.gusnet.cx/proj/telsql/' Basic telephone database using `DBI'/`DBD'. `http://tecfa.unige.ch/guides/java/staf2x/ex/jdbc/coffee-break' JDBC examples by Daniel K. Schneider. `http://www.ooc.com/' Object Oriented Concepts Inc; CORBA applications with examples in source. `http://www.stopbit.com/' Stopbit - A technology news site using MySQL and PHP. `http://www.penguinservices.com/scripts' Online shopping cart system. `http://www.city-gallery.com/album/' Old Photo Album - The album is a collaborative popular history of photography project that generates all pages from data stored in a MySQL database. Pages are dynamically generated through a php3 interface to the database content. Users contribute images and descriptions. Contributed images are stored on the web server to avoid storing them in the database as BLOBs. All other information is stored on the shared MySQL server. General Database Links ---------------------- `http://black.hole-in-the.net/guy/webdb/' Homepage of the webdb-l (Web Databases) mailing list. `http://www.symbolstone.org/technology/perl/DBI/index.html' Perl `DBI'/`DBD' modules homepage. `http://www.student.uni-koeln.de/cygwin/' Cygwin tools. Unix on top of Windows. `http://www.tek-tips.com/' Tek-Tips Forums are 800+ independent peer-to-peer non-commercial support forums for Computer Professionals. Features include automatic e-mail notification of responses, a links library, and member confidentiality guaranteed. `http://www.public.asu.edu/~peterjn/btree/' B-Trees: Balanced Tree Data Structures. `http://www.fit.qut.edu.au/~maire/baobab/lecture/sld001.htm' A lecture about B-Trees. There are also many Web pages that use MySQL. *Note Users::. Send any additions to this list to . We now require that you show a MySQL logo somewhere if you wish your site to be added. It is okay to have it on a "used tools" page or something similar. MySQL Mailing Lists ------------------- This section introduces you to the MySQL mailing lists, and gives some guidelines as to how to use them. The MySQL Mailing Lists ....................... To subscribe to the main MySQL mailing list, send a message to the electronic mail address . To unsubscribe from the main MySQL mailing list, send a message to the electronic mail address . Only the address to which you send your messages is significant. The subject line and the body of the message are ignored. If your reply address is not valid, you can specify your address explicitly. Adding a hyphen to the subscribe or unsubscribe command word, followed by your address with the `@' character in your address replaced by a `='. For example, to subscribe `your_name@host.domain', send a message to `mysql-subscribe-your_name=host.domain@lists.mysql.com'. Mail to or is handled automatically by the ezmlm mailing list processor. Information about ezmlm is available at The ezmlm Website (http://www.ezmlm.org). To post a message to the list itself, send your message to `mysql@lists.mysql.com'. However, please _do not_ send mail about subscribing or unsubscribing to , because any mail sent to that address is distributed automatically to thousands of other users. Your local site may have many subscribers to . If so, it may have a local mailing list, so that messages sent from `lists.mysql.com' to your site are propagated to the local list. In such cases, please contact your system administrator to be added to or dropped from the local MySQL list. If you wish to have traffic for a mailing list go to a separate mailbox in your mail program, set up a filter based on the message headers. You can use either the `List-ID:' or `Delivered-To:' headers to identify list messages. The following MySQL mailing lists exist: ` announce' This is for announcement of new versions of MySQL and related programs. This is a low volume list all MySQL users should subscribe to. ` mysql' The main list for general MySQL discussion. Please note that some topics are better discussed on the more-specialized lists. If you post to the wrong list, you may not get an answer! ` mysql-digest' The `mysql' list in digest form. That means you get all individual messages, sent as one large mail message once a day. ` bugs' On this list you should only post a full, repeatable bug report using the `mysqlbug' script (if you are running on Windows, you should include a description of the operating system and the MySQL version). Preferably, you should test the problem using the latest stable or development version of MySQL before posting! Anyone should be able to repeat the bug by just using `mysql test < script' on the included test case. All bugs posted on this list will be corrected or documented in the next MySQL release! If there are only small code changes involved, we will also post a patch that fixes the problem. ` bugs-digest' The `bugs' list in digest form. ` internals' A list for people who work on the MySQL code. On this list one can also discuss MySQL development and post patches. ` internals-digest' A digest version of the `internals' list. ` java' Discussion about MySQL and Java. Mostly about the JDBC drivers. ` java-digest' A digest version of the `java' list. ` win32' All things concerning MySQL on Microsoft operating systems such as Win95, Win98, NT, and Win2000. ` win32-digest' A digest version of the `win32' list. ` myodbc' All things about connecting to MySQL with ODBC. ` myodbc-digest' A digest version of the `myodbc' list. ` plusplus' All things concerning programming with the C++ API to MySQL. ` plusplus-digest' A digest version of the `plusplus' list. ` msql-mysql-modules' A list about the Perl support in MySQL. msql-mysql-modules ` msql-mysql-modules-digest' A digest version of the `msql-mysql-modules' list. You subscribe or unsubscribe to all lists in the same way as described above. In your subscribe or unsubscribe message, just put the appropriate mailing list name rather than `mysql'. For example, to subscribe to or unsubscribe from the `myodbc' list, send a message to or . If you can't get an answer for your questions from the mailing list, one option is to pay for support from MySQL AB, which will put you in direct contact with MySQL developers. *Note Support::. The following table shows some MySQL mailing in other languages than English. Note that these are not operated by MySQL AB, so we can't guarantee the quality on these. ` A French mailing list' ` A Korean mailing list' Email `subscribe mysql your@e-mail.address' to this list. ` A German mailing list' Email `subscribe mysql-de your@e-mail.address' to this list. You can find information about this mailing list at `http://www.4t2.com/mysql'. ` A Portugese mailing list' Email `subscribe mysql-br your@e-mail.address' to this list. ` A Spanish mailing list' Email `subscribe mysql your@e-mail.address' to this list. Asking Questions or Reporting Bugs .................................. Before posting a bug report or question, please do the following: * Start by searching the MySQL online manual at: `http://www.mysql.com/documentation/manual.php' We try to keep the manual up to date by updating it frequently with solutions to newly found problems! * Search the MySQL mailing list archives: `http://www.mysql.com/documentation/' * You can also use `http://www.mysql.com/search.html' to search all the Web pages (including the manual) that are located at `http://www.mysql.com/'. If you can't find an answer in the manual or the archives, check with your local MySQL expert. If you still can't find an answer to your question, go ahead and read the next section about how to send mail to . How to Report Bugs or Problems .............................. Writing a good bug report takes patience, but doing it right the first time saves time for us and for you. A good bug report containing a full test case for the bug will make it very likely that we will fix it in the next release. This section will help you write your report correctly so that you don't waste your time doing things that may not help us much or at all. We encourage everyone to use the `mysqlbug' script to generate a bug report (or a report about any problem), if possible. `mysqlbug' can be found in the `scripts' directory in the source distribution, or, for a binary distribution, in the `bin' directory under your MySQL installation directory. If you are unable to use `mysqlbug', you should still include all the necessary information listed in this section. The `mysqlbug' script helps you generate a report by determining much of the following information automatically, but if something important is missing, please include it with your message! Please read this section carefully and make sure that all the information described here is included in your report. The normal place to report bugs and problems is . If you can make a test case that clearly demonstrates the bug, you should post it to the list. Note that on this list you should only post a full, repeatable bug report using the `mysqlbug' script. If you are running on Windows, you should include a description of the operating system and the MySQL version. Preferably, you should test the problem using the latest stable or development version of MySQL before posting! Anyone should be able to repeat the bug by just using "`mysql test < script'" on the included test case or run the shell or perl script that is included in the bug report. All bugs posted on the `bugs' list will be corrected or documented in the next MySQL release! If there are only small code changes involved to correct this problem, we will also post a patch that fixes the problem. Remember that it is possible to respond to a message containing too much information, but not to one containing too little. Often people omit facts because they think they know the cause of a problem and assume that some details don't matter. A good principle is: if you are in doubt about stating something, state it! It is a thousand times faster and less troublesome to write a couple of lines more in your report than to be forced to ask again and wait for the answer because you didn't include enough information the first time. The most common errors are that people don't indicate the version number of the MySQL distribution they are using, or don't indicate what platform they have MySQL installed on (including the platform version number). This is highly relevant information, and in 99 cases out of 100 the bug report is useless without it! Very often we get questions like, "Why doesn't this work for me?" then we find that the feature requested wasn't implemented in that MySQL version, or that a bug described in a report has been fixed already in newer MySQL versions. Sometimes the error is platform dependent; in such cases, it is next to impossible to fix anything without knowing the operating system and the version number of the platform. Remember also to provide information about your compiler, if it is related to the problem. Often people find bugs in compilers and think the problem is MySQL-related. Most compilers are under development all the time and become better version by version. To determine whether or not your problem depends on your compiler, we need to know what compiler is used. Note that every compiling problem should be regarded as a bug report and reported accordingly. It is most helpful when a good description of the problem is included in the bug report. That is, a good example of all the things you did that led to the problem and the problem itself exactly described. The best reports are those that include a full example showing how to reproduce the bug or problem. *Note Reproduceable test case::. If a program produces an error message, it is very important to include the message in your report! If we try to search for something from the archives using programs, it is better that the error message reported exactly matches the one that the program produces. (Even the case should be observed!) You should never try to remember what the error message was; instead, copy and paste the entire message into your report! If you have a problem with MyODBC, you should try to generate a MyODBC trace file. *Note MyODBC bug report::. Please remember that many of the people who will read your report will do so using an 80-column display. When generating reports or examples using the `mysql' command line tool, you should therefore use the `--vertical' option (or the `\G' statement terminator) for output that would exceed the available width for such a display (for example, with the `EXPLAIN SELECT' statement; see the example below). Please include the following information in your report: * The version number of the MySQL distribution you are using (for example, MySQL Version 3.22.22). You can find out which version you are running by executing `mysqladmin version'. `mysqladmin' can be found in the `bin' directory under your MySQL installation directory. * The manufacturer and model of the machine you are working on. * The operating system name and version. For most operating systems, you can get this information by executing the Unix command `uname -a'. * Sometimes the amount of memory (real and virtual) is relevant. If in doubt, include these values. * If you are using a source distribution of MySQL, the name and version number of the compiler used is needed. If you have a binary distribution, the distribution name is needed. * If the problem occurs during compilation, include the exact error message(s) and also a few lines of context around the offending code in the file where the error occurred. * If `mysqld' died, you should also report the query that crashed `mysqld'. You can usually find this out by running `mysqld' with logging enabled. *Note Using log files::. * If any database table is related to the problem, include the output from `mysqldump --no-data db_name tbl_name1 tbl_name2 ...'. This is very easy to do and is a powerful way to get information about any table in a database that will help us create a situation matching the one you have. * For speed-related bugs or problems with `SELECT' statements, you should always include the output of `EXPLAIN SELECT ...', and at least the number of rows that the `SELECT' statement produces. The more information you give about your situation, the more likely it is that someone can help you! For example, the following is an example of a very good bug report (it should of course be posted with the `mysqlbug' script): Example run using the `mysql' command line tool (note the use of the `\G' statement terminator for statements whose output width would otherwise exceed that of an 80-column display device): mysql> SHOW VARIABLES; mysql> SHOW COLUMNS FROM ...\G mysql> EXPLAIN SELECT ...\G mysql> FLUSH STATUS; mysql> SELECT ...; mysql> SHOW STATUS; * If a bug or problem occurs while running *mysqld*, try to provide an input script that will reproduce the anomaly. This script should include any necessary source files. The more closely the script can reproduce your situation, the better. If you can make a reproduceable test case, you should post this to for a high priority treatment! If you can't provide a script, you should at least include the output from `mysqladmin variables extended-status processlist' in your mail to provide some information of how your system is performing! * If you can't produce a test case in a few rows, or if the test table is too big to be mailed to the mailing list (more than 10 rows), you should dump your tables using `mysqldump' and create a `README' file that describes your problem. Create a compressed archive of your files using `tar' and `gzip' or `zip', and use `ftp' to transfer the archive to `ftp://support.mysql.com/pub/mysql/secret/'. Then send a short description of the problem to . * If you think that MySQL produces a strange result from a query, include not only the result, but also your opinion of what the result should be, and an account describing the basis for your opinion. * When giving an example of the problem, it's better to use the variable names, table names, etc., that exist in your actual situation than to come up with new names. The problem could be related to the name of a variable or table! These cases are rare, perhaps, but it is better to be safe than sorry. After all, it should be easier for you to provide an example that uses your actual situation, and it is by all means better for us. In case you have data you don't want to show to others, you can use `ftp' to transfer it to `ftp://support.mysql.com/pub/mysql/secret/'. If the data are really top secret and you don't want to show them even to us, then go ahead and provide an example using other names, but please regard this as the last choice. * Include all the options given to the relevant programs, if possible. For example, indicate the options that you use when you start the `mysqld' daemon and that you use to run any MySQL client programs. The options to programs like `mysqld' and `mysql', and to the `configure' script, are often keys to answers and are very relevant! It is never a bad idea to include them anyway! If you use any modules, such as Perl or PHP, please include the version number(s) of those as well. * If your question is related to the privilege system, please include the output of `mysqlaccess', the output of `mysqladmin reload', and all the error messages you get when trying to connect! When you test your privileges, you should first run `mysqlaccess'. After this, execute `mysqladmin reload version' and try to connect with the program that gives you trouble. `mysqlaccess' can be found in the `bin' directory under your MySQL installation directory. * If you have a patch for a bug, that is good, but don't assume the patch is all we need, or that we will use it, if you don't provide some necessary information, such as test cases showing the bug that your patch fixes. We might find problems with your patch or we might not understand it at all; if so, we can't use it. If we can't verify exactly what the patch is meant for, we won't use it. Test cases will help us here. Show that the patch will handle all the situations that may occur. If we find a borderline case (even a rare one) where the patch won't work, it may be useless. * Guesses about what the bug is, why it occurs, or what it depends on, are usually wrong. Even the MySQL team can't guess such things without first using a debugger to determine the real cause of a bug. * Indicate in your mail message that you have checked the reference manual and mail archive so others know that you have tried to solve the problem yourself. * If you get a `parse error', please check your syntax closely! If you can't find something wrong with it, it's extremely likely that your current version of MySQL doesn't support the query you are using. If you are using the current version and the manual at `http://www.mysql.com/documentation/manual.php' doesn't cover the syntax you are using, MySQL doesn't support your query. In this case, your only options are to implement the syntax yourself or e-mail and ask for an offer to implement it! If the manual covers the syntax you are using, but you have an older version of MySQL, you should check the MySQL change history to see when the syntax was implemented. In this case, you have the option of upgrading to a newer version of MySQL. *Note News::. * If you have a problem such that your data appears corrupt or you get errors when you access some particular table, you should first check and then try repairing your tables with `myisamchk' or `CHECK TABLE' and `REPAIR TABLE'. *Note MySQL Database Administration::. * If you often get corrupted tables you should try to find out when and why this happens! In this case, the `mysql-data-directory/'hostname'.err' file may contain some information about what happened. *Note Error log::. Please include any relevant information from this file in your bug report! Normally `mysqld' should *NEVER* crash a table if nothing killed it in the middle of an update! If you can find the cause of `mysqld' dying, it's much easier for us to provide you with a fix for the problem! *Note What is crashing::. * If possible, download and install the most recent version of MySQL and check whether or not it solves your problem. All versions of MySQL are thoroughly tested and should work without problems! We believe in making everything as backward compatible as possible, and you should be able to switch MySQL versions in minutes! *Note Which version::. If you are a support customer, please cross-post the bug report to for higher priority treatment, as well as to the appropriate mailing list to see if someone else has experienced (and perhaps solved) the problem. For information on reporting bugs in *MyODBC*, see *Note ODBC Problems::. For solutions to some common problems, see *Note Problems::. When answers are sent to you individually and not to the mailing list, it is considered good etiquette to summarize the answers and send the summary to the mailing list so that others may have the benefit of responses you received that helped you solve your problem! Guidelines for Answering Question on the Mailing List ..................................................... If you consider your answer to have broad interest, you may want to post it to the mailing list instead of replying directly to the individual who asked. Try to make your answer general enough that people other than the original poster may benefit from it. When you post to the list, please make sure that your answer is not a duplication of a previous answer. Try to summarize the essential part of the question in your reply; don't feel obliged to quote the entire original message. Please don't post mail messages from your browser with HTML mode turned on! Many users don't read mail with a browser! MySQL Support and Licensing =========================== This section describes MySQL support and licensing arrangements: * Support costs and benefits (*note Support::) * The copyrights under which MySQL is distributed (*note Copyright::) * When and why you should license MySQL (*note Licensing policy::) * Sample situations illustrating when a license is required (*note Licensing examples::) Support offered by MySQL AB --------------------------- MySQL AB offers several commercial support options. A description of what each level of support includes is given at `https://order.mysql.com'. If you have restricted access to the Internet, contact our sales staff at . Technical support from MySQL AB means personal answers to your personal problems direct from the software engineers who code the MySQL database engine. It is often very helpful to receive quick, personally prepared answers tailored to your exact needs. This is what MySQL AB paid technical support offers. Our pricing model ensures that basic support is affordable even for those on limited budgets. We try to take a broad and inclusive view of technical support. Almost any problem involving MySQL is important to us if it's important to you. Typically customers seek help on how to get different commands and utilities to work, remove performance bottlenecks, restore crashed systems, understand operating system or networking impacts on MySQL, establish best practices for backup and recovery, utilize APIs, etc. Copyrights Used by MySQL ------------------------ There are several different copyrights on the MySQL distribution: 1. The MySQL-specific source needed to build the `mysqlclient' library is licensed under the `LGPL' and the programs in the `client' directory are under the `GPL'. Each file states at the beginning which license it is under. 2. The client library, and the GNU `getopt' library, are covered by the "GNU LIBRARY GENERAL PUBLIC LICENSE." *Note LGPL license::. 3. Some parts of the source (the `regexp' library) are covered by a Berkeley-style copyright. 4. All the source in the server, and the GNU `readline' library, are covered by the "GNU GENERAL PUBLIC LICENSE." *Note GPL license::. This is also available as the file `COPYING' in the distributions. The SQL client library should be free enough that it is possible to add MySQL support into commercial products without a license. For this reason, we chose the LGPL license for the client code. This means that you can use MySQL for free with any program that uses any of the free software licenses. MySQL is also free for any end user for personal or company usage. However, if you use MySQL for something important to you, you may want to help secure its development by purchasing licenses or a support contract. *Note Support::. Copyright Changes ................. Version 3.22 of MySQL is still using a more strict license. See the documentation for that version for more information. MySQL Licensing Policy ---------------------- The formal terms of the GPL license can be found at *Note GPL license::. For pricing and ordering information, see `https://order.mysql.com/'. Basically, our licensing policy and interpretation of the GPL is as follows: For normal internal use, MySQL costs nothing. You do not have to pay us if you do not want to. A license is required if: - You link a program, that is not free software, with code from the MySQL server or clients that has the GPL copyright. This happens for example when you use MySQL as an embedded server in your applications or when you add not free extensions to the MySQL server. In this case your application/code would also become GPL through the GPL license that acts as a virus. By licensing MySQL server from MySQL AB under a commercial license you will avoid this problem. See `http://www.gnu.org/copyleft/gpl-faq.html'. - You have a commercial application that ONLY works with MySQL and ships the application with the MySQL server. This is because we view this as linking even if it is done over the network. - You have a distribution of MySQL and you don't provide the source code for your copy of the MySQL server, as defined in the GPL license. A license is *not* required if: - You include the MySQL client code in a commercial program. The client part of MySQL is licensed under the LGPL `GNU Library General Public License'. The `mysql' command-line client does include code from the `readline' library that is under the `GPL', however. If your use of MySQL does not require a license, but you like MySQL and want to encourage further development, you are certainly welcome to purchase a license or MySQL support anyway. *Note Support::. If you use MySQL in a commercial context such that you profit by its use, we ask that you further the development of MySQL by purchasing some level of support. We feel that if MySQL helps your business, it is reasonable to ask that you help MySQL. (Otherwise, if you ask us support questions, you are not only using for free something into which we've put a lot a work, you're asking us to provide free support, too.) Note that older versions of MySQL are still using a more strict license (http://www.mysql.com/support/arrangements/mypl.html). See the documentation for the specific version for more information. For circumstances under which a MySQL license is required, you need a license per machine that runs the `mysqld' server. However, a multiple-CPU machine counts as a single machine, and there is no restriction on the number of MySQL servers that run on one machine, or on the number of clients concurrently connected to a server running on that machine. If you have any questions as to whether or not a license is required for your particular use of MySQL, please read this again and then contact us. *Note Contact information::. If you require a MySQL license, the easiest way to pay for it is to use the license form on MySQL's secure server at `https://order.mysql.com/'. You can also get the latest pricing and ordering information by sending an e-mail to . Example Licensing Situations ---------------------------- This section describes some situations illustrating whether or not you must license the MySQL server. Generally these examples involve providing MySQL as an integral part of a product. Note that a single MySQL license covers any number of CPUs and `mysqld' servers on a machine! There is no artificial limit on the number of clients that connect to the server in any way. Selling Products that use MySQL ............................... To determine whether or not you need a MySQL license when selling your application, you should ask whether the proper functioning of your application is dependent on the use of MySQL and whether you include the MySQL server with your product. There are several cases to consider: * Does your application require MySQL to function properly? * If your product requires MySQL, you need a license for any machine that runs the `mysqld' server. For example, if you've designed your application around MySQL, then you've really made a commercial product that requires the engine, so you need a license. * If your application does not require MySQL, you do not need to obtain a license. For example, if using MySQL just adds some new optional features to your product (such as adding logging to a database if MySQL is used rather than logging to a text file), it should fall within normal use, and a license would not be required. * In other words, you need a license if you sell a product designed specifically for use with MySQL or that requires the MySQL server to function at all. This is true whether or not you provide MySQL for your client as part of your product distribution. * It also depends on what you're doing for the client. Do you plan to provide your client with detailed instructions on installing MySQL with your software? Then your product may be contingent on the use of MySQL; if so, you need to buy a license. If you are simply tying into a database that you expect already to have been installed by the time your software is purchased, then you probably don't need a license. ISP MySQL Services .................. Internet Service Providers (ISPs) often host MySQL servers for their customers. With the GPL license this does not require a license. On the other hand, we do encourage people to use ISPs that have MySQL support, as this will give them the confidence that if they have some problem with their MySQL installation, their ISP will be able to solve the problem for them (in some cases with the help from the MySQL development team). All ISPs that want to keep themselves up-to-date should subscribe to our `announce' mailing list so that they can be aware of critical issues that may be relevant for their MySQL installations. Note that if the ISP doesn't have a license for MySQL, it should give its customers at least read access to the source of the MySQL installation so that its customers can verify that it is patched correctly. Running a Web Server Using MySQL ................................ If you use MySQL in conjunction with a Web server, you do not have to pay for a license. This is true even if you run a commercial Web server that uses MySQL, because you are not selling an embedded MySQL version yourself. However, in this case we would like you to purchase MySQL support, because MySQL is helping your enterprise. How Standards-compatible Is MySQL? ================================== This section describes how MySQL relates to the ANSI SQL standards. MySQL has many extensions to the ANSI SQL standards, and here you will find out what they are, and how to use them. You will also find information about functionality missing from MySQL, and how to work around some differences. MySQL Extensions to ANSI SQL92 ------------------------------ MySQL includes some extensions that you probably will not find in other SQL databases. Be warned that if you use them, your code will not be portable to other SQL servers. In some cases, you can write code that includes MySQL extensions, but is still portable, by using comments of the form `/*! ... */'. In this case, MySQL will parse and execute the code within the comment as it would any other MySQL statement, but other SQL servers will ignore the extensions. For example: SELECT /*! STRAIGHT_JOIN */ col_name FROM table1,table2 WHERE ... If you add a version number after the `'!'', the syntax will only be executed if the MySQL version is equal to or newer than the used version number: CREATE /*!32302 TEMPORARY */ TABLE (a int); The above means that if you have Version 3.23.02 or newer, then MySQL will use the `TEMPORARY' keyword. MySQL extensions are listed below: * The field types `MEDIUMINT', `SET', `ENUM', and the different `BLOB' and `TEXT' types. * The field attributes `AUTO_INCREMENT', `BINARY', `NULL', `UNSIGNED', and `ZEROFILL'. * All string comparisons are case insensitive by default, with sort ordering determined by the current character set (ISO-8859-1 Latin1 by default). If you don't like this, you should declare your columns with the `BINARY' attribute or use the `BINARY' cast, which causes comparisons to be done according to the ASCII order used on the MySQL server host. * MySQL maps each database to a directory under the MySQL data directory, and tables within a database to filenames in the database directory. This has a few implications: - Database names and table names are case sensitive in MySQL on operating systems that have case-sensitive filenames (like most Unix systems). *Note Name case sensitivity::. - Database, table, index, column, or alias names may begin with a digit (but may not consist solely of digits). - You can use standard system commands to backup, rename, move, delete, and copy tables. For example, to rename a table, rename the `.MYD', `.MYI', and `.frm' files to which the table corresponds. * In SQL statements, you can access tables from different databases with the `db_name.tbl_name' syntax. Some SQL servers provide the same functionality but call this `User space'. MySQL doesn't support tablespaces as in: `create table ralph.my_table...IN my_tablespace'. * `LIKE' is allowed on numeric columns. * Use of `INTO OUTFILE' and `STRAIGHT_JOIN' in a `SELECT' statement. *Note `SELECT': SELECT. * The `SQL_SMALL_RESULT' option in a `SELECT' statement. * `EXPLAIN SELECT' to get a description on how tables are joined. * Use of index names, indexes on a prefix of a field, and use of `INDEX' or `KEY' in a `CREATE TABLE' statement. *Note `CREATE TABLE': CREATE TABLE. * Use of `TEMPORARY' or `IF NOT EXISTS' with `CREATE TABLE'. * Use of `COUNT(DISTINCT list)' where 'list' is more than one element. * Use of `CHANGE col_name', `DROP col_name', or `DROP INDEX', `IGNORE' or `RENAME' in an `ALTER TABLE' statement. *Note `ALTER TABLE': ALTER TABLE. * Use of `RENAME TABLE'. *Note `RENAME TABLE': RENAME TABLE. * Use of multiple `ADD', `ALTER', `DROP', or `CHANGE' clauses in an `ALTER TABLE' statement. * Use of `DROP TABLE' with the keywords `IF EXISTS'. * You can drop multiple tables with a single `DROP TABLE' statement. * The `LIMIT' clause of the `DELETE' statement. * The `DELAYED' clause of the `INSERT' and `REPLACE' statements. * The `LOW_PRIORITY' clause of the `INSERT', `REPLACE', `DELETE', and `UPDATE' statements. * Use of `LOAD DATA INFILE'. In many cases, this syntax is compatible with Oracle's `LOAD DATA INFILE'. *Note `LOAD DATA': LOAD DATA. * The `ANALYZE TABLE', `CHECK TABLE', `OPTIMIZE TABLE', and `REPAIR TABLE' statements. * The `SHOW' statement. *Note `SHOW': SHOW. * Strings may be enclosed by either `"' or `'', not just by `''. * Use of the escape `\' character. * The `SET OPTION' statement. *Note `SET OPTION': SET OPTION. * You don't need to name all selected columns in the `GROUP BY' part. This gives better performance for some very specific, but quite normal queries. *Note Group by functions::. * One can specify `ASC'