The world's most popular open source database
This section describes some of the important characteristics of the MySQL Database Software. See also Section 1.4, “MySQL Development Roadmap”, for more information about current and upcoming features. In most respects, it applies to all versions of MySQL. For information about features as they are introduced into MySQL on a series-specific basis, see the “In a Nutshell” section of the appropriate Manual:
MySQL 4.0 and 4.1: MySQL 4.0 in a Nutshell, and MySQL 4.1 in a Nutshell.
MySQL 5.0: MySQL 5.0 in a Nutshell.
MySQL 5.1: MySQL 5.1 in a Nutshell.
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 Community Server”.
Uses GNU Automake, Autoconf, and Libtool for portability.
The MySQL Server design is multi-layered with independent modules.
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 (MyISAM)
with index compression.
Relatively easy to add other storage engines. This is useful if you want to provide an SQL interface for 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 (http://developer.kde.org/~sewardj/).
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.
Data Types:
Statements and Functions:
Full operator and function support in the
SELECT list and
WHERE clause of queries. For example:
mysql>SELECT CONCAT(first_name, ' ', last_name)->FROM citizen->WHERE income/dependents > 10000 AND age > 30;
Full support for SQL GROUP BY and
ORDER BY clauses. Support for group
functions (COUNT(),
COUNT(DISTINCT ...),
AVG(),
STD(),
SUM(),
MAX(),
MIN(), and
GROUP_CONCAT()).
Support for LEFT OUTER JOIN and
RIGHT OUTER JOIN with both standard SQL and
ODBC syntax.
Support for aliases on tables and columns as required by standard SQL.
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.
The MySQL-specific SHOW statement can be
used to retrieve information about databases, storage engines,
tables, and indexes. MySQL 5.0 adds support for the
INFORMATION_SCHEMA database, implemented
according to standard SQL.
The EXPLAIN statement can be
used to determine how the optimizer resolves a query.
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. See
Section 8.3, “Reserved Words”.
You can refer to tables from different databases in the same statement.
Security:
A privilege and password system that is very flexible and secure, and that allows host-based verification.
Passwords are secure because all password traffic is encrypted when you connect to a server.
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 (767 for
InnoDB); before MySQL 4.1.2, the limit is
500 bytes. An index may use a prefix of a column for
CHAR,
VARCHAR,
BLOB, or
TEXT column types.
Connectivity:
Clients can connect to MySQL Server using several protocols:
Clients can connect using TCP/IP sockets on any platform.
On Windows systems in the NT family (NT, 2000, XP, 2003,
or Vista), clients can connect using named pipes if the
server is started with the
--enable-named-pipe option. In MySQL 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
--protocol=memory option.
On Unix systems, clients can connect using Unix domain socket files.
MySQL client programs can be written in many languages. A client library written in C is available for clients written in C or C++, or for any language that provides C bindings.
APIs for C, C++, Eiffel, Java, Perl, PHP, Python, Ruby, and Tcl are available, allowing MySQL clients to be written in many languages. See Chapter 20, Connectors and APIs.
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 Section 20.1, “MySQL Connector/ODBC”.
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 Section 20.4, “MySQL Connector/J”.
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 Section 20.2, “MySQL Connector/NET”.
Localization:
The server can provide error messages to clients in many languages. See Section 9.3, “Setting the Error Message Language”.
Full support for several different character sets, including
latin1 (cp1252), german,
big5, ujis, and more.
For example, the Scandinavian characters
“å”,
“ä” and
“ö” 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.
Sorting and comparisons are done according to the chosen
character set and collation (using latin1
and 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.
As of MySQL 4.1, the server time zone can be changed dynamically, and individual clients can specify their own time zone. Section 9.7, “MySQL Server Time Zone Support”.
MySQL Enterprise. For assistance in getting optimal performance from your MySQL server subscribe to MySQL Enterprise. For more information see http://www.mysql.com/products/enterprise/.
Clients and Tools:
MySQL AB provides several client and utility programs. These include both command-line programs such as mysqldump and mysqladmin, and graphical programs such as MySQL Administrator and MySQL Query Browser.
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 MyISAM
tables. See Chapter 4, MySQL Programs.
MySQL programs can be invoked with the --help
or -? option to obtain online assistance.


User Comments
Add your own comment.