![]() |
|
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Please note that since release 4.0 is now production level, only critical fixes are done in the 3.23 release series. You are recommended to upgrade when possible, to take advantage of all speed and feature improvements in 4.0. See section Upgrading From Version 3.23 to 4.0.
The 3.23 release has several major features that are not present in previous versions. We have added three new table types:
MyISAMA new ISAM library which is tuned for SQL and supports large files.
InnoDBA transaction-safe storage engine that supports row level locking, and many Oracle-like features.
BerkeleyDB or BDBUses the Berkeley DB library from Sleepycat Software to implement transaction-safe tables.
Note that only MyISAM is available in the standard binary distribution.
The 3.23 release also includes support for database replication between a master and many slaves, full-text indexing, and much more.
All new features are being developed in the 4.x version. Only bug fixes and minor enhancements to existing features will be added to 3.23.
The replication code and BerkeleyDB code is still not as tested and as the rest of the code, so we will probably need to do a couple of future releases of 3.23 with small fixes for this part of the code. As long as you don't use these features, you should be quite safe with MySQL 3.23!
Note that the above doesn't mean that replication or Berkeley DB don't
work. We have done a lot of testing of all code, including replication
and BDB without finding any problems. It only means that not as many
users use this code as the rest of the code and because of this we are
not yet 100% confident in this code.
mysqldump now correctly quotes all identifiers when communicating
with the server. This assures that during the dump process, mysqldump
will never send queries to the server that result in a syntax error. This
problem is not related to the mysqldump program's output,
which was not changed. (Bug #1148)
MyISAM and ISAM when a row is updated
in a table with a large number of columns and at least one BLOB/TEXT
column.
SHOW CREATE TABLE is always larger than the data length.
The only known application that was affected by the old behaviour was
Borland dbExpress, which truncated the output from the command.
(Bug #1064)
ISAM bug in MAX() optimisation.
Unknown error when doing ORDER BY on reference table which
was used with NULL value on NOT NULL column. (Bug #479)
mysqld.
kill pid-of-mysqld to work on Mac OS X.
SHOW TABLE STATUS displayed incorrect Row_format value for
tables that have been compressed with myisampack.
(Bug #427)
SHOW VARIABLES LIKE 'innodb_data_file_path' displayed only the
name of the first datafile. (Bug #468)
mysqld didn't allow one to UPDATE
rows in a table even if one had a global UPDATE privilege and a
database SELECT privilege.
SELECT and wildcarded select list,
when user only had partial column SELECT privileges on the table.
WHERE clause with a constant
expression such as in WHERE 1 AND (a=1 AND b=1).
mysqlbinlog to fail.
innodb_flush_log_at_trx_commit was changed
from 0 to 1 to make InnoDB tables ACID by default.
See section InnoDB start.
LOAD DATA INFILE IGNORE: When reading
the binary log, mysqlbinlog and the replication code read REPLACE
instead of IGNORE. This could make the slave's table
become different from the master's table. (Bug #218)
MyISAM when a row is inserted into a table with a
large number of columns and at least one BLOB/TEXT column. Bug was caused
by incorrect calculation of the needed buffer to pack data.
TRUNCATE table_name or
DELETE FROM table_name statements, which could cause an INSERT to
table_name to be written to the log before the
TRUNCATE or DELETE statements.
UPDATE of InnoDB tables where one row could be
updated multiple times.
PROCEDURE ANALYSE() to report DATE instead of
NEWDATE.
PROCEDURE ANALYSE(#) to restrict the number of values in an
ENUM column to # also for string values.
mysqldump no longer silently deletes the binary logs when invoked with
the --master-data or --first-slave option;
while this behaviour was convenient for some
users, others may suffer from it. Now one has to explicitly ask for binary
logs to be deleted by using the new --delete-master-logs option.
mysqldump when it was invoked with the
--master-data option: The CHANGE MASTER TO statements that were
appended to the SQL dump had incorrect coordinates. (Bug #159)
mysqld crash on extremely small values of
sort_buffer variable.
GRANT UPDATE on column level.
HAVING with GROUP BY.
WHERE clause. (Bug #142)
myisamchk) crash on artificially
corrupted `.MYI' files.
mysqld no longer reads options from world-writeable config files.
mysqld and safe_mysqld now only use the first --user
option specified on the command line. (Normally this comes from
`/etc/my.cnf')
BACKUP TABLE to overwrite existing files.
LOCK TABLE and
another thread did a DROP TABLE. In this case one could do
a KILL on one of the threads to resolve the deadlock.
LOAD DATA INFILE was not replicated by slave if
replicate_*_table was set on the slave.
CHAR(0) columns that could cause wrong
results from the query.
SHOW VARIABLES on 64-bit platforms. The bug was
caused by wrong declaration of variable server_id.
SHOW TABLE STATUS now reports that it can
contain NULL values (which is the case for a crashed `.frm' file).
rpl_rotate_logs test to not fail on certain platforms (e.g.
Mac OS X) due to a too long file name (changed slave-master-info.opt
to .slave-mi).
BLOB NOT NULL columns used with IS NULL.
MAX() optimisation in MERGE tables.
RAND() initialisation for new connections.
poll() system call, which resulted in timeout the value specified as
it was executed in both select() and poll().
SELECT * FROM table WHERE datetime1 IS NULL OR datetime2 IS NULL.
INTERVAL,
CASE, FIELD, CONCAT_WS, ELT and
MAKE_SET functions.
--lower-case-table-names (default on Windows)
and you had tables or databases with mixed case on disk, then
executing SHOW TABLE STATUS followed with DROP DATABASE
or DROP TABLE could fail with Errcode 13.
NULL in an auto_increment field and also
uses LAST_INSERT_ID().
mysqladmin --relative.
show status reported a strange number for
Open_files and Open_streams.
free'd pointer bug in mysql_change_user()
handling, that enabled a specially hacked version of MySQL client
to crash mysqld. Note, that one needs to login to the server
by using a valid user account to be able to exploit this bug.
--slow-log when logging an administrator command
(like FLUSH TABLES).
GROUP BY when used on BLOB column with NULL values.
NULL values in CASE ... WHEN ....
--chroot (see section --chroot)
is reverted. Unfortunately, there is no way to make it to work, without
introducing backward-incompatible changes in `my.cnf'.
Those who need --chroot functionality, should upgrade to MySQL 4.0.
(The fix in the 4.0 branch did not break backward-compatibility).
--lower-case-table-names default on Mac OS X as the default
file system (HFS+) is case insensitive.
NOHUP_NICENESS
testing.
AUTOCOMMIT=0 mode didn't rotate binary log.
scripts/make_binary_distribution that resulted in
a remaining @HOSTNAME@ variable instead of replacing it with the
correct path to the hostname binary.
SHOW PROCESSLIST to core
dump in pthread_mutex_unlock() if a new thread was connecting.
SLAVE STOP if the thread executing the query has locked
tables. This removes a possible deadlock situation.
mysqld
with a specially crafted packet.
free'd pointer) when altering a
temporary table.
libmysqlclient library
that allowed malicious MySQL server to crash the client
application.
mysql_change_user() handling.
All users are strongly recommended to upgrade to the version 3.23.54.
--chroot command-line option of mysqld
from working.
OPTIMIZE TABLE to corrupt the table
under some rare circumstances.
mysqlcheck so it can deal with table names containing dashes.
NULL field with <=> NULL.
IGNORE INDEX and USE INDEX sometimes
to be ignored.
GROUP BY queries that
didn't return any result.
MATCH ... AGAINST () >=0 was treated as if it was
>.
SHOW PROCESSLIST when running with an
active slave (unlikely timing bug).
TEMPORARY MERGE tables now.
--core-file works on Linux (at least on kernel 2.4.18).
BDB and ALTER TABLE.
GROUP BY
... ORDER BY queries. Symptom was that mysqld died in function
send_fields.
BLOB values in internal
temporary tables used for some (unlikely) GROUP BY queries.
WHERE column_name = key_column_name was calculated as true
for NULL values.
LEFT JOIN ... WHERE key_column=NULL.
MyISAM crash when using dynamic-row tables with huge numbers of
packed fields.
automake 1.5 and
libtool 1.4.
SHOW INNODB STATUS was used and skip-innodb
was defined.
LOCK TABLES on Windows when one connects to a
database that contains upper case letters.
--skip-show-databases doesn't reset the --port option.
safe_mysqld for some shells.
FLUSH STATUS doesn't reset delayed_insert_threads.
BINARY cast on a NULL value.
GRANT at the same time a new
user logged in or did a USE database.
ALTER TABLE and RENAME TABLE when running with
-O lower_case_table_names=1 (typically on Windows) when giving the
table name in uppercase.
-O lower_case_table_names=1 also converts database
names to lower case.
SELECT ... ORDER BY ... LIMIT.
AND/OR to report that they can return NULL. This fixes a
bug in GROUP BY on AND/OR expressions that return
NULL.
OPTIMIZE of locked and modified MyISAM table,
reported table corruption.
BDB-related ALTER TABLE bug with dropping a column
and shutting down immediately thereafter.
configure ... --localstatedir=....
UNSIGNED BIGINT on AIX (again).
InnoDB.
BEGIN/COMMIT around transaction in the binary log.
This makes replication honour transactions.
user.db
table.
RND() to make it less predicatable.
GROUP BY on result with expression that created a
BLOB field.
GROUP BY on columns that have NULL values.
To solve this we now create an MyISAM temporary table when doing a
GROUP BY on a possible NULL item.
From MySQL 4.0.5 we can use in memory HEAP tables for this case.
SLAVE START, SLAVE STOP and automatic repair
of MyISAM tables that could cause table cache to be corrupted.
OPTIMIZE TABLE and REPAIR TABLE.
UNIQUE() key where first part could contain NULL values.
MERGE tables and MAX() function.
ALTER TABLE with BDB tables.
LOAD DATA INFILE to binary log with no
active database.
DROP DATABASE on a
database with InnoDB tables.
mysql_info() returns 0 for 'Duplicates' when using
INSERT DELAYED IGNORE.
-DHAVE_BROKEN_REALPATH to the Mac OS X (darwin) compile
options in `configure.in' to fix a failure under high load.
mysqldump XML output.
ENUM values. (This fixed a problem with
SHOW CREATE TABLE.)
CONCAT_WS() that cut the result.
Com_show_master_stat to
Com_show_master_status and Com_show_slave_stat to
Com_show_slave_status.
gethostbyname() to make the client library
thread-safe even if gethostbyname_r doesn't exist.
GRANT.
DROP DATABASE with symlinked directory.
DATETIME and value outside
DATETIME range.
BDB doc files from the source tree, as they're not
needed (MySQL covers BDB in its own documentation).
glibc 2.2 (needed for
make dist).
FLOAT(X+1,X) is not converted to FLOAT(X+2,X).
(This also affected DECIMAL, DOUBLE and REAL types)
IF() is case in-sensitive if the second and
third arguments are case sensitive.
gethostbyname_r.
'+11111' for
DECIMAL(5,0) UNSIGNED columns, we will just drop the sign.
ISNULL(expression_which_cannot_be_null) and
ISNULL(constant_expression).
glibc library that we used with the 3.23.50
Linux-x86 binaries.
<row> tags for mysqldump XML output.
crash-me and gcc 3.0.4.
@@unknown_variable doesn't hang server.
@@VERSION as a synonym for VERSION().
SHOW VARIABLES LIKE 'xxx' is now case-insensitive.
GET_LOCK() on HP-UX with DCE threads.
SIGINT and SIGQUIT problems in mysql.
InnoDB now retains foreign key constraints through ALTER TABLE
and CREATE/DROP INDEX.
InnoDB now allows foreign key constraints to be added through the
ALTER TABLE syntax.
InnoDB tables can now be set to automatically grow in size (autoextend).
gcc 3.0.4, which
should make them a bit faster.
--enable-named-pipe.
WHERE key_column = 'J' or key_column='j'.
--log-bin with LOAD DATA
INFILE without an active database.
RENAME TABLE when used with
lower_case_table_names=1 (default on Windows).
DROP TABLE on a table
that was in use by a thread that also used queries on only temporary tables.
SHOW CREATE TABLE and PRIMARY KEY when using
32 indexes.
SET PASSWORD for the anonymous user.
mysql_options().
--enable-local-infile.
bison.
DATE_FORMAT() returned empty string when used
with GROUP BY.
mysqldump --disable-keys to work.
NULL.
LOAD DATA LOCAL INFILE more secure.
glibc library,
which has serious problems under high load and Red Hat 7.2. The 3.23.49 binary
release doesn't have this problem.
--xml option to mysqldump for producing XML output.
autoconf 2.52 (from autoconf 2.13)
const tables.
InnoDB.
InnoDB variables were always shown in SHOW VARIABLES as
OFF on high-byte-first systems (like SPARC).
InnoDB table and another
thread doing an ALTER TABLE on the same table. Before that,
mysqld could crash with an assertion failure in `row0row.c',
line 474.
InnoDB SQL optimiser to favor index searches more often
over table scans.
InnoDB tables when several large
SELECT queries are run concurrently on a multiprocessor Linux
computer. Large CPU-bound SELECT queries will now also generally
run faster on all platforms.
InnoDB now prints after crash recovery the
latest MySQL binlog name and the offset InnoDB was able to recover
to. This is useful, for example, when resynchronising a master and a
slave database in replication.
InnoDB
tables.
InnoDB tablespace.
InnoDB now prevents a FOREIGN KEY declaration where the
signedness is not the same in the referencing and referenced integer columns.
SHOW CREATE TABLE or SHOW TABLE STATUS could cause
memory corruption and make mysqld crash. Especially at risk was
mysqldump, because it frequently calls SHOW CREATE TABLE.
AUTO_INCREMENT column were
wrapped inside one LOCK TABLES, InnoDB asserted in
`lock0lock.c'.
NULL values in a UNIQUE secondary
index for an InnoDB table. But CHECK TABLE was not relaxed: it
reports the table as corrupt. CHECK TABLE no longer complains in
this situation.
SHOW GRANTS now shows REFERENCES instead of REFERENCE.
SELECT ... WHERE key=@var_name OR key=@var_name2
InnoDB keys to 500 bytes.
InnoDB now supports NULL in keys.
SELECT RELEASE_LOCK().
DO expression,[expression]
slave-skip-errors option.
SHOW STATUS is
now much longer.)
InnoDB tables.
GROUP BY expr DESC works.
t1 LEFT JOIN t2 ON t2.key=constant.
mysql_config now also works with binary (relocated) distributions.
InnoDB and BDB tables will now use index when doing an
ORDER BY on the whole table.
BDB tables.
ANALYZE, REPAIR, and OPTIMIZE TABLE when
the thread is waiting to get a lock on the table.
ANALYZE TABLE.
INSERT DELAYED
which could cause the binary log to have rows that were not yet written
to MyISAM tables.
(UPDATE|DELETE) ...WHERE MATCH bugfix.
MyISAM files.
--core-file now works on Solaris.
InnoDB to complain if it cannot find
free blocks from the buffer cache during recovery.
InnoDB insert buffer B-tree handling that could cause
crashes.
InnoDB lock timeout handling.
ALTER TABLE on a TEMPORARY InnoDB
table.
OPTIMIZE TABLE that reset index cardinality if it
was up to date.
t1 LEFT_JOIN t2 ... WHERE t2.date_column IS NULL when
date_column was declared as NOT NULL.
BDB tables and keys on BLOB columns.
MERGE tables on OS with 32-bit file pointers.
TIME_TO_SEC() when using negative values.
Rows_examined count in slow query log.
AVG() column in HAVING.
DAYOFYEAR(column), will return NULL for 0000-00-00 dates.
SELECT * FROM date_col="2001-01-01" and date_col=time_col)
Can't write, because of unique
constraint with some GROUP BY queries.
sjis character strings used within quoted table
names.
CREATE ... FULLTEXT keys with other
storage engines than MyISAM.
signal() on Windows because this appears to not be
100% reliable.
WHERE col_name=NULL on an indexed column
that had NULL values.
LEFT JOIN ... ON (col_name = constant) WHERE col_name = constant.
% could cause
a core dump.
TCP_NODELAY was not used on some systems. (Speed problem.)
The following changes are for InnoDB tables:
InnoDB variables to SHOW VARIABLES.
InnoDB tables.
DROP DATABASE now works also for InnoDB tables.
InnoDB now supports datafiles and raw disk partitions bigger
than 4 GB on those operating systems that have big files.
InnoDB calculates better table cardinality estimates for the
MySQL optimiser.
latin1 are ordered
according to the MySQL ordering.
Note: if you are using latin1 and have inserted characters whose
code is greater than 127 into an indexed CHAR column, you should
run CHECK TABLE on your table when you upgrade to 3.23.44, and
drop and reimport the table if CHECK TABLE reports an error!
innodb_thread_concurrency, helps in
performance tuning in heavily concurrent environments.
innodb_fast_shutdown, speeds up
server shutdown.
innodb_force_recovery, helps to save
your data in case the disk image of the database becomes corrupt.
innodb_monitor has been improved and a new
innodb_table_monitor added.
AUTO_INCREMENT columns with
multiple-line inserts.
MAX(col) is selected from an empty table, and
col is not the first column in a multi-column index.
INSERT DELAYED and FLUSH TABLES introduced
in 3.23.42.
SELECT with
many tables and multi-column indexes and 'range' type.
EXPLAIN SELECT when using
many tables and ORDER BY.
LOAD DATA FROM MASTER when using table with
CHECKSUM=1.
BDB tables.
BDB tables and UNIQUE columns defined
as NULL.
myisampack when using pre-space filled CHAR
columns.
--safe-user-create.
LOCK TABLES and BDB tables.
REPAIR TABLE on MyISAM tables with row
lengths in the range from 65517 to 65520 bytes.
mysqladmin shutdown when there was
a lot of activity in other threads.
INSERT DELAYED where delay thread could be
hanging on upgrading locks with no apparent reason.
myisampack and BLOB.
MERGE table come from the same
database.
LOAD DATA INFILE and transactional tables.
INSERT DELAYED with wrong column definition.
REPAIR of some particularly broken tables.
InnoDB and AUTO_INCREMENT columns.
InnoDB and RENAME TABLE columns.
InnoDB and BLOB columns. If you have
used BLOB columns larger than 8000 bytes in an InnoDB
table, it is necessary to dump the table with mysqldump, drop it and
restore it from the dump.
InnoDB when one could get the error Can't
execute the given command... even when no transaction was active.
ALTER TABLE). Now --lower_case_names
also works on Unix.
--sql-mode=value[,value[,value]] option to mysqld.
See section mysqld Command-line Options.
shutdown on Solaris where the
`.pid' file wasn't deleted.
InnoDB now supports < 4 GB rows. The former limit was 8000 bytes.
doublewrite file flush method is used in InnoDB.
It reduces the need for Unix fsync() calls to a fraction and
improves performance on most Unix flavors.
InnoDB Monitor to print a lot of InnoDB state
information, including locks, to the standard output. This is useful in
performance tuning.
InnoDB have been fixed.
record_buffer to record_buffer and
record_rnd_buffer. To make things compatible to previous MySQL
versions, if record_rnd_buffer is not set, then it takes the
value of record_buffer.
ORDER BY where some ORDER BY parts
where wrongly removed.
ALTER TABLE and MERGE tables.
my_thread_init() and my_thread_end() to
`mysql_com.h'
--safe-user-create option to mysqld.
SELECT DISTINCT ... HAVING that caused error message
Can't find record in #...
--low-priority-updates and INSERT statements.
slave_net_timeout for replication.
UPDATE and BDB tables.
BDB tables when using key parts.
GRANT FILE ON database.* ...; previously
we added the DROP privilege for the database.
DELETE FROM tbl_name ... LIMIT 0 and
UPDATE FROM tbl_name ... LIMIT 0, which acted as though the
LIMIT clause was not present (they deleted or updated all selected
rows).
CHECK TABLE now checks if an AUTO_INCREMENT column contains
the value 0.
SIGHUP to mysqld will now only flush the logs,
not reset the replication.
1.0e1 (no sign after e).
--force to myisamchk now also updates states.
--warnings to mysqld. Now mysqld
prints the error Aborted connection only if this option is used.
SHOW CREATE TABLE when you didn't have a
PRIMARY KEY.
innodb_unix_file_flush_method variable to
innodb_flush_method.
BIGINT UNSIGNED to DOUBLE. This caused
a problem when doing comparisons with BIGINT values outside of the
signed range.
BDB tables when querying empty tables.
COUNT(DISTINCT) with LEFT JOIN and
there weren't any matching rows.
GEMINI table
type. GEMINI is not released under an Open Source license.
AUTO_INCREMENT sequence wasn't reset when dropping
and adding an AUTO_INCREMENT column.
CREATE ... SELECT now creates non-unique indexes delayed.
LOCK TABLES tbl_name READ followed by
FLUSH TABLES put an exclusive lock on the table.
REAL @variable values were represented with only 2 digits when
converted to strings.
LOAD TABLE FROM MASTER failed.
myisamchk --fast --force will no longer repair tables
that only had the open count wrong.
-lcma thread library on HP-UX 10.20 so
that MySQL will be more stable on HP-UX.
IF() and number of decimals in the result.
INSERT DELAYED was waiting for
a LOCK TABLE.
InnoDB when tablespace was full.
MERGE tables and big tables (> 4G) when using
ORDER BY.
SELECT from MERGE table
sometimes results in incorrectly ordered rows.
REPLACE() when using the ujis character set.
BDB patches 3.2.9.1 and 3.2.9.2.
--skip-stack-trace option to mysqld.
CREATE TEMPORARY now works with InnoDB tables.
InnoDB now promotes sub keys to whole keys.
CONCURRENT to LOAD DATA.
max_allowed_packet is too low to
read a very long log event from the master.
SELECT DISTINCT ... HAVING.
SHOW CREATE TABLE now returns TEMPORARY for temporary tables.
Rows_examined to slow query log.
WHERE that didn't match any rows.
mysqlcheck.
CHECK,
REPAIR, OPTIMIZE.
InnoDB.
SELECT * FROM tbl_name,tbl_name2 ... ORDER BY key_part1 LIMIT row_count
will use index on key_part1 instead of filesort.
LOCK TABLE to_table WRITE,...; INSERT INTO to_table... SELECT ...
when to_table was empty.
LOCK TABLE and BDB tables.
MATCH() in HAVING clause.
HEAP tables with LIKE.
--mysql-version option to safe_mysqld
INNOBASE to InnoDB (because the INNOBASE
name was already used). All configure options and mysqld
start options now use innodb instead of innobase. This
means that before upgrading to this version, you have to change any
configuration files where you have used innobase options!
CHAR(255) NULL columns.
master-host is not set, as
long as server-id is set and valid `master.info' is present.
SET SQL_SLAVE_SKIP_COUNTER=1; SLAVE START after a manual sanity
check/correction of data integrity.
REGEXP on 64-bit machines.
UPDATE and DELETE with WHERE unique_key_part IS NULL
didn't update/delete all rows.
INSERT DELAYED for tables that support transactions.
TEXT/BLOB column
with wrong date format.
ALTER TABLE and LOAD DATA INFILE that disabled
key-sorting. These commands should now be faster in most cases.
FLUSH or REPAIR) would not use indexes for the
next query.
ALTER TABLE to InnoDB tables on FreeBSD.
mysqld variables myisam_max_sort_file_size and
myisam_max_extra_sort_file_size.
InnoDB.
tis620 character set to make comparisons
case-independent and to fix a bug in LIKE for this character set.
Note: All tables that uses the tis620 character set must be
fixed with myisamchk -r or REPAIR TABLE !
--skip-safemalloc option to mysqld.
mysqld is run
as root.
FLUSH TABLES and TEMPORARY tables.
(Problem with freeing the key cache and error Can't reopen table....)
InnoDB with other character sets than latin1
and another problem when using many columns.
DISTINCT and summary functions.
SET TRANSACTION ISOLATION LEVEL ...
SELECT ... FOR UPDATE.
UPDATE where keys weren't always used to find the
rows to be updated.
CONCAT_WS() where it returned incorrect results.
CREATE ... SELECT and INSERT ... SELECT to not
allow concurrent inserts as this could make the binary log hard to repeat.
(Concurrent inserts are enabled if you are not using the binary or update log.)
glibc 2.2.
ORDER BY.
CLIENT_TRANSACTIONS.
SHOW VARIABLES when using INNOBASE tables.
SELECT DISTINCT didn't work.
SHOW ANALYZE for small tables.
run-all-tests.
INNOBASE support
to be compiled.
INNOBASE storage engine and the BDB storage engine
to the MySQL source distribution.
GEMINI tables.
INSERT DELAYED that caused threads to hang when
inserting NULL into an AUTO_INCREMENT column.
CHECK TABLE / REPAIR TABLE that could cause
a thread to hang.
REPLACE will not replace a row that conflicts with an
AUTO_INCREMENT generated key.
mysqld now only sets CLIENT_TRANSACTIONS in
mysql->server_capabilities if the server supports a
transaction-safe storage engine.
LOAD DATA INFILE to allow numeric values to be read into
ENUM and SET columns.
ALTER TABLE ... ORDER BY.
max_user_connections variable to mysqld.
max_allowed_packet, not the
arbitrary limit of 4 MB.
= in argument to --set-variable.
Waiting for table.
SHOW CREATE TABLE now displays the UNION=() for MERGE
tables.
ALTER TABLE now remembers the old UNION=() definition.
BDB storage engine that occurred when using an index
on multi-part key where a key part may be NULL.
MAX() optimisation on sub-key for BDB tables.
BDB
tables and BLOB or TEXT fields when joining many tables.
BDB tables and TEXT columns.
BLOB key where a const row wasn't found.
mysqlbinlog writes the timestamp value for each query.
This ensures that one gets same values for date functions like NOW()
when using mysqlbinlog to pipe the queries to another server.
--skip-gemini, --skip-bdb, and --skip-innodb
options to be specified when invoking mysqld, even if these storage
engines are not compiled in to mysqld.
GROUP BY ... DESC.
SET code, when one ran SET @foo=bar,
where bar is a column reference, an error was not properly generated.
--character-sets-dir option to myisampack.
REPAIR TABLE ... EXTENDED.
GROUP BY on an alias,
where the alias was the same as an existing column name.
SEQUENCE() as an example UDF function.
mysql_install_db to use BINARY for CHAR
columns in the privilege tables.
TRUNCATE tbl_name to TRUNCATE TABLE tbl_name
to use the same syntax as Oracle. Until 4.0 we will also allow
TRUNCATE tbl_name to not crash old code.
MyISAM tables when a BLOB was
first part of a multi-part key.
CASE didn't work with GROUP BY.
--sort-recover option to myisamchk.
myisamchk -S and OPTIMIZE TABLE now work on Windows.
DISTINCT on results from functions that referred
to a group function, like:
SELECT a, DISTINCT SEC_TO_TIME(SUM(a)) FROM tbl_name GROUP BY a, b; |
libmysqlclient library.
Fixed bug in handling STOP event after ROTATE event in
replication.
DROP DATABASE.
Table_locks_immediate and Table_locks_waited status
variables.
SET SQL_SLAVE_SKIP_COUNTER=n command to recover from
replication glitches without a full database copy.
max_binlog_size variable; the binary log will be rotated
automatically when the size crosses the limit.
Last_error, Last_errno, and Slave_skip_counter
variables to SHOW SLAVE STATUS.
MASTER_POS_WAIT() function.
SIGILL, and SIGBUS in addition to
SIGSEGV.
mysqltest to take care of the timing issues in the test
suite.
ALTER TABLE can now be used to change the definition for a
MERGE table.
MERGE tables on Windows.
--temp-pool option to mysqld. Using this option
will cause most temporary files created to use a small set of names,
rather than a unique name for each new file. This is to work around a
problem in the Linux kernel dealing with creating a bunch of new files
with different names. With the old behaviour, Linux seems to "leak"
memory, as it's being allocated to the directory entry cache instead of
the disk cache.
BACKUP, RESTORE, CHECK, REPAIR, and
ANALYZE TABLE.
FULL to SHOW COLUMNS. Now we show the
privilege list for the columns only if this option is given.
SHOW LOGS when there weren't any BDB logs.
mysql_list_fields(). This is
to keep this code compatible with SHOW FIELDS.
MERGE tables didn't work on Windows.
SET PASSWORD=... on Windows.
TRIM("foo" from "foo") didn't return an empty string.
--with-version-suffix option to configure.
mysql_close().
RESTORE TABLE when trying to restore from a non-existent
directory.
SET PASSWORD.
MASTER_POS_WAIT().
BDB interface code. During
testing we found and fixed many errors in the interface code.
HAVING on an empty table could produce one result row when
it shouldn't.
HEAP tables on Windows.
SHOW TABLE STATUS didn't show correct average row length for tables
larger than 4G.
CHECK TABLE ... EXTENDED didn't check row links for fixed size tables.
MEDIUM to CHECK TABLE.
DECIMAL() keys on negative numbers.
HOUR() (and some other TIME functions) on a CHAR column
always returned NULL.
setrlimit() on Linux to get
-O --open-files-limit=# to work on Linux.
bdb_version variable to mysqld.
SELECT ... FROM t1 LEFT JOIN t2 ON (t1.a=t2.a) WHERE t1.a=t2.a |
In this case the test in the WHERE clause was wrongly optimised away.
MyISAM when deleting keys with possible NULL
values, but the first key-column was not a prefix-compressed text column.
mysql.server to read the [mysql.server] option file group
rather than the [mysql_server] group.
safe_mysqld and mysql.server to also read the
server option section.
Threads_created status variable to mysqld.
SHOW OPEN TABLES command.
myisamdump works against old mysqld servers.
myisamchk -k# so that it works again.
LOCK TABLES will now automatically start a new transaction.
BDB tables to not use internal subtransactions and reuse
open files to get more speed.
--mysqld=# option to safe_mysqld.
--fields-*-by and
--lines-terminated-by options to mysqldump and
mysqlimport. By Paul DuBois.
--safe-show-database option to mysqld.
have_bdb, have_gemini, have_innobase,
have_raid and have_openssl to SHOW VARIABLES to make it
easy to test for supported extensions.
--open-files-limit option to mysqld.
--open-files option to --open-files-limit in
safe_mysqld.
HEAP tables
that had many keys.
--bdb-no-sync works.
--bdb-recover to --bdb-no-recover as recover should
be on by default.
BDB locks to 10000.
BDB tables.
mysqld_multi.sh to use configure variables. Patch by
Christopher McCrory.
--skip-networking on Debian Linux.
UNOPENED in error messages.
SHOW LOGS queries.
<=> operator.
REPLACE with BDB tables.
LPAD() and RPAD() will shorten the result string if it's longer
than the length argument.
SHOW LOGS command.
BDB logs on shutdown.
PRIMARY keys first, followed by
UNIQUE keys.
UPDATE involving multi-part keys where one
specified all key parts both in the update and the WHERE part. In
this case MySQL could try to update a record that didn't match
the whole WHERE part.
mysqld to report the
hostname as '' in some error messages.
HEAP type tables; the variable
max_heap_table_size wasn't used. Now either MAX_ROWS or
max_heap_table_size can be used to limit the size of a HEAP
type table.
bdb_lock_max variable to bdb_max_lock.
AUTO_INCREMENT on sub-fields for BDB tables.
ANALYZE of BDB tables.
BDB tables, we now store the number of rows; this helps to optimise
queries when we need an approximation of the number of rows.
ROLLBACK when you have updated a non-transactional table
you will get an error as a warning.
--bdb-shared-data option to mysqld.
Slave_open_temp_tables status variable to mysqld
binlog_cache_size and max_binlog_cache_size variables to
mysqld.
DROP TABLE, RENAME TABLE, CREATE INDEX and
DROP INDEX are now transaction endpoints.
DROP DATABASE on a symbolically linked database, both
the link and the original database is deleted.
DROP DATABASE to work on OS/2.
SELECT DISTINCT ... table1 LEFT JOIN
table2 ... when table2 was empty.
--abort-slave-event-count and
--disconnect-slave-event-count options to mysqld for
debugging and testing of replication.
SHOW KEYS now shows whether key is FULLTEXT.
mysqld_multi. See section mysqld_multi.
mysql-multi.server.sh. Thanks to
Tim Bunce Tim.Bunce@ig.co.uk for modifying mysql.server to
easily handle hosts running many mysqld processes.
safe_mysqld, mysql.server, and mysql_install_db have
been modified to use mysql_print_defaults instead of various hacks
to read the `my.cnf' files. In addition, the handling of various
paths has been made more consistent with how mysqld handles them
by default.
FULLTEXT indexes in one table.
REPAIR/OPTIMIZE.
Yuri Dario.
FLUSH TABLES tbl_name didn't always flush the index tree
to disk properly.
--bootstrap is now run in a separate thread. This fixes a problem
that caused mysql_install_db to core dump on some Linux machines.
mi_create() to use less stack space.
MATCH() when used
with UNIQUE key.
crash-me and the MySQL benchmarks to also work
with FrontBase.
RESTRICT and CASCADE after DROP TABLE to make
porting easier.
--slow-log.
connect_timeout variable to mysql and mysqladmin.
connect-timeout as an alias for timeout for option files
read by mysql_options().
--pager[=...], --no-pager,
--tee=... and --no-tee to the mysql client. The
new corresponding interactive commands are pager, nopager,
tee and notee. See section mysql, mysql --help
and the interactive help for more information.
MyISAM table failed.
SELECT, UPDATE and INSERT
statements running. The symptom was that the UPDATE and
INSERT queries were locked for a long time while new SELECT
statements were executed before the updates.
options_files with mysql_options() the
return-found-rows option was ignored.
interactive-timeout in the option file that
is read by mysql_options(). This makes it possible to force
programs that run for a long time (like mysqlhotcopy) to use the
interactive_timeout time instead of the wait_timeout time.
--log-long-format then also queries that
do not use an index are logged, even if the query takes less than
long_query_time seconds.
LEFT JOIN which caused all columns in a reference
table to be NULL.
NATURAL JOIN without keys.
TEXT or BLOB.
DROP of temporary tables wasn't stored in the update/binary log.
SELECT DISTINCT * ... LIMIT row_count only returned one row.
strstr() for SPARC and cleaned up
the `global.h' header file to avoid a problem with bad aliasing with
the compiler submitted with Red Hat 7.0. (Reported by Trond Eivind Glomsrød)
--skip-networking option now works properly on NT.
ISAM tables when a row with a length
of more than 65K was shortened by a single byte.
MyISAM when running multiple updating processes on
the same table.
FLUSH TABLE tbl_name.
--replicate-ignore-table, --replicate-do-table,
--replicate-wild-ignore-table, and --replicate-wild-do-table
options to mysqld.
IO_CACHE mechanism instead of
FILE to avoid OS problems when there are many files open.
--open-files and --timezone options to safe_mysqld.
CREATE TEMPORARY TABLE ... SELECT ....
CREATE TABLE ... SELECT NULL.
large_file_support,net_read_timeout,
net_write_timeout and query_buffer_size to SHOW VARIABLES.
created_tmp_files and sort_merge_passes
to SHOW STATUS.
FOREIGN KEY definition.
TRUNCATE table_name as a synonym for
DELETE FROM table_name.
BDB key compare function when comparing part keys.
bdb_lock_max variable to mysqld.
mysql_connect() now aborts on Linux if the server doesn't answer in
timeout seconds.
SLAVE START did not work if you started with
--skip-slave-start and had not explicitly run CHANGE MASTER TO.
SHOW MASTER STATUS to be consistent with
SHOW SLAVE STATUS. (It now has no directory in the log name.)
PURGE MASTER LOGS TO.
SHOW MASTER LOGS.
--safemalloc-mem-limit option to mysqld to simulate memory
shortage when compiled with the --with-debug=full option.
SHOW SLAVE STATUS was using an uninitialised mutex if the slave had
not been started yet.
ELT() and MAKE_SET() when the query used
a temporary table.
CHANGE MASTER TO without specifying MASTER_LOG_POS would
set it to 0 instead of 4 and hit the magic number in the master binlog.
ALTER TABLE ... ORDER BY ... syntax added. This will create the
new table with the rows in a specific order.
MyISAM tables sometimes failed
when the datafile was corrupt.
SHOW CREATE when using AUTO_INCREMENT columns.
BDB tables to use new compare function in Berkeley DB 3.2.3.
latin5 (turkish) character set.
FLUSH MASTER and FLUSH SLAVE to RESET MASTER
and RESET SLAVE.
<> to work properly with NULL.
SUBSTRING_INDEX() and REPLACE().
(Patch by Alexander Igonitchev)
CREATE TEMPORARY TABLE IF NOT EXISTS not to produce an error
if the table exists.
PRIMARY KEY in a BDB table, a hidden
PRIMARY KEY will be created.
BDB tables.
LEFT JOIN in some cases preferred a full table scan when there was
no WHERE clause.
--log-slow-queries, don't count the time waiting for a lock.
MyISAM tables if you start mysqld with
--myisam-recover.
TYPE= keyword from CHECK and
REPAIR. Allow CHECK options to be combined. (You can still
use TYPE=, but this usage is deprecated.)
--replicate-rewrite-db option to mysqld.
--skip-slave-start option to mysqld.
INSERT INTO foo(some_key)
values (1),(1)) erroneously terminated the slave thread.
DISTINCT is only used on columns
from some of the tables.
1e1).
SHOW GRANTS didn't always show all column grants.
--default-extra-file=# option to all MySQL clients.
INSERT statements now are initialised properly.
UPDATE didn't always work when used with a range on a timestamp that
was part of the key that was used to find rows.
FULLTEXT index when inserting a NULL column.
mkstemp() instead of tempnam(). Based
on a patch from John Jones.
databasename works as second argument to mysqlhotcopy.
UMASK and UMASK_DIR environment variables
now can be specified in octal by beginning the value with a zero.
RIGHT JOIN. This makes RIGHT a reserved word.
@@IDENTITY as a synonym for LAST_INSERT_ID().
(This is for MSSQL compatibility.)
myisamchk and REPAIR when using FULLTEXT
index.
LOAD DATA INFILE now works with FIFOs.
(Patch by Toni L. Harbaugh-Blackford.)
FLUSH LOGS broke replication if you specified a log name with an
explicit extension as the value of the log-bin option.
MyISAM with packed multi-part keys.
CHECK TABLE on Windows.
FULLTEXT index always used the koi8_ukr
character set.
CHECK TABLE.
MyISAM repair/reindex code didn't use the --tmpdir
option for its temporary files.
BACKUP TABLE and RESTORE TABLE.
CHANGE MASTER TO when the slave did not have
the master to start with.
Time in the processlist for Connect of
the slave thread.
FLUSH MASTER if you didn't specify
a filename argument to --log-bin.
--memlock option to mysqld to lock mysqld
in memory on systems with the mlockall() call (as in Solaris).
HEAP tables didn't use keys properly. (Bug from 3.23.23.)
MERGE tables (keys, mapping, creation,
documentation...). See section MERGE.
mysqldump from 3.23 which caused some CHAR columns
not to be quoted.
analyze, check, optimize and repair code.
OPTIMIZE TABLE is now mapped to REPAIR with statistics and
sorting of the index tree. This means that for the moment it only
works on MyISAM tables.
ORDER BY bug with BDB tables.
mysqld couldn't remove the `.pid' file
under Windows.
--log-isam to log MyISAM tables instead of isam
tables.
CHECK TABLE to work on Windows.
pwrite() safe on Windows.
created_tmp_disk_tables variable to mysqld.
TIMESTAMP(X) columns, MySQL now reports columns with X
other than 14 or 8 to be strings.
latin1 as it was before MySQL Version 3.23.23.
Any table that was created or modified with 3.23.22 must be repaired if it has
CHAR columns that may contain characters with ASCII values greater than
128!
BDB tables and reading on a unique (not primary) key.
win1251 character set (it's now only marked deprecated).
REPAIR TABLE or myisamchk before use!
--core-file option to mysqld to get a core file on
Linux if mysqld dies on the SIGSEGV signal.
mysql now starts with option
--no-named-commands (-g) by default. This option can be
disabled with --enable-named-commands (-G). This may cause
incompatibility problems in some cases, for example, in SQL scripts that
use named commands without a semicolon, etc.! Long format commands
still work from the first line.
DROP TABLE statements at
the same time.
LEFT JOIN on an
empty table.
mysqld with incorrect options.
free() bug in mysqlimport.
MyISAM index handling of
DECIMAL/NUMERIC keys.
MyISAM tables. In some contexts,
usage of MIN(key_part) or MAX(key_part) returned an empty set.
mysqlhotcopy to use the new FLUSH TABLES table_list
syntax. Only tables which are being backed up are flushed now.
--enable-thread-safe-client so
that both non-threaded (-lmysqlclient) and threaded
(-lmysqlclient_r) libraries are built. Users who linked
against a threaded -lmysqlclient will need to link against
-lmysqlclient_r now.
RENAME TABLE command.
NULL values in COUNT(DISTINCT ...).
ALTER TABLE, LOAD DATA INFILE on empty tables and
INSERT ... SELECT ... on empty tables to create non-unique indexes
in a separate batch with sorting. This will make the above calls much
faster when you have many indexes.
ALTER TABLE now logs the first used insert_id correctly.
BLOB column.
DATE_ADD/DATE_SUB where it returned a datetime instead
of a date.
***DEAD*** in SHOW PROCESSLIST.
pthread_rwlock_rdlock code.
HEAP table, all rows
weren't always deleted.
HEAP tables for searches on a part
index.
SELECT on part keys to work with BDB tables.
INSERT INTO bdb_table ... SELECT to work with BDB tables.
CHECK TABLE now updates key statistics for the table.
ANALYZE TABLE will now only update tables that have been changed
since the last ANALYZE. Note that this is a new feature and tables
will not be marked to be analysed until they are updated in any way with
3.23.23 or newer. For older tables, you have to do CHECK TABLE
to update the key distribution.
CHECK, ANALYZE,
REPAIR and SHOW CREATE commands.
CHANGE MASTER TO statement.
FAST, QUICK EXTENDED check types to
CHECK TABLES.
myisamchk so that --fast and
--check-only-changed are also honored with --sort-index and
--analyze.
LOAD TABLE FROM MASTER that did not lock the
table during index re-build.
LOAD DATA INFILE broke replication if the database was excluded
from replication.
SHOW SLAVE STATUS and SHOW MASTER STATUS.
SLAVE STOP now will not return until the slave thread actually exits.
MATCH() function and FULLTEXT index type
(for MyISAM files). This makes FULLTEXT a reserved word.
lex_hash.h is created properly for each MySQL
distribution.
MASTER and COLLECTION are not reserved words.
--slow-query-log didn't contain the whole queries.
BDB tables are rolled back if the
connection is closed unexpectedly.
gcc 2.96 (intel) and gcc 2.9
(IA-64) in gen_lex_hash.c.
host= in the
`my.cnf' file.
DATE_ADD()/DATE_SUB()
against a number.
-F, --fast for myisamchk. Added
-C, --check-only-changed option to myisamchk.
ANALYZE tbl_name to update key statistics for tables.
0x... to be regarded as integers by default.
SHOW PROCESSLIST.
auto-rehash on reconnect for the mysql client.
MyISAM, where the index file couldn't
get bigger than 64M.
SHOW MASTER STATUS and SHOW SLAVE STATUS.
mysql_character_set_name() function to the
MySQL C API.
mysql_config script.
< or > with a char column that was only
partly indexed.
mysqladmin to use CREATE DATABASE and DROP
DATABASE statements instead of the old deprecated API calls.
chown warning in safe_mysqld.
ORDER BY that was introduced in 3.23.19.
DELETE FROM tbl_name to do a drop+create of
the table if we are in AUTOCOMMIT mode (needed for BDB tables).
ISAM/MyISAM
index files get full during an INSERT/UPDATE.
myisamchk didn't correctly update row checksum when used with
-ro (this only gave a warning in subsequent runs).
REPAIR TABLE so that it works with tables without indexes.
DROP DATABASE.
LOAD TABLE FROM MASTER is sufficiently bug-free to announce it as
a feature.
MATCH and AGAINST are now reserved words.
DELETE FROM tbl_name removed the `.frm' file.
SHOW CREATE TABLE.
GPL for the server code and utilities and
to LGPL for the client libraries.
MyISAM table
when doing update based on key on a table with many keys and some key changed
values.
ORDER BY can now use REF keys to find subsets of the rows
that need to be sorted.
print_defaults program to my_print_defaults
to avoid name confusion.
NULLIF() to work as required by SQL-99.
net_read_timeout and net_write_timeout as startup
parameters to mysqld.
myisamchk --sort-records
on a table with prefix compressed index.
pack_isam and myisampack to the standard MySQL
distribution.
BEGIN WORK (the same as BEGIN).
ORDER BY on a CONV() expression.
LOAD TABLE FROM MASTER.
FLUSH MASTER and FLUSH SLAVE.
FLUSH TABLES WITH READ LOCK to make a global lock suitable for
making a copy of MySQL datafiles.
CREATE TABLE ... SELECT ... PROCEDURE now works.
GROUP BY on VARCHAR/CHAR columns.
READ and a
WRITE lock.
myisamchk and RAID tables.
FIND_IN_SET() when the first argument was NULL.
LEFT JOIN and ORDER BY where the first
table had only one matching row.
duplicated key problem when doing big GROUP BY operations.
(This bug was probably introduced in 3.23.15.)
INNER JOIN to match SQL-99.
NATURAL JOIN syntax.
BDB interface.
--no-defaults and --defaults-file to
safe_mysqld.sh and mysql_install_db.sh.
USE INDEX works with PRIMARY keys.
BEGIN statement to start a transaction in AUTOCOMMIT mode.
AUTOCOMMIT mode
and if there is a pending transaction. If there is a pending transaction,
the client library will give an error before reconnecting to the server to
let the client know that the server did a rollback.
The protocol is still backward-compatible with old clients.
KILL now works on a thread that is locked on a 'write' to a dead client.
log-slave-updates option to mysqld, to allow
daisy-chaining the slaves.
pthread_t
is not the same as int.
INSERT DELAYED code when doing
ALTER TABLE.
INSERT DELAYED.
SLAVE START and SLAVE STOP statements.
TYPE=QUICK option to CHECK and to REPAIR.
REPAIR TABLE when the table was in use by other threads.
gdb when one does a lot of reconnects. This will also improve
systems where you can't use persistent connections.
UPDATE IGNORE will not abort if an update results in a
DUPLICATE_KEY error.
CREATE TEMPORARY TABLE commands in the update log.
delay_key_write tables and CHECK TABLE.
replicate-do-db and replicate-ignore-db options to
mysqld, to restrict which databases get replicated.
SQL_LOG_BIN option.
mysqld as root, you must now use the --user=root option.
FLUSH TABLES command.
slow_launch_time variable and the Slow_launch_threads
status variable to mysqld. These can be examined with
mysqladmin variables and mysqladmin extended-status.
INET_NTOA() and INET_ATON().
IF() now depends on the second and
third arguments and not only on the second argument.
myisamchk could go into a loop when trying to
repair a crashed table.
INSERT DELAYED to update log if SQL_LOG_UPDATE=0.
REPLACE on HEAP tables.
SHOW VARIABLES output.
DELETE of many rows on a table with
compressed keys where MySQL scanned the index to find the rows.
CHECK on table with deleted keyblocks.
LAST_INSERT_ID() to update
a table with an AUTO_INCREMENT key.
NULLIF() function.
LOAD DATA INFILE on a table with
BLOB/TEXT columns.
MyISAM to be faster when inserting keys in sorted order.
EXPLAIN SELECT ... now also prints out whether MySQL needs to
create a temporary table or use file sorting when resolving the SELECT.
ORDER BY parts where the part is a
constant expression in the WHERE part. Indexes can now be used
even if the ORDER BY doesn't match the index exactly, as long as
all the unused index parts and all the extra ORDER BY
columns are constants in the WHERE clause. See section How MySQL Uses Indexes.
UPDATE and DELETE on a whole unique key in the WHERE part
are now faster than before.
RAID_CHUNKSIZE to be in 1024-byte increments.
LOAD_FILE(NULL).
mysql_real_escape_string() function to the MySQL C API.
CONCAT() where one of the arguments was a function
that returned a modified argument.
myisamchk, where it updated the header in
the index file when one only checked the table. This confused the
mysqld daemon if it updated the same table at the same time. Now
the status in the index file is only updated if one uses
--update-state. With older myisamchk versions you should
use --read-only when only checking tables, if there is the
slightest chance that the mysqld server is working on the table at the
same time!
DROP TABLE is logged in the update log.
DECIMAL() key field
where the column data contained leading zeros.
myisamchk when the AUTO_INCREMENT column isn't
the first key.
DATETIME in ISO8601 format: 2000-03-12T12:00:00
mysqld binary can now handle many different
character sets (you can choose which when starting mysqld).
REPAIR TABLE.
mysql_thread_safe() function to the MySQL C API.
UMASK_DIR environment variable.
CONNECTION_ID() function to return the client connection thread
ID.
= on BLOB or VARCHAR BINARY keys, where
only a part of the column was indexed, the whole column of the result
row wasn't compared.
sjis character set and ORDER BY.
GROUP BY part.
LOCK TABLE command; this fixed the problem one got when running
the test-ATIS test with --fast or --check-only-changed.
SQL_BUFFER_RESULT option to SELECT.
CHECK TABLE command.
MyISAM in 3.23.12 that didn't get into the source
distribution because of CVS problems.
mysqladmin shutdown will wait for the local server
to close down.
print_defaults program to the `.rpm' files. Removed
mysqlbug from the client `.rpm' file.
MyISAM involving REPLACE ... SELECT ... which could
give a corrupted table.
myisamchk where it incorrectly reset the
AUTO_INCREMENT value.
DISTINCT on HEAP temporary tables to use hashed
keys to quickly find duplicated rows. This mostly concerns queries of
type SELECT DISTINCT ... GROUP BY .... This fixes a problem where
not all duplicates were removed in queries of the above type. In
addition, the new code is MUCH faster.
IF NOT EXISTS clause to CREATE DATABASE.
--all-databases and --databases options to mysqldump
to allow dumping of many databases at the same time.
DECIMAL() index in MyISAM tables.
mysqladmin shutdown on a local connection, mysqladmin
now waits until the PID file is gone before terminating.
COUNT(DISTINCT ...) queries.
myisamchk works properly with RAID tables.
LEFT JOIN and key_field IS NULL.
net_clear() which could give the error Aborted
connection in the MySQL clients.
USE INDEX (key_list) and IGNORE INDEX (key_list) as
parameters in SELECT.
DELETE and RENAME should now work on RAID tables.
ALTER TABLE tbl_name ADD (field_list) syntax.
GRANT/REVOKE ALL PRIVILEGES doesn't affect
GRANT OPTION.
SHOW GRANTS.
UNIQUE INDEX in CREATE statements.
mysqlhotcopy - fast online hot-backup utility for local
MySQL databases. By Tim Bunce.
mysqlaccess. Thanks to Steve Harvey for this.
--i-am-a-dummy and --safe-updates options to mysql.
select_limit and max_join_size variables to mysql.
SQL_MAX_JOIN_SIZE and SQL_SAFE_UPDATES options.
READ LOCAL lock that doesn't lock the table for concurrent
inserts. (This is used by mysqldump.)
LOCK TABLES ... READ doesn't anymore allow concurrent
inserts.
--skip-delay-key-write option to mysqld.
_rowid can now be used as an alias for an integer type unique indexed
column.
SIGPIPE when compiling with --thread-safe-clients
to make things safe for old clients.
LOCK TABLES.
INSERT DELAYED.
date_col BETWEEN const_date AND const_date works.
NULL in a table with
BLOB/TEXT columns.
WHERE K1=1 and K3=2 and (K2=2 and K4=4 or K2=3 and K4=5)
source command to mysql to allow reading of batch files
inside the mysql client. Original patch by Matthew Vanecek.
WITH GRANT OPTION option.
GRANT error when using tables from many
databases in the same query.
SELECT when using many overlapping indexes.
MySQL should now be able to choose keys even better when there
are many keys to choose from.
=). For example, the following type of queries should now
be faster: SELECT * from key_part_1=const and key_part_2 > const2
VARCHAR columns to CHAR columns
didn't change row type from dynamic to fixed.
SELECT FLOOR(POW(2,63)).
mysqld startup option from --delay-key-write to
--delay-key-write-for-all-tables.
read-next-on-key to HEAP tables. This should fix all
problems with HEAP tables when using non-UNIQUE keys.
--log-slow-queries option to mysqld to log all queries
that take a long time to a separate log file with a time indicating how
long the query took.
WHERE key_col=RAND(...).
SELECT ... LEFT JOIN ... key_col IS NULL,
when key_col could contain NULL values.
LOAD DATA INFILE.
NISAM.
ISAM when doing some ORDER BY ... DESC queries.
--delay-key-write didn't enable delayed key writing.
TEXT column which involved only case changes.
INSERT DELAYED doesn't update timestamps that are given.
YEARWEEK() and options x, X, v and
V to DATE_FORMAT().
MAX(indexed_column) and HEAP tables.
BLOB NULL keys and LIKE "prefix%".
MyISAM and fixed-length rows < 5 bytes.
GROUP BY queries.
ENUM field value
was too big.
pthread_mutex_timedwait,
which is used with INSERT DELAYED. See section Linux Notes (All Linux Versions).
MyISAM with keys > 250 characters.
MyISAM one can now do an INSERT at the same time as other
threads are reading from the table.
max_write_lock_count variable to mysqld to force a
READ lock after a certain number of WRITE locks.
delay_key_write on show variables.
concurrency variable to thread_concurrency.
LOCATE(substr,str), POSITION(substr IN str),
LOCATE(substr,str,pos), INSTR(str,substr),
LEFT(str,len), RIGHT(str,len),
SUBSTRING(str,pos,len), SUBSTRING(str FROM pos FOR len),
MID(str,pos,len), SUBSTRING(str,pos), SUBSTRING(str
FROM pos), SUBSTRING_INDEX(str,delim,count), RTRIM(str),
TRIM([[BOTH | TRAILING] [remstr] FROM] str),
REPLACE(str,from_str,to_str), REVERSE(str),
INSERT(str,pos,len,newstr), LCASE(str), LOWER(str),
UCASE(str) and UPPER(str); patch by Wei He.
FULL to SHOW PROCESSLIST.
--verbose to mysqladmin.
HEAP to MyISAM.
HEAP tables when doing insert + delete + insert + scan the
table.
REPLACE() and LOAD DATA INFILE.
interactive_timeout variable to mysqld.
mysql_data_seek() from ulong to
ulonglong.
-O lower_case_table_names={0|1} option to mysqld to allow
users to force table names to lowercase.
SELECT ... INTO DUMPFILE.
--ansi option to mysqld to make some functions
SQL-99 compatible.
#sql.
` (" in --ansi mode).
snprintf() when printing floats to avoid some buffer
overflows on FreeBSD.
FLOOR() overflow safe on FreeBSD.
--quote-names option to mysqldump.
PRIMARY KEY NOT NULL.
encrypt() to be thread-safe and not reuse buffer.
mysql_odbc_escape_string() function to support big5 characters in
MyODBC.
FLOAT and DOUBLE (without any length modifiers)
no longer are fixed decimal point numbers.
FLOAT(X): Now this is the same as FLOAT if
X <= 24 and a DOUBLE if 24 < X <= 53.
DECIMAL(X) is now an alias for DECIMAL(X,0) and DECIMAL
is now an alias for DECIMAL(10,0). The same goes for NUMERIC.
ROW_FORMAT={default | dynamic | fixed | compressed} to
CREATE_TABLE.
DELETE FROM table_name didn't work on temporary tables.
CHAR_LENGTH() to be multi-byte character safe.
ORD(string).
SELECT DISTINCT ... ORDER BY RAND().
MyISAM
level.
ALTER TABLE didn't work.
AUTO_INCREMENT column in two keys
MyISAM, you now can have an AUTO_INCREMENT column as a key
sub part:
CREATE TABLE foo (a INT NOT NULL AUTO_INCREMENT, b CHAR(5), PRIMARY KEY (b,a))
MyISAM with packed char keys that could be NULL.
AS on field name with CREATE TABLE table_name SELECT ... didn't
work.
NATIONAL and NCHAR when defining character columns.
This is the same as not using BINARY.
NULL columns in a PRIMARY KEY (only in UNIQUE
keys).
LAST_INSERT_ID() if one uses this in ODBC:
WHERE auto_increment_column IS NULL. This seems to fix some problems
with Access.
SET SQL_AUTO_IS_NULL=0|1 now turns on/off the handling of
searching after the last inserted row with WHERE
auto_increment_column IS NULL.
concurrency to mysqld for Solaris.
--relative option to mysqladmin to make
extended-status more useful to monitor changes.
COUNT(DISTINCT ...) on an empty table.
LOAD DATA INFILE and BLOB columns.
~ (negation).
UDF functions.
DATETIME into a TIME column no longer will
try to store 'days' in it.
SUM().)
LIKE "%" on an index that may have NULL values.
REVOKE ALL PRIVILEGES didn't revoke all privileges.
GRANT option for a database, he couldn't grant
privileges to other users.
SHOW GRANTS FOR user (by Sinisa).
date_add syntax: date/datetime + INTERVAL # interval_type.
By Joshua Chamas.
LOAD DATA REPLACE.
REGEXP is now case-insensitive if you use non-binary strings.
MyISAM.
ASC is now the default again for ORDER BY.
LIMIT to UPDATE.
mysql_change_user() function to the MySQL C API.
SHOW VARIABLES.
--[whitespace] comments.
INSERT into tbl_name VALUES (), that is, you may now specify
an empty value list to insert a row in which each column is set to its
default value.
SUBSTRING(text FROM pos) to conform to SQL-99. (Before this
construct returned the rightmost pos characters.)
SUM() with GROUP BY returned 0 on some systems.
SHOW TABLE STATUS.
DELAY_KEY_WRITE option to CREATE TABLE.
AUTO_INCREMENT on any key part.
YEAR(NOW()) and YEAR(CURDATE()).
CASE construct.
COALESCE().
SELECT * FROM table_name WHERE
key_part1 >= const AND (key_part2 = const OR key_part2 = const). The
bug was that some rows could be duplicated in the result.
myisamchk without -a updated the index
distribution incorrectly.
SET SQL_LOW_PRIORITY_UPDATES=1 was causing a parse error.
WHERE clause.
UPDATE tbl_name SET KEY=KEY+1 WHERE KEY > 100
'1999-01-00'.
SELECT ... WHERE key_part1=const1 AND
key_part_2=const2 AND key_part1=const4 AND key_part2=const4; indextype
should be range instead of ref.
egcs 1.1.2 optimiser bug (when using BLOB values) on Linux Alpha.
LOCK TABLES combined with DELETE FROM table.
MyISAM tables now allow keys on NULL and BLOB/TEXT columns.
SELECT ... FROM t1 LEFT JOIN t2 ON ... WHERE t2.not_null_column IS NULL.
ORDER BY and GROUP BY can be done on functions.
ORDER BY RAND().
WHERE key_column = function.
WHERE key_column = col_name even if
the columns are not identically packed.
WHERE col_name IS NULL.
MyISAM tables)
HEAP temporary tables to MyISAM tables
in case of "table is full" errors.
--init-file=file_name option to mysqld.
COUNT(DISTINCT value, [value, ...]).
CREATE TEMPORARY TABLE now creates a temporary table, in its own
namespace, that is automatically deleted if connection is dropped.
CASE): CASE, THEN, WHEN, ELSE and END.
EXPORT_SET() and MD5().
MyISAM) with a lot of new features.
See section MyISAM.
HEAP tables which are extremely fast for
lookups.
LOAD_FILE(filename) to get the contents of a file as a
string value.
<=> which will act as = but will return TRUE
if both arguments are NULL. This is useful for comparing changes
between tables.
EXTRACT(interval FROM datetime) function.
FLOAT(X) are not rounded on storage and may be
in scientific notation (1.0 E+10) when retrieved.
REPLACE is now faster than before.
LIKE character comparison to behave as =;
This means that 'e' LIKE 'é' is now true. (If the line doesn't
display correctly, the latter 'e' is a French 'e' with a dot above.)
SHOW TABLE STATUS returns a lot of information about the tables.
LIKE to the SHOW STATUS command.
Privileges column to SHOW COLUMNS.
Packed and Comment columns to SHOW INDEX.
CREATE TABLE ... COMMENT "xxx").
UNIQUE, as in
CREATE TABLE table_name (col INT not null UNIQUE)
CREATE TABLE table_name SELECT ...
CREATE TABLE IF NOT EXISTS ...
CHAR(0) columns.
DATE_FORMAT() now requires `%' before any format character.
DELAYED is now a reserved word (sorry about that :( ).
analyse, file: `sql_analyse.c'.
This will describe the data in your query. Try the following:
SELECT ... FROM ... WHERE ... PROCEDURE ANALYSE([max elements,[max memory]]) |
This procedure is extremely useful when you want to check the data in your table!
BINARY cast to force a string to be compared in case-sensitive fashion.
--skip-show-database option to mysqld.
UPDATE now also works
with BLOB/TEXT columns.
INNER join syntax. NOTE: This made INNER
a reserved word!
IP/NETMASK syntax.
NOT NULL DATE/DATETIME column with IS
NULL, this is changed to a compare against 0 to satisfy some ODBC
applications. (By shreeve@uci.edu.)
NULL IN (...) now returns NULL instead of 0. This will
ensure that null_column NOT IN (...) doesn't match
NULL values.
TIME columns.
TIME strings to be more strict. Now the
fractional second part is detected (and currently skipped). The
following formats are supported:
DATETIME.
LOW_PRIORITY attribute to LOAD DATA INFILE.
LOAD DATA INFILE.
DECIMAL(x,y) now works according to SQL-99.
LAST_INSERT_ID() is now updated for INSERT INTO ... SELECT.
SELECT DISTINCT is much faster; it uses the new UNIQUE
functionality in MyISAM. One difference compared to MySQL Version 3.22
is that the output of DISTINCT is no longer sorted.
mysql_num_fields() on
a MYSQL object, you must use mysql_field_count() instead.
LIBWRAP; patch by Henning P. Schmiedehausen.
AUTO_INCREMENT for other than numerical columns.
AUTO_INCREMENT will now automatically make the column
NOT NULL.
NULL as the default value for AUTO_INCREMENT columns.
SQL_BIG_RESULT; SQL_SMALL_RESULT is now default.
--enable-large-files and --disable-large-files switches
to configure. See `configure.in' for some systems where this is
automatically turned off because of broken implementations.
readline to 4.0.
CREATE TABLE options: PACK_KEYS and CHECKSUM.
--default-table-type option to mysqld.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] |
Hosting by: Hurra Communications Ltd.
Generated: 2007-01-26 17:58:44