MySQL Server includes some extensions that you probably will not find in
other SQL databases. Be warned that if you use them, your code will not be
portable to other SQL servers. In some cases, you can write code that
includes MySQL extensions, but is still portable, by using comments
of the form /*! ... */
. In this case, MySQL Server will parse and
execute the code within the comment as it would any other MySQL
statement, but other SQL servers will ignore the extensions. For example:
SELECT /*! STRAIGHT_JOIN */ col_name FROM table1,table2 WHERE ...
If you add a version number after the '!'
, the syntax will be
executed only if the MySQL version is equal to or newer than the used
version number:
CREATE /*!32302 TEMPORARY */ TABLE t (a INT);
This means that if you have Version 3.23.02 or newer, MySQL
Server will use the TEMPORARY
keyword.
The following is a list of MySQL extensions:
MEDIUMINT
, SET
, ENUM
, and the
different BLOB
and TEXT
types.
AUTO_INCREMENT
, BINARY
, NULL
,
UNSIGNED
, and ZEROFILL
.
BINARY
attribute or use the BINARY
cast, which causes
comparisons to be done according to the ASCII order used on the
MySQL server host.
db_name.tbl_name
syntax. Some SQL servers provide
the same functionality but call this User space
.
MySQL Server doesn't support tablespaces as in:
create table ralph.my_table...IN my_tablespace
.
LIKE
is allowed on numeric columns.
INTO OUTFILE
and STRAIGHT_JOIN
in a SELECT
statement. See section 6.4.1 SELECT
Syntax.
SQL_SMALL_RESULT
option in a SELECT
statement.
EXPLAIN SELECT
to get a description of how tables are joined.
INDEX
or KEY
in a CREATE TABLE
statement. See section 6.5.3 CREATE TABLE
Syntax.
TEMPORARY
or IF NOT EXISTS
with CREATE TABLE
.
COUNT(DISTINCT list)
where list
has more than one element.
CHANGE col_name
, DROP col_name
, or DROP
INDEX
, IGNORE
or RENAME
in an ALTER TABLE
statement. See section 6.5.4 ALTER TABLE
Syntax.
RENAME TABLE
. See section 6.5.5 RENAME TABLE
Syntax.
ADD
, ALTER
, DROP
, or CHANGE
clauses in an ALTER TABLE
statement.
DROP TABLE
with the keywords IF EXISTS
.
DROP TABLE
statement.
ORDER BY
and LIMIT
clauses of the UPDATE
and
DELETE
statements.
DELAYED
clause of the INSERT
and REPLACE
statements.
LOW_PRIORITY
clause of the INSERT
, REPLACE
,
DELETE
, and UPDATE
statements.
LOAD DATA INFILE
. In many cases, this syntax is compatible with
Oracle's LOAD DATA INFILE
. See section 6.4.9 LOAD DATA INFILE
Syntax.
ANALYZE TABLE
, CHECK TABLE
, OPTIMIZE TABLE
, and
REPAIR TABLE
statements.
SHOW
statement.
See section 4.5.7 SHOW
Syntax.
SET
statement. See section 5.5.6 SET
Syntax.
GROUP BY
part.
This gives better performance for some very specific, but quite normal
queries.
See section 6.3.7 Functions and Modifiers for Use with GROUP BY
Clauses.
ASC
and DESC
with GROUP BY
.
||
and &&
operators to mean
logical OR and AND, as in the C programming language. In MySQL Server,
||
and OR
are synonyms, as are &&
and AND
.
Because of this nice syntax, MySQL Server doesn't support
the standard SQL-99 ||
operator for string concatenation; use
CONCAT()
instead. Because CONCAT()
takes any number
of arguments, it's easy to convert use of the ||
operator to
MySQL Server.
CREATE DATABASE
or DROP DATABASE
.
See section 6.5.1 CREATE DATABASE
Syntax.
%
operator is a synonym for MOD()
. That is,
N % M
is equivalent to MOD(N,M)
. %
is supported
for C programmers and for compatibility with PostgreSQL.
=
, <>
, <=
,<
, >=
,>
,
<<
, >>
, <=>
, AND
, OR
, or LIKE
operators may be used in column comparisons to the left of the
FROM
in SELECT
statements. For example:
mysql> SELECT col1=1 AND col2=2 FROM tbl_name;
LAST_INSERT_ID()
function.
See section 9.1.3.31 mysql_insert_id()
.
REGEXP
and NOT REGEXP
extended regular expression
operators.
CONCAT()
or CHAR()
with one argument or more than two
arguments. (In MySQL Server, these functions can take any number of
arguments.)
BIT_COUNT()
, CASE
, ELT()
,
FROM_DAYS()
, FORMAT()
, IF()
, PASSWORD()
,
ENCRYPT()
, MD5()
, ENCODE()
, DECODE()
,
PERIOD_ADD()
, PERIOD_DIFF()
, TO_DAYS()
, or
WEEKDAY()
functions.
TRIM()
to trim substrings. SQL-99 supports removal
of single characters only.
GROUP BY
functions STD()
, BIT_OR()
,
BIT_AND()
, and GROUP_CONCAT()
.
See section 6.3.7 Functions and Modifiers for Use with GROUP BY
Clauses.
REPLACE
instead of DELETE
+ INSERT
.
See section 6.4.8 REPLACE
Syntax.
FLUSH
, RESET
and DO
statements.
:=
:
SELECT @a:=SUM(total),@b=COUNT(*),@a/@b AS avg FROM test_table; SELECT @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;