1.4.2. The Main Features of MySQL
The following list describes some of the important characteristics
of the MySQL Database Software. See also
Section 1.6, “MySQL Development Roadmap”, for more information about current and
Internals and Portability:
Written in C and C++.
Tested with a broad range of different compilers.
Works on many different platforms. See
Section 2.1.1, “Operating Systems Supported by MySQL”.
Uses GNU Automake, Autoconf, and Libtool for portability.
APIs for C, C++, Eiffel, Java, Perl, PHP, Python, Ruby, and
Tcl are available. See Chapter 25, APIs and Libraries.
Fully multi-threaded using kernel threads. It can easily use
multiple CPUs if they are available.
Provides transactional and non-transactional storage engines.
Uses very fast B-tree disk tables (
with index compression.
Relatively easy to add other storage engines. This is useful
if you want to add an SQL interface to an in-house database.
A very fast thread-based memory allocation system.
Very fast joins using an optimized one-sweep multi-join.
In-memory hash tables, which are used as temporary tables.
SQL functions are implemented using a highly optimized class
library and should be as fast as possible. Usually there is no
memory allocation at all after query initialization.
The MySQL code is tested with Purify (a commercial memory
leakage detector) as well as with Valgrind, a GPL tool
The server is available as a separate program for use in a
client/server networked environment. It is also available as a
library that can be embedded (linked) into standalone
applications. Such applications can be used in isolation or in
environments where no network is available.
Many data types: signed/unsigned integers 1, 2, 3, 4, and 8
ENUM, and OpenGIS
spatial types. See Chapter 11, Data Types.
Fixed-length and variable-length records.
Statements and Functions:
Full operator and function support in the
of queries. For example:
SELECT CONCAT(first_name, ' ', last_name)
WHERE income/dependents > 10000 AND age > 30;
Full support for SQL
GROUP BY and
ORDER BY clauses. Support for group
LEFT OUTER JOIN and
RIGHT OUTER JOIN with both standard SQL and
Support for aliases on tables and columns as required by
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.
SHOW command can be used
to retrieve information about databases, database engines,
tables, and indexes.
EXPLAIN command can be used to
determine how the optimizer resolves a query.
Function names do not clash with table or column names. For
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. See
Section 9.5, “Treatment of Reserved Words in MySQL”.
You can mix tables from different databases in the same query
(as of MySQL 3.22).
Scalability and Limits:
Handles large databases. We use MySQL Server with databases
that contain 50 million records. We also know of users who use
MySQL Server with 60,000 tables and about 5,000,000,000 rows.
Up to 64 indexes per table are allowed (32 before MySQL
4.1.2). Each index may consist of 1 to 16 columns or parts of
columns. The maximum index width is 1000 bytes (500 before
MySQL 4.1.2). An index may use a prefix of a column for
Clients can connect to the MySQL server using TCP/IP sockets
on any platform. On Windows systems in the NT family (NT,
2000, XP, or 2003), clients can connect using named pipes. On
Unix systems, clients can connect using Unix domain socket
In MySQL versions 4.1 and higher, Windows servers also support
shared-memory connections if started with the
--shared-memory option. Clients can connect
through shared memory by using the
The Connector/ODBC (MyODBC) interface provides MySQL support
for client programs that use ODBC (Open Database Connectivity)
connections. For example, you can use MS Access to connect to
your MySQL server. Clients can be run on Windows or Unix.
MyODBC source is available. All ODBC 2.5 functions are
supported, as are many others. See
Chapter 26, Connectors.
The Connector/J interface provides MySQL support for Java
client programs that use JDBC connections. Clients can be run
on Windows or Unix. Connector/J source is available. See
Chapter 26, Connectors.
MySQL Connector/NET enables developers to easily create .NET
applications that require secure, high-performance data
connectivity with MySQL. It implements the required ADO.NET
interfaces and integrates into ADO.NET aware tools. Developers
can build applications using their choice of .NET languages.
MySQL Connector/NET is a fully managed ADO.NET driver written
in 100% pure C#. See Chapter 26, Connectors.
The server can provide error messages to clients in many
languages. See Section 5.10.2, “Setting the Error Message Language”.
Full support for several different character sets, including
ujis, and more.
For example, the Scandinavian characters
ö’ are allowed in table and
column names. Unicode support is available as of MySQL 4.1.
All data is saved in the chosen character set. All comparisons
for normal string columns are case-insensitive.
Sorting is done according to the chosen character set (using
Swedish collation by default). It is possible to change this
when the MySQL server is started. To see an example of very
advanced sorting, look at the Czech sorting code. MySQL Server
supports many different character sets that can be specified
at compile time and runtime.
Clients and Tools:
MySQL Server has built-in support for SQL statements to check,
optimize, and repair tables. These statements are available
from the command line through the
mysqlcheck client. MySQL also includes
myisamchk, a very fast command-line utility
for performing these operations on
tables. See Chapter 5, Database Administration.
All MySQL programs can be invoked with the
-? options to
obtain online assistance.