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 18.104.22.168 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.
MyISAMtables that an index should be created as an
RTREEindex. (In MySQL 4.1,
RTREEindexes are used internally for geometrical data that use GIS data types, but cannot be created on request.)
VARCHARsupport (column lengths longer than 255, and no stripping of trailing whitespace). There is already support for this in the
MyISAMstorage engine, but it is not yet available at the user level.
SHOW COLUMNS FROM tbl_name(used by the
mysqlclient to allow expansions of column names) should not open the table, only the definition file. This will require less memory and be much faster.
MyISAMtables to use the record cache. To do this, we need to update the threads record cache when we update the `.MYD' file.
RENAME TABLEon a table used in an active
MERGEtable 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 KEYsupport for all table types, not just
BITtype to take one bit. (
BITnow takes one byte; it is treated as a synonym for
RENAME DATABASE. To make this safe for all storage engines, it should work as follows:
CONNECT BY PRIORto search tree-like (hierarchical) structures.
mysqld --concurrent-insertto do a concurrent insert at the end of a table if the table is read-locked.
UPDATEstatements. For example:
UPDATE foo SET @a:=a+b,[email protected], [email protected]+c.
GROUP BY, as in the following statement:
SELECT id, @a:=COUNT(*), SUM(sum_col)/@a FROM tbl_name GROUP BY id.
LOAD DATA INFILEto not update
LOAD DATA INFILE ... UPDATEsyntax that works like this:
LOAD DATA INFILE ... REPLACE INTO.
LOAD DATA INFILEunderstand 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_col3This can be used to skip over extra columns in the text file, or update columns based on expressions of the read data.
mysqlin 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_namefor basic table information should be implemented.
SELECT a FROM tbl_name1 LEFT JOIN tbl_name2 USING (a); in this case
ais assumed to come from tbl_name1.
REPLACEoptions to the
UPDATEstatement (this will delete rows when a duplicate-key error occurs while updating).
DATETIMEto store fractions of seconds.
regexplibrary instead of the current one (the new library should be much faster than the current one).
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;
MyISAMrecovery at the same time.
INSERT INTO ... SELECTto optionally use concurrent inserts.
SELECT MIN(column) ... GROUP BY.
long_query_timewith a granularity in microseconds.
myisampackcode into the server so that it can perform
INSERT/DELETE/UPDATEso that we can gracefully recover if the index file gets full.
ALTER TABLEon a table that is symlinked to another disk, create temporary tables on that disk.
DATE/DATETIMEtype that handles time zone information properly, to make dealing with dates in different time zones easier.
configureso that all libraries (like
MyISAM) can be compiled without threads.
LIMITarguments; for example,
mysqlto 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
mysqladmin copy database new-database; this requires a
COPYoperation to be added to
SHOW HOSTSfor printing information about the hostname cache.
NULLfor calculated columns.
Item_copy_stringon numerical values to avoid number-to-string-to-number conversion in case of
SELECT COUNT(*)*(id+0) FROM tbl_name GROUP BY id.
ALTER TABLEdoesn't abort clients that execute
UPDATEclause, they contain the old values from before the update started.
mmap()when possible. Now only compressed tables use
n, replace other occurrences of col_name within the expression with
n. Currently, this is done only for some simple cases.
FULL OUTER JOIN. (Currently
LEFT|RIGHT OUTER JOINare supported.)
SQL_OPTION MAX_SELECT_TIME=val, for placing a time limit on a query.
LIMITto 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 INFILEstatement to read files that have been compressed with
BLOBcolumns (partly solved now).
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.