This section summarizes the features that we plan to implement in MySQL Server. The items are ordered by release series. Within a list, items are shown in approximately the order they will be done.
Note: If you are an enterprise-level user with an urgent need for a particular feature, please contact [email protected] to discuss sponsoring options. Targeted financing by sponsor companies allows us to allocate additional resources for specific purposes. One example of a feature sponsored in the past is replication.
The following features are planned for inclusion into MySQL 5.0. Some of the features such as stored procedures are complete and are included in MySQL 5.0 alpha, which is available now. Others such as cursors are only partially available. Expect these and other features to mature and be fully supported in upcoming releases.
Note that because we have many developers that are working on different projects, there will also be many additional features. There is also a small chance that some of these features will be added to MySQL 4.1. For a list what is already done in MySQL 4.1, see section 1.3.2.1 Features Available in MySQL 4.1.
For those wishing to take a look at the bleeding edge of MySQL development, we make our BitKeeper repository for MySQL version 5.0 publicly available. See section 2.8.3 Installing from the Development Source Tree. As of December 2003, binary builds of version 5.0 are also available.
CREATE VIEW Syntax.
MyISAM tables that an index
should be created as an RTREE index. (In MySQL 4.1, RTREE indexes
are used internally for geometrical data that use GIS data types, but cannot be
created on request.)
MEMORY tables.
INFORMATION_SCHEMA.
VARCHAR support (column lengths longer than 255, and
no stripping of trailing whitespace).
There is already support for this in the MyISAM storage engine,
but it is not yet available at the user level.
SHOW COLUMNS FROM tbl_name (used by the mysql client to allow
expansions of column names) should not open the table, only the
definition file. This will require less memory and be much faster.
DELETE on MyISAM tables to use the record cache.
To do this, we need to update the threads record cache when we update
the `.MYD' file.
MEMORY tables:
RENAME TABLE on a table used in an active
MERGE table possibly corrupting the table.
The news section of this manual includes a more in-depth list of features. See section D.1 Changes in release 5.0.x (Development).
FOREIGN KEY support for all table types, not just InnoDB.
BIT type to take one bit. (BIT now takes one byte;
it is treated as a synonym for TINYINT.)
RENAME DATABASE. To make this safe for all storage engines,
it should work as follows:
RENAME command.
CONNECT BY PRIOR to search tree-like (hierarchical)
structures.
SUM(DISTINCT).
INSERT SQL_CONCURRENT and mysqld --concurrent-insert to do
a concurrent insert at the end of a table if the table is read-locked.
UPDATE statements. For example:
UPDATE foo SET @a:=a+b,a=@a, b=@a+c.
GROUP BY, as in the following statement:
SELECT id, @a:=COUNT(*), SUM(sum_col)/@a FROM tbl_name GROUP BY id.
IMAGE option to LOAD DATA INFILE to not update
TIMESTAMP and AUTO_INCREMENT columns.
LOAD DATA INFILE ... UPDATE syntax that works like this:
LOAD DATA INFILE ... REPLACE INTO.
LOAD DATA INFILE understand syntax like this:
LOAD DATA INFILE 'file_name.txt' INTO TABLE tbl_name
TEXT_FIELDS (text_col1, text_col2, text_col3)
SET table_col1=CONCAT(text_col1, text_col2),
table_col3=23
IGNORE text_col3
This can be used to skip over extra columns in the text file,
or update columns based on expressions of the read data.
SET type columns:
ADD_TO_SET(value,set)
REMOVE_FROM_SET(value,set)
mysql in the middle of a query, you should open
another connection and kill the old running query.
Alternatively, an attempt should be made to detect this in the server.
SHOW INFO FROM tbl_name for basic table information
should be implemented.
SELECT a FROM tbl_name1 LEFT JOIN tbl_name2 USING (a); in this
case a is assumed to come from tbl_name1.
DELETE and REPLACE options to the UPDATE statement
(this will delete rows when a duplicate-key error occurs while updating).
DATETIME to store fractions of seconds.
regexp library instead of the current
one (the new library should be much faster than the current one).
ANY(), EVERY(), and SOME() group functions. In
standard SQL, these work only on boolean columns, but we can extend these to
work on any columns or expressions by treating a value of zero as FALSE and
non-zero values as TRUE.
MAX(column) to be the same as the column type:
mysql> CREATE TABLE t1 (a DATE); mysql> INSERT INTO t1 VALUES (NOW()); mysql> CREATE TABLE t2 SELECT MAX(a) FROM t1; mysql> SHOW COLUMNS FROM t2;
MyISAM
recovery at the same time.
INSERT INTO ... SELECT to optionally use concurrent inserts.
SELECT MIN(column) ... GROUP BY.
long_query_time with a granularity
in microseconds.
myisampack code into the server so that it can perform
PACK or COMPRESS operations.
INSERT/DELETE/UPDATE so that we
can gracefully recover if the index file gets full.
ALTER TABLE on a table that is symlinked to another
disk, create temporary tables on that disk.
DATE/DATETIME type that handles time zone information
properly, to make dealing with dates in different time zones easier.
configure so that all libraries (like MyISAM)
can be compiled without threads.
LIMIT arguments; for example,
LIMIT @a,@b.
mysql to a Web browser.
LOCK DATABASES (with various options).
SHOW STATUS. Record reads and
updates. Selects on a single table and selects with joins. Mean number of
tables in selects. Number of ORDER BY and GROUP BY queries.
mysqladmin copy database new-database; this requires a COPY
operation to be added to mysqld.
SHOW HOSTS for printing information about the hostname cache.
NULL for calculated columns.
Item_copy_string on numerical values to avoid
number-to-string-to-number conversion in case of
SELECT COUNT(*)*(id+0) FROM tbl_name GROUP BY id.
ALTER TABLE doesn't abort clients
that execute INSERT DELAYED.
UPDATE clause,
they contain the old values from before the update started.
get_changed_tables(timeout,table1,table2,...).
mmap() when possible. Now only
compressed tables use mmap().
SET TIMESTAMP=val;.
n, replace other
occurrences of col_name within the expression with n.
Currently, this is done only for some simple cases.
MINUS, INTERSECT, and FULL OUTER JOIN.
(Currently UNION and LEFT|RIGHT OUTER JOIN are supported.)
SQL_OPTION MAX_SELECT_TIME=val, for placing a time limit on a query.
LIMIT to allow retrieval of data from the end of a result set.
mysqld_safe: According to FSSTND (which
Debian tries to follow), PID files should go into `/var/run/<progname>.pid'
and log files into `/var/log'. It would be nice if you could put the
"DATADIR" in the first declaration of "pidfile" and "log" so that the
placement of these files can be changed with a single statement.
LOAD DATA INFILE statement
to read files that have been compressed with gzip.
BLOB columns (partly solved now).
JOIN with parentheses.
GET_LOCK() to obtain more than one lock. When doing this, it is
also necessary to handle the possible deadlocks this change will introduce.
We aim toward full compliance with ANSI/ISO SQL. There are no features we plan not to implement.
Go to the first, previous, next, last section, table of contents.