The Main Features of MySQL This section describes some of the important characteristics of the MySQL Database Software. In most respects, the roadmap 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 8.0: Section 1.3, “What Is New in MySQL 8.0” •MySQL 5.7: What Is New in MySQL 5.7 •MySQL 5.6: What Is New in MySQL 5.6 •Written in C and C++. •Tested with a broad range of different compilers. •Works on many different platforms. See https://www.mysql.com/support/supportedplatforms/ database.html. •For portability, configured using  CMake •Tested with Purify (a commercial memory leakage detector) as well as with Valgrind, a GPL tool (http:// developer.kde.org/~sewardj/). •Uses multi-layered server design with independent modules. •Designed to be fully multithreaded using kernel threads, to easily use multiple CPUs if they are available. •Provides transactional and nontransactional storage engines. •Uses very fast B-tree disk tables ( MyISAM ) with index compression. •Designed to make it relatively easy to add other storage engines. This is useful if you want to provide an SQL interface for an in-house database. •Uses a very fast thread-based memory allocation system. •Executes very fast joins using an optimized nested-loop join. •Implements in-memory hash tables, which are used as temporary tables. •Implements SQL functions using a highly optimized class library that should be as fast as possible. Usually there is no memory allocation at all after query initialization. •Provides the server as a separate program for use in a client/server networked environment, and 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 bytes long,  FLOAT ,  DOUBLE ,  CHAR , VARCHAR ,  BINARY ,  VARBINARY ,  TEXT ,  BLOB ,  DATE ,  TIME ,  DATETIME ,  TIMESTAMP ,  YEAR ,  SET ,  ENUM , and OpenGIS spatial types. See Chapter 11,  Data Types . •Fixed-length and variable-length string types. •Full operator and function support in the  SELECT  list and  WHERE  clause of queries. For example: 6 Statements and Functions Data Types mysql>  SELECT CONCAT(first_name, ’ ’, last_name) Internals and Portability