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 sales@mysql.com 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_col3This 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.