manual.txt
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:1762k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. The first of these statements looks for an exact match.  The second
  2. looks for values containing the first set member.
  3. If you want to get all possible values for a `SET' column, you should
  4. use: `SHOW COLUMNS FROM table_name LIKE set_column_name' and parse the
  5. `SET' definition in the second column.
  6. Choosing the Right Type for a Column
  7. ------------------------------------
  8. For the most efficient use of storage, try to use the most precise type
  9. in all cases. For example, if an integer column will be used for values
  10. in the range between `1' and `99999', `MEDIUMINT UNSIGNED' is the best
  11. type.
  12. Accurate representation of monetary values is a common problem. In
  13. *MySQL*, you should use the `DECIMAL' type. This is stored as a string,
  14. so no loss of accuracy should occur. If accuracy is not too important,
  15. the `DOUBLE' type may also be good enough.
  16. For high precision, you can always convert to a fixed-point type stored
  17. in a `BIGINT'. This allows you to do all calculations with integers and
  18. convert results back to floating-point values only when necessary.
  19. Column Indexes
  20. --------------
  21. All *MySQL* column types can be indexed.  Use of indexes on the
  22. relevant columns is the best way to improve the performance of `SELECT'
  23. operations.
  24. The maximum number of keys and the maximum index length is defined per
  25. table handler. *Note Table types::. You can with all table handlers have
  26. at least 16 keys and a total index length of at least 256 bytes.
  27. For `CHAR' and `VARCHAR' columns, you can index a prefix of a column.
  28. This is much faster and requires less disk space than indexing the
  29. whole column.  The syntax to use in the `CREATE TABLE' statement to
  30. index a column prefix looks like this:
  31.      KEY index_name (col_name(length))
  32. The example below creates an index for the first 10 characters of the
  33. `name' column:
  34.      mysql> CREATE TABLE test (
  35.                 name CHAR(200) NOT NULL,
  36.                 KEY index_name (name(10)));
  37. For `BLOB' and `TEXT' columns, you must index a prefix of the column.
  38. You cannot index the entire column.
  39. In *MySQL* Version 3.23.23 or later, you can also create special
  40. *FULLTEXT* indexes. They are used for full-text search. Only the
  41. `MyISAM' table type supports `FULLTEXT' indexes. They can be created
  42. only from `VARCHAR' and `TEXT' columns.  Indexing always happens over
  43. the entire column and partial indexing is not supported. See *Note
  44. MySQL full-text search:: for details.
  45. Multiple-column Indexes
  46. -----------------------
  47. *MySQL* can create indexes on multiple columns.  An index may consist
  48. of up to 15 columns. (On `CHAR' and `VARCHAR' columns you can also use
  49. a prefix of the column as a part of an index).
  50. A multiple-column index can be considered a sorted array containing
  51. values that are created by concatenating the values of the indexed
  52. columns.
  53. *MySQL* uses multiple-column indexes in such a way that queries are
  54. fast when you specify a known quantity for the first column of the
  55. index in a `WHERE' clause, even if you don't specify values for the
  56. other columns.
  57. Suppose a table is created using the following specification:
  58.      mysql> CREATE TABLE test (
  59.                 id INT NOT NULL,
  60.                 last_name CHAR(30) NOT NULL,
  61.                 first_name CHAR(30) NOT NULL,
  62.                 PRIMARY KEY (id),
  63.                 INDEX name (last_name,first_name));
  64. Then the index `name' is an index over `last_name' and `first_name'.
  65. The index will be used for queries that specify values in a known range
  66. for `last_name', or for both `last_name' and `first_name'.  Therefore,
  67. the `name' index will be used in the following queries:
  68.      mysql> SELECT * FROM test WHERE last_name="Widenius";
  69.      
  70.      mysql> SELECT * FROM test WHERE last_name="Widenius"
  71.                                AND first_name="Michael";
  72.      
  73.      mysql> SELECT * FROM test WHERE last_name="Widenius"
  74.                                AND (first_name="Michael" OR first_name="Monty");
  75.      
  76.      mysql> SELECT * FROM test WHERE last_name="Widenius"
  77.                                AND first_name >="M" AND first_name < "N";
  78. However, the `name' index will NOT be used in the following queries:
  79.      mysql> SELECT * FROM test WHERE first_name="Michael";
  80.      
  81.      mysql> SELECT * FROM test WHERE last_name="Widenius"
  82.                                OR first_name="Michael";
  83. For more information on the manner in which *MySQL* uses indexes to
  84. improve query performance, see *Note *MySQL* indexes: MySQL indexes.
  85. Using Column Types from Other Database Engines
  86. ----------------------------------------------
  87. To make it easier to use code written for SQL implementations from other
  88. vendors, *MySQL* maps column types as shown in the table below.  These
  89. mappings make it easier to move table definitions from other database
  90. engines to *MySQL*:
  91. *Other vendor type*           *MySQL type*
  92. `BINARY(NUM)'                 `CHAR(NUM) BINARY'
  93. `CHAR VARYING(NUM)'           `VARCHAR(NUM)'
  94. `FLOAT4'                      `FLOAT'
  95. `FLOAT8'                      `DOUBLE'
  96. `INT1'                        `TINYINT'
  97. `INT2'                        `SMALLINT'
  98. `INT3'                        `MEDIUMINT'
  99. `INT4'                        `INT'
  100. `INT8'                        `BIGINT'
  101. `LONG VARBINARY'              `MEDIUMBLOB'
  102. `LONG VARCHAR'                `MEDIUMTEXT'
  103. `MIDDLEINT'                   `MEDIUMINT'
  104. `VARBINARY(NUM)'              `VARCHAR(NUM) BINARY'
  105. Column type mapping occurs at table creation time.  If you create a
  106. table with types used by other vendors and then issue a `DESCRIBE
  107. tbl_name' statement, *MySQL* reports the table structure using the
  108. equivalent *MySQL* types.
  109. Functions for Use in `SELECT' and `WHERE' Clauses
  110. =================================================
  111. A `select_expression' or `where_definition' in a SQL statement can
  112. consist of any expression using the functions described below.
  113. An expression that contains `NULL' always produces a `NULL' value
  114. unless otherwise indicated in the documentation for the operators and
  115. functions involved in the expression.
  116. *NOTE:* There must be no whitespace between a function name and the
  117. parenthesis following it. This helps the *MySQL* parser distinguish
  118. between function calls and references to tables or columns that happen
  119. to have the same name as a function.  Spaces around arguments are
  120. permitted, though.
  121. You can force *MySQL* to accept spaces after the function name by
  122. starting `mysqld' with `--ansi' or using the `CLIENT_IGNORE_SPACE' to
  123. `mysql_connect()', but in this case all function names will become
  124. reserved words. *Note ANSI mode::.
  125. For the sake of brevity, examples display the output from the `mysql'
  126. program in abbreviated form.  So this:
  127.      mysql> select MOD(29,9);
  128.      1 rows in set (0.00 sec)
  129.      
  130.      +-----------+
  131.      | mod(29,9) |
  132.      +-----------+
  133.      |         2 |
  134.      +-----------+
  135. is displayed like this:
  136.      mysql> select MOD(29,9);
  137.              -> 2
  138. Grouping Functions
  139. ------------------
  140. `( ... )'
  141.      Parentheses. Use these to force the order of evaluation in an
  142.      expression:
  143.           mysql> select 1+2*3;
  144.                   -> 7
  145.           mysql> select (1+2)*3;
  146.                   -> 9
  147. Normal Arithmetic Operations
  148. ----------------------------
  149. The usual arithmetic operators are available. Note that in the case of
  150. `-', `+', and `*', the result is calculated with `BIGINT' (64-bit)
  151. precision if both arguments are integers!
  152. `+'
  153.      Addition:
  154.           mysql> select 3+5;
  155.                   -> 8
  156. `-'
  157.      Subtraction:
  158.           mysql> select 3-5;
  159.                   -> -2
  160. `*'
  161.      Multiplication:
  162.           mysql> select 3*5;
  163.                   -> 15
  164.           mysql> select 18014398509481984*18014398509481984.0;
  165.                   -> 324518553658426726783156020576256.0
  166.           mysql> select 18014398509481984*18014398509481984;
  167.                   -> 0
  168.      The result of the last expression is incorrect because the result
  169.      of the integer multiplication exceeds the 64-bit range of `BIGINT'
  170.      calculations.
  171. `/'
  172.      Division:
  173.           mysql> select 3/5;
  174.                   -> 0.60
  175.      Division by zero produces a `NULL' result:
  176.           mysql> select 102/(1-1);
  177.                   -> NULL
  178.      A division will be calculated with `BIGINT' arithmetic only if
  179.      performed in a context where its result is converted to an integer!
  180. Bit Functions
  181. -------------
  182. *MySQL* uses `BIGINT' (64-bit) arithmetic for bit operations, so these
  183. operators have a maximum range of 64 bits.
  184. `|'
  185.      Bitwise OR:
  186.           mysql> select 29 | 15;
  187.                   -> 31
  188. `&'
  189.      Bitwise AND:
  190.           mysql> select 29 & 15;
  191.                   -> 13
  192. `<<'
  193.      Shifts a longlong (`BIGINT') number to the left:
  194.           mysql> select 1 << 2
  195.                   -> 4
  196. `>>'
  197.      Shifts a longlong (`BIGINT') number to the right:
  198.           mysql> select 4 >> 2
  199.                   -> 1
  200. `~'
  201.      Invert all bits:
  202.           mysql> select 5 & ~1
  203.                   -> 4
  204. `BIT_COUNT(N)'
  205.      Returns the number of bits that are set in the argument `N':
  206.           mysql> select BIT_COUNT(29);
  207.                   -> 4
  208. Logical Operations
  209. ------------------
  210. All logical functions return `1' (TRUE), `0' (FALSE) or `NULL'
  211. (unknown, which is in most cases the same as FALSE):
  212. `NOT'
  213. `!'
  214.      Logical NOT. Returns `1' if the argument is `0', otherwise returns
  215.      `0'.  Exception: `NOT NULL' returns `NULL':
  216.           mysql> select NOT 1;
  217.                   -> 0
  218.           mysql> select NOT NULL;
  219.                   -> NULL
  220.           mysql> select ! (1+1);
  221.                   -> 0
  222.           mysql> select ! 1+1;
  223.                   -> 1
  224.      The last example returns `1' because the expression evaluates the
  225.      same way as `(!1)+1'.
  226. `OR'
  227. `||'
  228.      Logical OR. Returns `1' if either argument is not `0' and not
  229.      `NULL':
  230.           mysql> select 1 || 0;
  231.                   -> 1
  232.           mysql> select 0 || 0;
  233.                   -> 0
  234.           mysql> select 1 || NULL;
  235.                   -> 1
  236. `AND'
  237. `&&'
  238.      Logical AND. Returns `0' if either argument is `0' or `NULL',
  239.      otherwise returns `1':
  240.           mysql> select 1 && NULL;
  241.                   -> 0
  242.           mysql> select 1 && 0;
  243.                   -> 0
  244. Comparison Operators
  245. --------------------
  246. Comparison operations result in a value of `1' (TRUE), `0' (FALSE), or
  247. `NULL'. These functions work for both numbers and strings.  Strings are
  248. automatically converted to numbers and numbers to strings as needed (as
  249. in Perl).
  250. *MySQL* performs comparisons using the following rules:
  251.    * If one or both arguments are `NULL', the result of the comparison
  252.      is `NULL', except for the `<=>' operator.
  253.    * If both arguments in a comparison operation are strings, they are
  254.      compared as strings.
  255.    * If both arguments are integers, they are compared as integers.
  256.    * Hexadecimal values are treated as binary strings if not compared
  257.      to a number.
  258.    * If one of the arguments is a `TIMESTAMP' or `DATETIME' column and
  259.      the other argument is a constant, the constant is converted to a
  260.      timestamp before the comparison is performed. This is done to be
  261.      more ODBC-friendly.
  262.    * In all other cases, the arguments are compared as floating-point
  263.      (real) numbers.
  264. By default, string comparisons are done in case-independent fashion
  265. using the current character set (ISO-8859-1 Latin1 by default, which
  266. also works excellently for English).
  267. The examples below illustrate conversion of strings to numbers for
  268. comparison operations:
  269.      mysql> SELECT 1 > '6x';
  270.               -> 0
  271.      mysql> SELECT 7 > '6x';
  272.               -> 1
  273.      mysql> SELECT 0 > 'x6';
  274.               -> 0
  275.      mysql> SELECT 0 = 'x6';
  276.               -> 1
  277. `='
  278.      Equal:
  279.           mysql> select 1 = 0;
  280.                   -> 0
  281.           mysql> select '0' = 0;
  282.                   -> 1
  283.           mysql> select '0.0' = 0;
  284.                   -> 1
  285.           mysql> select '0.01' = 0;
  286.                   -> 0
  287.           mysql> select '.01' = 0.01;
  288.                   -> 1
  289. `<>'
  290. `!='
  291.      Not equal:
  292.           mysql> select '.01' <> '0.01';
  293.                   -> 1
  294.           mysql> select .01 <> '0.01';
  295.                   -> 0
  296.           mysql> select 'zapp' <> 'zappp';
  297.                   -> 1
  298. `<='
  299.      Less than or equal:
  300.           mysql> select 0.1 <= 2;
  301.                   -> 1
  302. `<'
  303.      Less than:
  304.           mysql> select 2 <= 2;
  305.                   -> 1
  306. `>='
  307.      Greater than or equal:
  308.           mysql> select 2 >= 2;
  309.                   -> 1
  310. `>'
  311.      Greater than:
  312.           mysql> select 2 > 2;
  313.                   -> 0
  314. `<=>'
  315.      Null safe equal:
  316.           mysql> select 1 <=> 1, NULL <=> NULL, 1 <=> NULL;
  317.                   -> 1 1 0
  318. `IS NULL'
  319. `IS NOT NULL'
  320.      Test whether or not a value is or is not `NULL':
  321.           mysql> select 1 IS NULL, 0 IS NULL, NULL IS NULL:
  322.                   -> 0 0 1
  323.           mysql> select 1 IS NOT NULL, 0 IS NOT NULL, NULL IS NOT NULL;
  324.                   -> 1 1 0
  325. `expr BETWEEN min AND max'
  326.      If `expr' is greater than or equal to `min' and `expr' is less
  327.      than or equal to `max', `BETWEEN' returns `1', otherwise it
  328.      returns `0'.  This is equivalent to the expression `(min <= expr
  329.      AND expr <= max)' if all the arguments are of the same type.  The
  330.      first argument (`expr') determines how the comparison is performed
  331.      as follows:
  332.         * If `expr' is a `TIMESTAMP', `DATE', or `DATETIME' column,
  333.           `MIN()' and `MAX()' are formatted to the same format if they
  334.           are constants.
  335.         * If `expr' is a case-insensitive string expression, a
  336.           case-insensitive string comparison is done.
  337.         * If `expr' is a case-sensitive string expression, a
  338.           case-sensitive string comparison is done.
  339.         * If `expr' is an integer expression, an integer comparison is
  340.           done.
  341.         * Otherwise, a floating-point (real) comparison is done.
  342.           mysql> select 1 BETWEEN 2 AND 3;
  343.                   -> 0
  344.           mysql> select 'b' BETWEEN 'a' AND 'c';
  345.                   -> 1
  346.           mysql> select 2 BETWEEN 2 AND '3';
  347.                   -> 1
  348.           mysql> select 2 BETWEEN 2 AND 'x-3';
  349.                   -> 0
  350. `expr IN (value,...)'
  351.      Returns `1' if `expr' is any of the values in the `IN' list, else
  352.      returns `0'.  If all values are constants, then all values are
  353.      evaluated according to the type of `expr' and sorted. The search
  354.      for the item is then done using a binary search. This means `IN'
  355.      is very quick if the `IN' value list consists entirely of
  356.      constants.  If `expr' is a case-sensitive string expression, the
  357.      string comparison is performed in case-sensitive fashion:
  358.           mysql> select 2 IN (0,3,5,'wefwf');
  359.                   -> 0
  360.           mysql> select 'wefwf' IN (0,3,5,'wefwf');
  361.                   -> 1
  362. `expr NOT IN (value,...)'
  363.      Same as `NOT (expr IN (value,...))'.
  364. `ISNULL(expr)'
  365.      If `expr' is `NULL', `ISNULL()' returns `1', otherwise it returns
  366.      `0':
  367.           mysql> select ISNULL(1+1);
  368.                   -> 0
  369.           mysql> select ISNULL(1/0);
  370.                   -> 1
  371.      Note that a comparison of `NULL' values using `=' will always be
  372.      false!
  373. `COALESCE(list)'
  374.      Returns first non-`NULL' element in list:
  375.           mysql> select COALESCE(NULL,1);
  376.                   -> 1
  377.           mysql> select COALESCE(NULL,NULL,NULL);
  378.                   -> NULL
  379. `INTERVAL(N,N1,N2,N3,...)'
  380.      Returns `0' if `N' < `N1', `1' if `N' < `N2' and so on. All
  381.      arguments are treated as integers.  It is required that `N1' <
  382.      `N2' < `N3' < `...' < `Nn' for this function to work correctly.
  383.      This is because a binary search is used (very fast):
  384.           mysql> select INTERVAL(23, 1, 15, 17, 30, 44, 200);
  385.                   -> 3
  386.           mysql> select INTERVAL(10, 1, 10, 100, 1000);
  387.                   -> 2
  388.           mysql> select INTERVAL(22, 23, 30, 44, 200);
  389.                   -> 0
  390. String Comparison Functions
  391. ---------------------------
  392. Normally, if any expression in a string comparison is case sensitive,
  393. the comparison is performed in case-sensitive fashion.
  394. `expr LIKE pat [ESCAPE 'escape-char']'
  395.      Pattern matching using SQL simple regular expression comparison.
  396.      Returns `1' (TRUE) or `0' (FALSE).  With `LIKE' you can use the
  397.      following two wild-card characters in the pattern:
  398.      `%'     Matches any number of characters, even zero characters
  399.      `_'     Matches exactly one character
  400.           mysql> select 'David!' LIKE 'David_';
  401.                   -> 1
  402.           mysql> select 'David!' LIKE '%D%v%';
  403.                   -> 1
  404.      To test for literal instances of a wild-card character, precede
  405.      the character with the escape character.  If you don't specify the
  406.      `ESCAPE' character, `' is assumed:
  407.      `%'    Matches one `%' character
  408.      `_'    Matches one `_' character
  409.           mysql> select 'David!' LIKE 'David_';
  410.                   -> 0
  411.           mysql> select 'David_' LIKE 'David_';
  412.                   -> 1
  413.      To specify a different escape character, use the `ESCAPE' clause:
  414.           mysql> select 'David_' LIKE 'David|_' ESCAPE '|';
  415.                   -> 1
  416.      `LIKE' is allowed on numeric expressions! (This is a *MySQL*
  417.      extension to the ANSI SQL `LIKE'.)
  418.           mysql> select 10 LIKE '1%';
  419.                   -> 1
  420.      Note: Because *MySQL* uses the C escape syntax in strings (for
  421.      example, `n'), you must double any `' that you use in your `LIKE'
  422.      strings.  For example, to search for `n', specify it as `\n'.  To
  423.      search for `', specify it as `\\' (the backslashes are stripped
  424.      once by the parser and another time when the pattern match is
  425.      done, leaving a single backslash to be matched).
  426. `expr NOT LIKE pat [ESCAPE 'escape-char']'
  427.      Same as `NOT (expr LIKE pat [ESCAPE 'escape-char'])'.
  428. `expr REGEXP pat'
  429. `expr RLIKE pat'
  430.      Performs a pattern match of a string expression `expr' against a
  431.      pattern `pat'.  The pattern can be an extended regular expression.
  432.      *Note Regexp::.  Returns `1' if `expr' matches `pat', otherwise
  433.      returns `0'.  `RLIKE' is a synonym for `REGEXP', provided for
  434.      `mSQL' compatibility. Note: Because *MySQL* uses the C escape
  435.      syntax in strings (for example, `n'), you must double any `' that
  436.      you use in your `REGEXP' strings.  As of *MySQL* Version 3.23.4,
  437.      `REGEXP' is case insensitive for normal (not binary) strings:
  438.           mysql> select 'Monty!' REGEXP 'm%y%%';
  439.                   -> 0
  440.           mysql> select 'Monty!' REGEXP '.*';
  441.                   -> 1
  442.           mysql> select 'new*n*line' REGEXP 'new\*.\*line';
  443.                   -> 1
  444.           mysql> select "a" REGEXP "A", "a" REGEXP BINARY "A";
  445.                   -> 1  0
  446.           mysql> select "a" REGEXP "^[a-d]";
  447.                   -> 1
  448. `'
  449.      `REGEXP' and `RLIKE' use the current character set (ISO-8859-1
  450.      Latin1 by default) when deciding the type of a character.
  451. `expr NOT REGEXP pat'
  452. `expr NOT RLIKE pat'
  453.      Same as `NOT (expr REGEXP pat)'.
  454. `STRCMP(expr1,expr2)'
  455.      `STRCMP()' returns `0' if the strings are the same, `-1' if the
  456.      first argument is smaller than the second according to the current
  457.      sort order, and `1' otherwise:
  458.           mysql> select STRCMP('text', 'text2');
  459.                   -> -1
  460.           mysql> select STRCMP('text2', 'text');
  461.                   -> 1
  462.           mysql> select STRCMP('text', 'text');
  463.                   -> 0
  464. `MATCH (col1,col2,...) AGAINST (expr)'
  465.      `MATCH ... AGAINST()' is used for full-text search and returns
  466.      relevance - similarity measure between the text in columns
  467.      `(col1,col2,...)' and the query `expr'. Relevance is a positive
  468.      floating-point number. Zero relevance means no similarity.  For
  469.      `MATCH ... AGAINST()' to work, a *FULLTEXT* index must be created
  470.      first. *Note `CREATE TABLE': CREATE TABLE.  `MATCH ... AGAINST()'
  471.      is available in *MySQL* Version 3.23.23 or later. For details and
  472.      usage examples *note MySQL full-text search::.
  473. Cast Operators
  474. --------------
  475. ``BINARY''
  476.      The `BINARY' operator casts the string following it to a binary
  477.      string.  This is an easy way to force a column comparison to be
  478.      case sensitive even if the column isn't defined as `BINARY' or
  479.      `BLOB':
  480.           mysql> select "a" = "A";
  481.                   -> 1
  482.           mysql> select BINARY "a" = "A";
  483.                   -> 0
  484.      `BINARY' was introduced in *MySQL* Version 3.23.0.
  485.      Note that in some context *MySQL* will not be able to use the
  486.      index efficiently when you cast an indexed column to `BINARY'.
  487. If you want to compare a blob case-insensitively you can always convert
  488. the blob to upper case before doing the comparison:
  489.      SELECT 'A' LIKE UPPER(blob_col) FROM table_name;
  490. We plan to soon introduce casting between different character sets to
  491. make string comparison even more flexible.
  492. Control Flow Functions
  493. ----------------------
  494. `IFNULL(expr1,expr2)'
  495.      If `expr1' is not `NULL', `IFNULL()' returns `expr1', else it
  496.      returns `expr2'.  `IFNULL()' returns a numeric or string value,
  497.      depending on the context in which it is used:
  498.           mysql> select IFNULL(1,0);
  499.                   -> 1
  500.           mysql> select IFNULL(NULL,10);
  501.                   -> 10
  502.           mysql> select IFNULL(1/0,10);
  503.                   -> 10
  504.           mysql> select IFNULL(1/0,'yes');
  505.                   -> 'yes'
  506. `NULLIF(expr1,expr2)'
  507.      If `expr1 = expr2' is true, return `NULL' else return `expr1'.
  508.      This is the same as `CASE WHEN x = y THEN NULL ELSE x END':
  509.           mysql> select NULLIF(1,1);
  510.                   -> NULL
  511.           mysql> select NULLIF(1,2);
  512.                   -> 1
  513.      Note that `expr1' is evaluated twice in *MySQL* if the arguments
  514.      are equal.
  515. `IF(expr1,expr2,expr3)'
  516.      If `expr1' is TRUE (`expr1 <> 0' and `expr1 <> NULL') then `IF()'
  517.      returns `expr2', else it returns `expr3'.  `IF()' returns a
  518.      numeric or string value, depending on the context in which it is
  519.      used:
  520.           mysql> select IF(1>2,2,3);
  521.                   -> 3
  522.           mysql> select IF(1<2,'yes','no');
  523.                   -> 'yes'
  524.           mysql> select IF(strcmp('test','test1'),'no','yes');
  525.                   -> 'no'
  526.      `expr1' is evaluated as an integer value, which means that if you
  527.      are testing floating-point or string values, you should do so
  528.      using a comparison operation:
  529.           mysql> select IF(0.1,1,0);
  530.                   -> 0
  531.           mysql> select IF(0.1<>0,1,0);
  532.                   -> 1
  533.      In the first case above, `IF(0.1)' returns `0' because `0.1' is
  534.      converted to an integer value, resulting in a test of `IF(0)'.
  535.      This may not be what you expect.  In the second case, the
  536.      comparison tests the original floating-point value to see whether
  537.      it is non-zero.  The result of the comparison is used as an
  538.      integer.
  539.      The default return type of `IF()' (which may matter when it is
  540.      stored into a temporary table) is calculated in *MySQL* Version
  541.      3.23 as follows:
  542.      *Expression*                          *Return value*
  543.      expr2 or expr3 returns string         string
  544.      expr2 or expr3 returns a              floating-point
  545.      floating-point value                  
  546.      expr2 or expr3 returns an integer     integer
  547. `CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result ...] [ELSE result] END'
  548. `CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END'
  549.      The first version returns the `result' where
  550.      `value=compare-value'. The second version returns the result for
  551.      the first condition, which is true. If there was no matching result
  552.      value, then the result after `ELSE' is returned. If there is no
  553.      `ELSE' part then `NULL' is returned:
  554.           mysql> SELECT CASE 1 WHEN 1 THEN "one" WHEN 2 THEN "two" ELSE "more" END;
  555.                  -> "one"
  556.           mysql> SELECT CASE WHEN 1>0 THEN "true" ELSE "false" END;
  557.                  -> "true"
  558.           mysql> SELECT CASE BINARY "B" when "a" then 1 when "b" then 2 END;
  559.                  -> NULL
  560. The type of the return value (`INTEGER', `DOUBLE' or `STRING') is the
  561. same as the type of the first returned value (the expression after the
  562. first `THEN').
  563. Mathematical Functions
  564. ----------------------
  565. All mathematical functions return `NULL' in case of an error.
  566. `-'
  567.      Unary minus. Changes the sign of the argument:
  568.           mysql> select - 2;
  569.                   -> -2
  570.      Note that if this operator is used with a `BIGINT', the return
  571.      value is a `BIGINT'!  This means that you should avoid using `-'
  572.      on integers that may have the value of `-2^63'!
  573. `ABS(X)'
  574.      Returns the absolute value of `X':
  575.           mysql> select ABS(2);
  576.                   -> 2
  577.           mysql> select ABS(-32);
  578.                   -> 32
  579.      This function is safe to use with `BIGINT' values.
  580. `SIGN(X)'
  581.      Returns the sign of the argument as `-1', `0', or `1', depending
  582.      on whether `X' is negative, zero, or positive:
  583.           mysql> select SIGN(-32);
  584.                   -> -1
  585.           mysql> select SIGN(0);
  586.                   -> 0
  587.           mysql> select SIGN(234);
  588.                   -> 1
  589. `MOD(N,M)'
  590. `%'
  591.      Modulo (like the `%' operator in C).  Returns the remainder of `N'
  592.      divided by `M':
  593.           mysql> select MOD(234, 10);
  594.                   -> 4
  595.           mysql> select 253 % 7;
  596.                   -> 1
  597.           mysql> select MOD(29,9);
  598.                   -> 2
  599.      This function is safe to use with `BIGINT' values.
  600. `FLOOR(X)'
  601.      Returns the largest integer value not greater than `X':
  602.           mysql> select FLOOR(1.23);
  603.                   -> 1
  604.           mysql> select FLOOR(-1.23);
  605.                   -> -2
  606.      Note that the return value is converted to a `BIGINT'!
  607. `CEILING(X)'
  608.      Returns the smallest integer value not less than `X':
  609.           mysql> select CEILING(1.23);
  610.                   -> 2
  611.           mysql> select CEILING(-1.23);
  612.                   -> -1
  613.      Note that the return value is converted to a `BIGINT'!
  614. `ROUND(X)'
  615.      Returns the argument `X', rounded to the nearest integer:
  616.           mysql> select ROUND(-1.23);
  617.                   -> -1
  618.           mysql> select ROUND(-1.58);
  619.                   -> -2
  620.           mysql> select ROUND(1.58);
  621.                   -> 2
  622. `ROUND(X,D)'
  623.      Returns the argument `X', rounded to a number with `D' decimals.
  624.      If `D' is `0', the result will have no decimal point or fractional
  625.      part:
  626.           mysql> select ROUND(1.298, 1);
  627.                   -> 1.3
  628.           mysql> select ROUND(1.298, 0);
  629.                   -> 1
  630. `EXP(X)'
  631.      Returns the value of `e' (the base of natural logarithms) raised to
  632.      the power of `X':
  633.           mysql> select EXP(2);
  634.                   -> 7.389056
  635.           mysql> select EXP(-2);
  636.                   -> 0.135335
  637. `LOG(X)'
  638.      Returns the natural logarithm of `X':
  639.           mysql> select LOG(2);
  640.                   -> 0.693147
  641.           mysql> select LOG(-2);
  642.                   -> NULL
  643.      If you want the log of a number `X' to some arbitary base `B', use
  644.      the formula `LOG(X)/LOG(B)'.
  645. `LOG10(X)'
  646.      Returns the base-10 logarithm of `X':
  647.           mysql> select LOG10(2);
  648.                   -> 0.301030
  649.           mysql> select LOG10(100);
  650.                   -> 2.000000
  651.           mysql> select LOG10(-100);
  652.                   -> NULL
  653. `POW(X,Y)'
  654. `POWER(X,Y)'
  655.      Returns the value of `X' raised to the power of `Y':
  656.           mysql> select POW(2,2);
  657.                   -> 4.000000
  658.           mysql> select POW(2,-2);
  659.                   -> 0.250000
  660. `SQRT(X)'
  661.      Returns the non-negative square root of `X':
  662.           mysql> select SQRT(4);
  663.                   -> 2.000000
  664.           mysql> select SQRT(20);
  665.                   -> 4.472136
  666. `PI()'
  667.      Returns the value of PI:
  668.           mysql> select PI();
  669.                   -> 3.141593
  670. `COS(X)'
  671.      Returns the cosine of `X', where `X' is given in radians:
  672.           mysql> select COS(PI());
  673.                   -> -1.000000
  674. `SIN(X)'
  675.      Returns the sine of `X', where `X' is given in radians:
  676.           mysql> select SIN(PI());
  677.                   -> 0.000000
  678. `TAN(X)'
  679.      Returns the tangent of `X', where `X' is given in radians:
  680.           mysql> select TAN(PI()+1);
  681.                   -> 1.557408
  682. `ACOS(X)'
  683.      Returns the arc cosine of `X', that is, the value whose cosine is
  684.      `X'. Returns `NULL' if `X' is not in the range `-1' to `1':
  685.           mysql> select ACOS(1);
  686.                   -> 0.000000
  687.           mysql> select ACOS(1.0001);
  688.                   -> NULL
  689.           mysql> select ACOS(0);
  690.                   -> 1.570796
  691. `ASIN(X)'
  692.      Returns the arc sine of `X', that is, the value whose sine is `X'.
  693.      Returns `NULL' if `X' is not in the range `-1' to `1':
  694.           mysql> select ASIN(0.2);
  695.                   -> 0.201358
  696.           mysql> select ASIN('foo');
  697.                   -> 0.000000
  698. `ATAN(X)'
  699.      Returns the arc tangent of `X', that is, the value whose tangent is
  700.      `X':
  701.           mysql> select ATAN(2);
  702.                   -> 1.107149
  703.           mysql> select ATAN(-2);
  704.                   -> -1.107149
  705. `ATAN2(Y,X)'
  706.      Returns the arc tangent of the two variables `X' and `Y'. It is
  707.      similar to calculating the arc tangent of `Y / X', except that the
  708.      signs of both arguments are used to determine the quadrant of the
  709.      result:
  710.           mysql> select ATAN(-2,2);
  711.                   -> -0.785398
  712.           mysql> select ATAN(PI(),0);
  713.                   -> 1.570796
  714. `COT(X)'
  715.      Returns the cotangent of `X':
  716.           mysql> select COT(12);
  717.                   -> -1.57267341
  718.           mysql> select COT(0);
  719.                   -> NULL
  720. `RAND()'
  721. `RAND(N)'
  722.      Returns a random floating-point value in the range `0' to `1.0'.
  723.      If an integer argument `N' is specified, it is used as the seed
  724.      value:
  725.           mysql> select RAND();
  726.                   -> 0.5925
  727.           mysql> select RAND(20);
  728.                   -> 0.1811
  729.           mysql> select RAND(20);
  730.                   -> 0.1811
  731.           mysql> select RAND();
  732.                   -> 0.2079
  733.           mysql> select RAND();
  734.                   -> 0.7888
  735.      You can't use a column with `RAND()' values in an `ORDER BY'
  736.      clause, because `ORDER BY' would evaluate the column multiple
  737.      times.  In *MySQL* Version 3.23, you can, however, do: `SELECT *
  738.      FROM table_name ORDER BY RAND()'
  739.      This is useful to get a random sample of a set `SELECT * FROM
  740.      table1,table2 WHERE a=b AND c<d ORDER BY RAND() LIMIT 1000'.
  741.      Note that a `RAND()' in a `WHERE' clause will be re-evaluated
  742.      every time the `WHERE' is executed.
  743. `LEAST(X,Y,...)'
  744.      With two or more arguments, returns the smallest (minimum-valued)
  745.      argument.  The arguments are compared using the following rules:
  746.         * If the return value is used in an `INTEGER' context, or all
  747.           arguments are integer-valued, they are compared as integers.
  748.         * If the return value is used in a `REAL' context, or all
  749.           arguments are real-valued, they are compared as reals.
  750.         * If any argument is a case-sensitive string, the arguments are
  751.           compared as case-sensitive strings.
  752.         * In other cases, the arguments are compared as
  753.           case-insensitive strings:
  754.           mysql> select LEAST(2,0);
  755.                   -> 0
  756.           mysql> select LEAST(34.0,3.0,5.0,767.0);
  757.                   -> 3.0
  758.           mysql> select LEAST("B","A","C");
  759.                   -> "A"
  760.      In *MySQL* versions prior to Version 3.22.5, you can use `MIN()'
  761.      instead of `LEAST'.
  762. `GREATEST(X,Y,...)'
  763.      Returns the largest (maximum-valued) argument.  The arguments are
  764.      compared using the same rules as for `LEAST':
  765.           mysql> select GREATEST(2,0);
  766.                   -> 2
  767.           mysql> select GREATEST(34.0,3.0,5.0,767.0);
  768.                   -> 767.0
  769.           mysql> select GREATEST("B","A","C");
  770.                   -> "C"
  771.      In *MySQL* versions prior to Version 3.22.5, you can use `MAX()'
  772.      instead of `GREATEST'.
  773. `DEGREES(X)'
  774.      Returns the argument `X', converted from radians to degrees:
  775.           mysql> select DEGREES(PI());
  776.                   -> 180.000000
  777. `RADIANS(X)'
  778.      Returns the argument `X', converted from degrees to radians:
  779.           mysql> select RADIANS(90);
  780.                   -> 1.570796
  781. `TRUNCATE(X,D)'
  782.      Returns the number `X', truncated to `D' decimals.  If `D' is `0',
  783.      the result will have no decimal point or fractional part:
  784.           mysql> select TRUNCATE(1.223,1);
  785.                   -> 1.2
  786.           mysql> select TRUNCATE(1.999,1);
  787.                   -> 1.9
  788.           mysql> select TRUNCATE(1.999,0);
  789.                   -> 1
  790.      Note that as decimal numbers are normally not stored as exact
  791.      numbers in computers, but as double values, you may be fooled by
  792.      the following result:
  793.           mysql> select TRUNCATE(10.28*100,0);
  794.                  -> 1027
  795.      The above happens because 10.28 is actually stored as something
  796.      like 10.2799999999999999.
  797. String Functions
  798. ----------------
  799. String-valued functions return `NULL' if the length of the result would
  800. be greater than the `max_allowed_packet' server parameter.  *Note
  801. Server parameters::.
  802. For functions that operate on string positions, the first position is
  803. numbered 1.
  804. `ASCII(str)'
  805.      Returns the ASCII code value of the leftmost character of the
  806.      string `str'. Returns `0' if `str' is the empty string.  Returns
  807.      `NULL' if `str' is `NULL':
  808.           mysql> select ASCII('2');
  809.                   -> 50
  810.           mysql> select ASCII(2);
  811.                   -> 50
  812.           mysql> select ASCII('dx');
  813.                   -> 100
  814.      See also the `ORD()' function.
  815. `ORD(str)'
  816.      If the leftmost character of the string str is a multi-byte
  817.      character, returns the code of multi-byte character by returning
  818.      the ASCII code value of the character in the format of: `((first
  819.      byte ASCII code)*256+(second byte ASCII code))[*256+third byte
  820.      ASCII code...]'.  If the leftmost character is not a multi-byte
  821.      character, returns the same value as the like `ASCII()' function
  822.      does:
  823.           mysql> select ORD('2');
  824.                   -> 50
  825. `CONV(N,from_base,to_base)'
  826.      Converts numbers between different number bases.  Returns a string
  827.      representation of the number `N', converted from base `from_base'
  828.      to base `to_base'.  Returns `NULL' if any argument is `NULL'.  The
  829.      argument `N' is interpreted as an integer, but may be specified as
  830.      an integer or a string.  The minimum base is `2' and the maximum
  831.      base is `36'.  If `to_base' is a negative number, `N' is regarded
  832.      as a signed number.  Otherwise, `N' is treated as unsigned.
  833.      `CONV' works with 64-bit precision:
  834.           mysql> select CONV("a",16,2);
  835.                   -> '1010'
  836.           mysql> select CONV("6E",18,8);
  837.                   -> '172'
  838.           mysql> select CONV(-17,10,-18);
  839.                   -> '-H'
  840.           mysql> select CONV(10+"10"+'10'+0xa,10,10);
  841.                   -> '40'
  842. `BIN(N)'
  843.      Returns a string representation of the binary value of `N', where
  844.      `N' is a longlong (`BIGINT') number.  This is equivalent to
  845.      `CONV(N,10,2)'.  Returns `NULL' if `N' is `NULL':
  846.           mysql> select BIN(12);
  847.                   -> '1100'
  848. `OCT(N)'
  849.      Returns a string representation of the octal value of `N', where
  850.      `N' is a longlong number.  This is equivalent to `CONV(N,10,8)'.
  851.      Returns `NULL' if `N' is `NULL':
  852.           mysql> select OCT(12);
  853.                   -> '14'
  854. `HEX(N)'
  855.      Returns a string representation of the hexadecimal value of `N',
  856.      where `N' is a longlong (`BIGINT') number.  This is equivalent to
  857.      `CONV(N,10,16)'.  Returns `NULL' if `N' is `NULL':
  858.           mysql> select HEX(255);
  859.                   -> 'FF'
  860. `CHAR(N,...)'
  861.      `CHAR()' interprets the arguments as integers and returns a string
  862.      consisting of the characters given by the ASCII code values of
  863.      those integers. `NULL' values are skipped:
  864.           mysql> select CHAR(77,121,83,81,'76');
  865.                   -> 'MySQL'
  866.           mysql> select CHAR(77,77.3,'77.3');
  867.                   -> 'MMM'
  868. `CONCAT(str1,str2,...)'
  869.      Returns the string that results from concatenating the arguments.
  870.      Returns `NULL' if any argument is `NULL'.  May have more than 2
  871.      arguments.  A numeric argument is converted to the equivalent
  872.      string form:
  873.           mysql> select CONCAT('My', 'S', 'QL');
  874.                   -> 'MySQL'
  875.           mysql> select CONCAT('My', NULL, 'QL');
  876.                   -> NULL
  877.           mysql> select CONCAT(14.3);
  878.                   -> '14.3'
  879. `CONCAT_WS(separator, str1, str2,...)'
  880.      `CONCAT_WS()' stands for CONCAT With Separator and is a special
  881.      form of `CONCAT()'.  The first argument is the separator for the
  882.      rest of the arguments. The separator can be a string as well as
  883.      the rest of the arguments. If the separator is `NULL', the result
  884.      will be `NULL'.  The function will skip any `NULL's and empty
  885.      strings, after the separator argument. The separator will be added
  886.      between the strings to be concatenated:
  887.           mysql> select CONCAT_WS(",","First name","Second name","Last Name");
  888.                  -> 'First name,Second name,Last Name'
  889.           mysql> select CONCAT_WS(",","First name",NULL,"Last Name");
  890.                  -> 'First name,Last Name'
  891. `LENGTH(str)'
  892. `OCTET_LENGTH(str)'
  893. `CHAR_LENGTH(str)'
  894. `CHARACTER_LENGTH(str)'
  895.      Returns the length of the string `str':
  896.           mysql> select LENGTH('text');
  897.                   -> 4
  898.           mysql> select OCTET_LENGTH('text');
  899.                   -> 4
  900.      Note that for `CHAR_LENGTH()', multi-byte characters are only
  901.      counted once.
  902. `LOCATE(substr,str)'
  903. `POSITION(substr IN str)'
  904.      Returns the position of the first occurrence of substring `substr'
  905.      in string `str'. Returns `0' if `substr' is not in `str':
  906.           mysql> select LOCATE('bar', 'foobarbar');
  907.                   -> 4
  908.           mysql> select LOCATE('xbar', 'foobar');
  909.                   -> 0
  910.      This function is multi-byte safe.
  911. `LOCATE(substr,str,pos)'
  912.      Returns the position of the first occurrence of substring `substr'
  913.      in string `str', starting at position `pos'.  Returns `0' if
  914.      `substr' is not in `str':
  915.           mysql> select LOCATE('bar', 'foobarbar',5);
  916.                   -> 7
  917.      This function is multi-byte safe.
  918. `INSTR(str,substr)'
  919.      Returns the position of the first occurrence of substring `substr'
  920.      in string `str'. This is the same as the two-argument form of
  921.      `LOCATE()', except that the arguments are swapped:
  922.           mysql> select INSTR('foobarbar', 'bar');
  923.                   -> 4
  924.           mysql> select INSTR('xbar', 'foobar');
  925.                   -> 0
  926.      This function is multi-byte safe.
  927. `LPAD(str,len,padstr)'
  928.      Returns the string `str', left-padded with the string `padstr'
  929.      until `str' is `len' characters long. If `str' is longer than
  930.      `len'' then it will be shortened to `len' characters.
  931.           mysql> select LPAD('hi',4,'??');
  932.                   -> '??hi'
  933. `RPAD(str,len,padstr)'
  934.      Returns the string `str', right-padded with the string `padstr'
  935.      until `str' is `len' characters long.  If `str' is longer than
  936.      `len'' then it will be shortened to `len' characters.
  937.           mysql> select RPAD('hi',5,'?');
  938.                   -> 'hi???'
  939. `LEFT(str,len)'
  940.      Returns the leftmost `len' characters from the string `str':
  941.           mysql> select LEFT('foobarbar', 5);
  942.                   -> 'fooba'
  943.      This function is multi-byte safe.
  944. `RIGHT(str,len)'
  945.      Returns the rightmost `len' characters from the string `str':
  946.           mysql> select RIGHT('foobarbar', 4);
  947.                   -> 'rbar'
  948.      This function is multi-byte safe.
  949. `SUBSTRING(str,pos,len)'
  950. `SUBSTRING(str FROM pos FOR len)'
  951. `MID(str,pos,len)'
  952.      Returns a substring `len' characters long from string `str',
  953.      starting at position `pos'.  The variant form that uses `FROM' is
  954.      ANSI SQL92 syntax:
  955.           mysql> select SUBSTRING('Quadratically',5,6);
  956.                   -> 'ratica'
  957.      This function is multi-byte safe.
  958. `SUBSTRING(str,pos)'
  959. `SUBSTRING(str FROM pos)'
  960.      Returns a substring from string `str' starting at position `pos':
  961.           mysql> select SUBSTRING('Quadratically',5);
  962.                   -> 'ratically'
  963.           mysql> select SUBSTRING('foobarbar' FROM 4);
  964.                   -> 'barbar'
  965.      This function is multi-byte safe.
  966. `SUBSTRING_INDEX(str,delim,count)'
  967.      Returns the substring from string `str' before `count' occurrences
  968.      of the delimiter `delim'.  If `count' is positive, everything to
  969.      the left of the final delimiter (counting from the left) is
  970.      returned.  If `count' is negative, everything to the right of the
  971.      final delimiter (counting from the right) is returned:
  972.           mysql> select SUBSTRING_INDEX('www.mysql.com', '.', 2);
  973.                   -> 'www.mysql'
  974.           mysql> select SUBSTRING_INDEX('www.mysql.com', '.', -2);
  975.                   -> 'mysql.com'
  976.      This function is multi-byte safe.
  977. `LTRIM(str)'
  978.      Returns the string `str' with leading space characters removed:
  979.           mysql> select LTRIM('  barbar');
  980.                   -> 'barbar'
  981. `RTRIM(str)'
  982.      Returns the string `str' with trailing space characters removed:
  983.           mysql> select RTRIM('barbar   ');
  984.                   -> 'barbar'
  985.      This function is multi-byte safe.
  986. `TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str)'
  987.      Returns the string `str' with all `remstr' prefixes and/or suffixes
  988.      removed. If none of the specifiers `BOTH', `LEADING' or `TRAILING'
  989.      are given, `BOTH' is assumed. If `remstr' is not specified, spaces
  990.      are removed:
  991.           mysql> select TRIM('  bar   ');
  992.                   -> 'bar'
  993.           mysql> select TRIM(LEADING 'x' FROM 'xxxbarxxx');
  994.                   -> 'barxxx'
  995.           mysql> select TRIM(BOTH 'x' FROM 'xxxbarxxx');
  996.                   -> 'bar'
  997.           mysql> select TRIM(TRAILING 'xyz' FROM 'barxxyz');
  998.                   -> 'barx'
  999.      This function is multi-byte safe.
  1000. `SOUNDEX(str)'
  1001.      Returns a soundex string from `str'. Two strings that sound almost
  1002.      the same should have identical soundex strings. A standard soundex
  1003.      string is 4 characters long, but the `SOUNDEX()' function returns
  1004.      an arbitrarily long string. You can use `SUBSTRING()' on the
  1005.      result to get a standard soundex string.  All non-alphanumeric
  1006.      characters are ignored in the given string. All international
  1007.      alpha characters outside the A-Z range are treated as vowels:
  1008.           mysql> select SOUNDEX('Hello');
  1009.                   -> 'H400'
  1010.           mysql> select SOUNDEX('Quadratically');
  1011.                   -> 'Q36324'
  1012. `SPACE(N)'
  1013.      Returns a string consisting of `N' space characters:
  1014.           mysql> select SPACE(6);
  1015.                   -> '      '
  1016. `REPLACE(str,from_str,to_str)'
  1017.      Returns the string `str' with all all occurrences of the string
  1018.      `from_str' replaced by the string `to_str':
  1019.           mysql> select REPLACE('www.mysql.com', 'w', 'Ww');
  1020.                   -> 'WwWwWw.mysql.com'
  1021.      This function is multi-byte safe.
  1022. `REPEAT(str,count)'
  1023.      Returns a string consisting of the string `str' repeated `count'
  1024.      times. If `count <= 0', returns an empty string. Returns `NULL' if
  1025.      `str' or `count' are `NULL':
  1026.           mysql> select REPEAT('MySQL', 3);
  1027.                   -> 'MySQLMySQLMySQL'
  1028. `REVERSE(str)'
  1029.      Returns the string `str' with the order of the characters reversed:
  1030.           mysql> select REVERSE('abc');
  1031.                   -> 'cba'
  1032.      This function is multi-byte safe.
  1033. `INSERT(str,pos,len,newstr)'
  1034.      Returns the string `str', with the substring beginning at position
  1035.      `pos' and `len' characters long replaced by the string `newstr':
  1036.           mysql> select INSERT('Quadratic', 3, 4, 'What');
  1037.                   -> 'QuWhattic'
  1038.      This function is multi-byte safe.
  1039. `ELT(N,str1,str2,str3,...)'
  1040.      Returns `str1' if `N' = `1', `str2' if `N' = `2', and so on.
  1041.      Returns `NULL' if `N' is less than `1' or greater than the number
  1042.      of arguments.  `ELT()' is the complement of `FIELD()':
  1043.           mysql> select ELT(1, 'ej', 'Heja', 'hej', 'foo');
  1044.                   -> 'ej'
  1045.           mysql> select ELT(4, 'ej', 'Heja', 'hej', 'foo');
  1046.                   -> 'foo'
  1047. `FIELD(str,str1,str2,str3,...)'
  1048.      Returns the index of `str' in the `str1', `str2', `str3', `...'
  1049.      list.  Returns `0' if `str' is not found.  `FIELD()' is the
  1050.      complement of `ELT()':
  1051.           mysql> select FIELD('ej', 'Hej', 'ej', 'Heja', 'hej', 'foo');
  1052.                   -> 2
  1053.           mysql> select FIELD('fo', 'Hej', 'ej', 'Heja', 'hej', 'foo');
  1054.                   -> 0
  1055. `FIND_IN_SET(str,strlist)'
  1056.      Returns a value `1' to `N' if the string `str' is in the list
  1057.      `strlist' consisting of `N' substrings. A string list is a string
  1058.      composed of substrings separated by `,' characters. If the first
  1059.      argument is a constant string and the second is a column of type
  1060.      `SET', the `FIND_IN_SET()' function is optimized to use bit
  1061.      arithmetic!  Returns `0' if `str' is not in `strlist' or if
  1062.      `strlist' is the empty string.  Returns `NULL' if either argument
  1063.      is `NULL'.  This function will not work properly if the first
  1064.      argument contains a `,':
  1065.           mysql> SELECT FIND_IN_SET('b','a,b,c,d');
  1066.                   -> 2
  1067. `MAKE_SET(bits,str1,str2,...)'
  1068.      Returns a set (a string containing substrings separated by `,'
  1069.      characters) consisting of the strings that have the corresponding
  1070.      bit in `bits' set.  `str1' corresponds to bit 0, `str2' to bit 1,
  1071.      etc.  `NULL' strings in `str1', `str2', `...' are not appended to
  1072.      the result:
  1073.           mysql> SELECT MAKE_SET(1,'a','b','c');
  1074.                   -> 'a'
  1075.           mysql> SELECT MAKE_SET(1 | 4,'hello','nice','world');
  1076.                   -> 'hello,world'
  1077.           mysql> SELECT MAKE_SET(0,'a','b','c');
  1078.                   -> ''
  1079. `EXPORT_SET(bits,on,off,[separator,[number_of_bits]])'
  1080.      Returns a string where for every bit set in 'bit', you get an 'on'
  1081.      string and for every reset bit you get an 'off' string. Each
  1082.      string is separated with 'separator' (default ',') and only
  1083.      'number_of_bits' (default 64) of 'bits' is used:
  1084.           mysql> select EXPORT_SET(5,'Y','N',',',4)
  1085.                   -> Y,N,Y,N
  1086. `LCASE(str)'
  1087. `LOWER(str)'
  1088.      Returns the string `str' with all characters changed to lowercase
  1089.      according to the current character set mapping (the default is
  1090.      ISO-8859-1 Latin1):
  1091.           mysql> select LCASE('QUADRATICALLY');
  1092.                   -> 'quadratically'
  1093.      This function is multi-byte safe.
  1094. `UCASE(str)'
  1095. `UPPER(str)'
  1096.      Returns the string `str' with all characters changed to uppercase
  1097.      according to the current character set mapping (the default is
  1098.      ISO-8859-1 Latin1):
  1099.           mysql> select UCASE('Hej');
  1100.                   -> 'HEJ'
  1101.      This function is multi-byte safe.
  1102. `LOAD_FILE(file_name)'
  1103.      Reads the file and returns the file contents as a string.  The file
  1104.      must be on the server, you must specify the full pathname to the
  1105.      file, and you must have the *file* privilege.  The file must be
  1106.      readable by all and be smaller than `max_allowed_packet'.
  1107.      If the file doesn't exist or can't be read due to one of the above
  1108.      reasons, the function returns `NULL':
  1109.           mysql> UPDATE table_name
  1110.                      SET blob_column=LOAD_FILE("/tmp/picture")
  1111.                      WHERE id=1;
  1112. If you are not using *MySQL* Version 3.23, you have to do the reading
  1113. of the file inside your application and create an `INSERT' statement to
  1114. update the database with the file information. One way to do this, if
  1115. you are using the *MySQL*++ library, can be found at
  1116. `http://www.mysql.com/documentation/mysql++/mysql++-examples.html'.
  1117. *MySQL* automatically converts numbers to strings as necessary, and
  1118. vice-versa:
  1119.      mysql> SELECT 1+"1";
  1120.              -> 2
  1121.      mysql> SELECT CONCAT(2,' test');
  1122.              -> '2 test'
  1123. If you want to convert a number to a string explicitly, pass it as the
  1124. argument to `CONCAT()'.
  1125. If a string function is given a binary string as an argument, the
  1126. resulting string is also a binary string.  A number converted to a
  1127. string is treated as a binary string.  This only affects comparisons.
  1128. Date and Time Functions
  1129. -----------------------
  1130. See *Note Date and time types:: for a description of the range of values
  1131. each type has and the valid formats in which date and time values may be
  1132. specified.
  1133. Here is an example that uses date functions.  The query below selects
  1134. all records with a `date_col' value from within the last 30 days:
  1135.      mysql> SELECT something FROM table
  1136.                 WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30;
  1137. `DAYOFWEEK(date)'
  1138.      Returns the weekday index
  1139.      for `date' (`1' = Sunday, `2' = Monday, ... `7' = Saturday).
  1140.      These index values correspond to the ODBC standard:
  1141.           mysql> select DAYOFWEEK('1998-02-03');
  1142.                   -> 3
  1143. `WEEKDAY(date)'
  1144.      Returns the weekday index for `date' (`0' = Monday, `1' = Tuesday,
  1145.      ... `6' = Sunday):
  1146.           mysql> select WEEKDAY('1997-10-04 22:23:00');
  1147.                   -> 5
  1148.           mysql> select WEEKDAY('1997-11-05');
  1149.                   -> 2
  1150. `DAYOFMONTH(date)'
  1151.      Returns the day of the month for `date', in the range `1' to `31':
  1152.           mysql> select DAYOFMONTH('1998-02-03');
  1153.                   -> 3
  1154. `DAYOFYEAR(date)'
  1155.      Returns the day of the year for `date', in the range `1' to `366':
  1156.           mysql> select DAYOFYEAR('1998-02-03');
  1157.                   -> 34
  1158. `MONTH(date)'
  1159.      Returns the month for `date', in the range `1' to `12':
  1160.           mysql> select MONTH('1998-02-03');
  1161.                   -> 2
  1162. `DAYNAME(date)'
  1163.      Returns the name of the weekday for `date':
  1164.           mysql> select DAYNAME("1998-02-05");
  1165.                   -> 'Thursday'
  1166. `MONTHNAME(date)'
  1167.      Returns the name of the month for `date':
  1168.           mysql> select MONTHNAME("1998-02-05");
  1169.                   -> 'February'
  1170. `QUARTER(date)'
  1171.      Returns the quarter of the year for `date', in the range `1' to
  1172.      `4':
  1173.           mysql> select QUARTER('98-04-01');
  1174.                   -> 2
  1175. `WEEK(date)'
  1176. `WEEK(date,first)'
  1177.      With a single argument, returns the week for `date', in the range
  1178.      `0' to `53' (yes, there may be the beginnings of a week 53), for
  1179.      locations where Sunday is the first day of the week.  The
  1180.      two-argument form of `WEEK()' allows you to specify whether the
  1181.      week starts on Sunday or Monday.  The week starts on Sunday if the
  1182.      second argument is `0', on Monday if the second argument is `1':
  1183.           mysql> select WEEK('1998-02-20');
  1184.                   -> 7
  1185.           mysql> select WEEK('1998-02-20',0);
  1186.                   -> 7
  1187.           mysql> select WEEK('1998-02-20',1);
  1188.                   -> 8
  1189.           mysql> select WEEK('1998-12-31',1);
  1190.                   -> 53
  1191. `YEAR(date)'
  1192.      Returns the year for `date', in the range `1000' to `9999':
  1193.           mysql> select YEAR('98-02-03');
  1194.                   -> 1998
  1195. `YEARWEEK(date)'
  1196. `YEARWEEK(date,first)'
  1197.      Returns year and week for a date.  The second arguments works
  1198.      exactly like the second argument to `WEEK()'.  Note that the year
  1199.      may be different from the year in the date argument for the first
  1200.      and the last week of the year:
  1201.           mysql> select YEARWEEK('1987-01-01');
  1202.                   -> 198653
  1203. `HOUR(time)'
  1204.      Returns the hour for `time', in the range `0' to `23':
  1205.           mysql> select HOUR('10:05:03');
  1206.                   -> 10
  1207. `MINUTE(time)'
  1208.      Returns the minute for `time', in the range `0' to `59':
  1209.           mysql> select MINUTE('98-02-03 10:05:03');
  1210.                   -> 5
  1211. `SECOND(time)'
  1212.      Returns the second for `time', in the range `0' to `59':
  1213.           mysql> select SECOND('10:05:03');
  1214.                   -> 3
  1215. `PERIOD_ADD(P,N)'
  1216.      Adds `N' months to period `P' (in the format `YYMM' or `YYYYMM').
  1217.      Returns a value in the format `YYYYMM'.
  1218.      Note that the period argument `P' is _not_ a date value:
  1219.           mysql> select PERIOD_ADD(9801,2);
  1220.                   -> 199803
  1221. `PERIOD_DIFF(P1,P2)'
  1222.      Returns the number of months between periods `P1' and `P2'.  `P1'
  1223.      and `P2' should be in the format `YYMM' or `YYYYMM'.
  1224.      Note that the period arguments `P1' and `P2' are _not_ date values:
  1225.           mysql> select PERIOD_DIFF(9802,199703);
  1226.                   -> 11
  1227. `DATE_ADD(date,INTERVAL expr type)'
  1228. `DATE_SUB(date,INTERVAL expr type)'
  1229. `ADDDATE(date,INTERVAL expr type)'
  1230. `SUBDATE(date,INTERVAL expr type)'
  1231.      These functions perform date arithmetic.  They are new for *MySQL*
  1232.      Version 3.22.  `ADDDATE()' and `SUBDATE()' are synonyms for
  1233.      `DATE_ADD()' and `DATE_SUB()'.
  1234.      In *MySQL* Version 3.23, you can use `+' and `-' instead of
  1235.      `DATE_ADD()' and `DATE_SUB()' if the expression on the right side
  1236.      is a date or datetime column. (See example)
  1237.      `date' is a `DATETIME' or `DATE' value specifying the starting
  1238.      date.  `expr' is an expression specifying the interval value to be
  1239.      added or substracted from the starting date.  `expr' is a string;
  1240.      it may start with a `-' for negative intervals.  `type' is a
  1241.      keyword indicating how the expression should be interpreted.
  1242.      The `EXTRACT(type FROM date)' function returns the 'type' interval
  1243.      from the date.
  1244.      The following table shows how the `type' and `expr' arguments are
  1245.      related:
  1246.      `type' *value*                     *Expected* `expr' *format*
  1247.      `SECOND'                           `SECONDS'
  1248.      `MINUTE'                           `MINUTES'
  1249.      `HOUR'                             `HOURS'
  1250.      `DAY'                              `DAYS'
  1251.      `MONTH'                            `MONTHS'
  1252.      `YEAR'                             `YEARS'
  1253.      `MINUTE_SECOND'                    `"MINUTES:SECONDS"'
  1254.      `HOUR_MINUTE'                      `"HOURS:MINUTES"'
  1255.      `DAY_HOUR'                         `"DAYS HOURS"'
  1256.      `YEAR_MONTH'                       `"YEARS-MONTHS"'
  1257.      `HOUR_SECOND'                      `"HOURS:MINUTES:SECONDS"'
  1258.      `DAY_MINUTE'                       `"DAYS HOURS:MINUTES"'
  1259.      `DAY_SECOND'                       `"DAYS HOURS:MINUTES:SECONDS"'
  1260.      *MySQL* allows any punctuation delimiter in the `expr' format.
  1261.      Those shown in the table are the suggested delimiters.  If the
  1262.      `date' argument is a `DATE' value and your calculations involve
  1263.      only `YEAR', `MONTH', and `DAY' parts (that is, no time parts), the
  1264.      result is a `DATE' value.  Otherwise the result is a `DATETIME'
  1265.      value:
  1266.           mysql> SELECT "1997-12-31 23:59:59" + INTERVAL 1 SECOND;
  1267.                   -> 1998-01-01 00:00:00
  1268.           mysql> SELECT INTERVAL 1 DAY + "1997-12-31";
  1269.                   -> 1998-01-01
  1270.           mysql> SELECT "1998-01-01" - INTERVAL 1 SECOND;
  1271.                  -> 1997-12-31 23:59:59
  1272.           mysql> SELECT DATE_ADD("1997-12-31 23:59:59",
  1273.                                  INTERVAL 1 SECOND);
  1274.                   -> 1998-01-01 00:00:00
  1275.           mysql> SELECT DATE_ADD("1997-12-31 23:59:59",
  1276.                                  INTERVAL 1 DAY);
  1277.                   -> 1998-01-01 23:59:59
  1278.           mysql> SELECT DATE_ADD("1997-12-31 23:59:59",
  1279.                                  INTERVAL "1:1" MINUTE_SECOND);
  1280.                   -> 1998-01-01 00:01:00
  1281.           mysql> SELECT DATE_SUB("1998-01-01 00:00:00",
  1282.                                  INTERVAL "1 1:1:1" DAY_SECOND);
  1283.                   -> 1997-12-30 22:58:59
  1284.           mysql> SELECT DATE_ADD("1998-01-01 00:00:00",
  1285.                                  INTERVAL "-1 10" DAY_HOUR);
  1286.                   -> 1997-12-30 14:00:00
  1287.           mysql> SELECT DATE_SUB("1998-01-02", INTERVAL 31 DAY);
  1288.                   -> 1997-12-02
  1289.           mysql> SELECT EXTRACT(YEAR FROM "1999-07-02");
  1290.                  -> 1999
  1291.           mysql> SELECT EXTRACT(YEAR_MONTH FROM "1999-07-02 01:02:03");
  1292.                  -> 199907
  1293.           mysql> SELECT EXTRACT(DAY_MINUTE FROM "1999-07-02 01:02:03");
  1294.                  -> 20102
  1295.      If you specify an interval value that is too short (does not
  1296.      include all the interval parts that would be expected from the
  1297.      `type' keyword), *MySQL* assumes you have left out the leftmost
  1298.      parts of the interval value.  For example, if you specify a `type'
  1299.      of `DAY_SECOND', the value of `expr' is expected to have days,
  1300.      hours, minutes, and seconds parts.  If you specify a value like
  1301.      `"1:10"', *MySQL* assumes that the days and hours parts are
  1302.      missing and the value represents minutes and seconds.  In other
  1303.      words, `"1:10" DAY_SECOND' is interpreted in such a way that it is
  1304.      equivalent to `"1:10" MINUTE_SECOND'.  This is analogous to the
  1305.      way that *MySQL* interprets `TIME' values as representing elapsed
  1306.      time rather than as time of day.
  1307.      Note that if you add or subtract a date value against something
  1308.      that contains a time part, the date value will be automatically
  1309.      converted to a datetime value:
  1310.           mysql> select date_add("1999-01-01", interval 1 day);
  1311.                  -> 1999-01-02
  1312.           mysql> select date_add("1999-01-01", interval 1 hour);
  1313.                  -> 1999-01-01 01:00:00
  1314.      If you use really incorrect dates, the result is `NULL'. If you add
  1315.      `MONTH', `YEAR_MONTH', or `YEAR' and the resulting date has a day
  1316.      that is larger than the maximum day for the new month, the day is
  1317.      adjusted to the maximum days in the new month:
  1318.           mysql> select DATE_ADD('1998-01-30', Interval 1 month);
  1319.                   -> 1998-02-28
  1320.      Note from the preceding example that the word `INTERVAL' and the
  1321.      `type' keyword are not case sensitive.
  1322. `TO_DAYS(date)'
  1323.      Given a date `date', returns a daynumber (the number of days since
  1324.      year 0):
  1325.           mysql> select TO_DAYS(950501);
  1326.                   -> 728779
  1327.           mysql> select TO_DAYS('1997-10-07');
  1328.                   -> 729669
  1329.      `TO_DAYS()' is not intended for use with values that precede the
  1330.      advent of the Gregorian calendar (1582), because it doesn't take
  1331.      into account the days that were lost when the calender was changed.
  1332. `FROM_DAYS(N)'
  1333.      Given a daynumber `N', returns a `DATE' value:
  1334.           mysql> select FROM_DAYS(729669);
  1335.                   -> '1997-10-07'
  1336.      `FROM_DAYS()' is not intended for use with values that precede the
  1337.      advent of the Gregorian calendar (1582), because it doesn't take
  1338.      into account the days that were lost when the calender was changed.
  1339. `DATE_FORMAT(date,format)'
  1340.      Formats the `date' value according to the `format' string. The
  1341.      following specifiers may be used in the `format' string:
  1342.      `%M'    Month name (`January'..`December')
  1343.      `%W'    Weekday name (`Sunday'..`Saturday')
  1344.      `%D'    Day of the month with English suffix
  1345.              (`1st', `2nd', `3rd', etc.)
  1346.      `%Y'    Year, numeric, 4 digits
  1347.      `%y'    Year, numeric, 2 digits
  1348.      `%X'    Year for the week where Sunday is the
  1349.              first day of the week, numeric, 4
  1350.              digits, used with '%V'
  1351.      `%x'    Year for the week, where Monday is the
  1352.              first day of the week, numeric, 4
  1353.              digits, used with '%v'
  1354.      `%a'    Abbreviated weekday name (`Sun'..`Sat')
  1355.      `%d'    Day of the month, numeric (`00'..`31')
  1356.      `%e'    Day of the month, numeric (`0'..`31')
  1357.      `%m'    Month, numeric (`01'..`12')
  1358.      `%c'    Month, numeric (`1'..`12')
  1359.      `%b'    Abbreviated month name (`Jan'..`Dec')
  1360.      `%j'    Day of year (`001'..`366')
  1361.      `%H'    Hour (`00'..`23')
  1362.      `%k'    Hour (`0'..`23')
  1363.      `%h'    Hour (`01'..`12')
  1364.      `%I'    Hour (`01'..`12')
  1365.      `%l'    Hour (`1'..`12')
  1366.      `%i'    Minutes, numeric (`00'..`59')
  1367.      `%r'    Time, 12-hour (`hh:mm:ss [AP]M')
  1368.      `%T'    Time, 24-hour (`hh:mm:ss')
  1369.      `%S'    Seconds (`00'..`59')
  1370.      `%s'    Seconds (`00'..`59')
  1371.      `%p'    `AM' or `PM'
  1372.      `%w'    Day of the week
  1373.              (`0'=Sunday..`6'=Saturday)
  1374.      `%U'    Week (`0'..`53'), where Sunday is the
  1375.              first day of the week
  1376.      `%u'    Week (`0'..`53'), where Monday is the
  1377.              first day of the week
  1378.      `%V'    Week (`1'..`53'), where Sunday is the
  1379.              first day of the week. Used with '%X'
  1380.      `%v'    Week (`1'..`53'), where Monday is the
  1381.              first day of the week. Used with '%x'
  1382.      `%%'    A literal `%'.
  1383.      All other characters are just copied to the result without
  1384.      interpretation:
  1385.           mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y');
  1386.                   -> 'Saturday October 1997'
  1387.           mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%H:%i:%s');
  1388.                   -> '22:23:00'
  1389.           mysql> select DATE_FORMAT('1997-10-04 22:23:00',
  1390.                                     '%D %y %a %d %m %b %j');
  1391.                   -> '4th 97 Sat 04 10 Oct 277'
  1392.           mysql> select DATE_FORMAT('1997-10-04 22:23:00',
  1393.                                     '%H %k %I %r %T %S %w');
  1394.                   -> '22 22 10 10:23:00 PM 22:23:00 00 6'
  1395.           mysql> select DATE_FORMAT('1999-01-01', '%X %V');
  1396.                   -> '1998 52'
  1397.      As of *MySQL* Version 3.23, the `%' character is required before
  1398.      format specifier characters.  In earlier versions of *MySQL*, `%'
  1399.      was optional.
  1400. `TIME_FORMAT(time,format)'
  1401.      This is used like the `DATE_FORMAT()' function above, but the
  1402.      `format' string may contain only those format specifiers that
  1403.      handle hours, minutes, and seconds.  Other specifiers produce a
  1404.      `NULL' value or `0'.
  1405. `CURDATE()'
  1406. `CURRENT_DATE'
  1407.      Returns today's date as a value in `'YYYY-MM-DD'' or `YYYYMMDD'
  1408.      format, depending on whether the function is used in a string or
  1409.      numeric context:
  1410.           mysql> select CURDATE();
  1411.                   -> '1997-12-15'
  1412.           mysql> select CURDATE() + 0;
  1413.                   -> 19971215
  1414. `CURTIME()'
  1415. `CURRENT_TIME'
  1416.      Returns the current time as a value in `'HH:MM:SS'' or `HHMMSS'
  1417.      format, depending on whether the function is used in a string or
  1418.      numeric context:
  1419.           mysql> select CURTIME();
  1420.                   -> '23:50:26'
  1421.           mysql> select CURTIME() + 0;
  1422.                   -> 235026
  1423. `NOW()'
  1424. `SYSDATE()'
  1425. `CURRENT_TIMESTAMP'
  1426.      Returns the current date and time as a value in `'YYYY-MM-DD
  1427.      HH:MM:SS'' or `YYYYMMDDHHMMSS' format, depending on whether the
  1428.      function is used in a string or numeric context:
  1429.           mysql> select NOW();
  1430.                   -> '1997-12-15 23:50:26'
  1431.           mysql> select NOW() + 0;
  1432.                   -> 19971215235026
  1433. `UNIX_TIMESTAMP()'
  1434. `UNIX_TIMESTAMP(date)'
  1435.      If called with no argument, returns a Unix timestamp (seconds since
  1436.      `'1970-01-01 00:00:00'' GMT). If `UNIX_TIMESTAMP()' is called with
  1437.      a `date' argument, it returns the value of the argument as seconds
  1438.      since `'1970-01-01 00:00:00'' GMT.  `date' may be a `DATE' string,
  1439.      a `DATETIME' string, a `TIMESTAMP', or a number in the format
  1440.      `YYMMDD' or `YYYYMMDD' in local time:
  1441.           mysql> select UNIX_TIMESTAMP();
  1442.                   -> 882226357
  1443.           mysql> select UNIX_TIMESTAMP('1997-10-04 22:23:00');
  1444.                   -> 875996580
  1445.      When `UNIX_TIMESTAMP' is used on a `TIMESTAMP' column, the function
  1446.      will receive the value directly, with no implicit
  1447.      "string-to-unix-timestamp" conversion.  If you give
  1448.      `UNIX_TIMESTAMP()' a wrong or out-of-range date, it will return 0.
  1449. `FROM_UNIXTIME(unix_timestamp)'
  1450.      Returns a representation of the `unix_timestamp' argument as a
  1451.      value in `'YYYY-MM-DD HH:MM:SS'' or `YYYYMMDDHHMMSS' format,
  1452.      depending on whether the function is used in a string or numeric
  1453.      context:
  1454.           mysql> select FROM_UNIXTIME(875996580);
  1455.                   -> '1997-10-04 22:23:00'
  1456.           mysql> select FROM_UNIXTIME(875996580) + 0;
  1457.                   -> 19971004222300
  1458. `FROM_UNIXTIME(unix_timestamp,format)'
  1459.      Returns a string representation of the Unix timestamp, formatted
  1460.      according to the `format' string. `format' may contain the same
  1461.      specifiers as those listed in the entry for the `DATE_FORMAT()'
  1462.      function:
  1463.           mysql> select FROM_UNIXTIME(UNIX_TIMESTAMP(),
  1464.                                       '%Y %D %M %h:%i:%s %x');
  1465.                   -> '1997 23rd December 03:43:30 x'
  1466. `SEC_TO_TIME(seconds)'
  1467.      Returns the `seconds' argument, converted to hours, minutes, and
  1468.      seconds, as a value in `'HH:MM:SS'' or `HHMMSS' format, depending
  1469.      on whether the function is used in a string or numeric context:
  1470.           mysql> select SEC_TO_TIME(2378);
  1471.                   -> '00:39:38'
  1472.           mysql> select SEC_TO_TIME(2378) + 0;
  1473.                   -> 3938
  1474. `TIME_TO_SEC(time)'
  1475.      Returns the `time' argument, converted to seconds:
  1476.           mysql> select TIME_TO_SEC('22:23:00');
  1477.                   -> 80580
  1478.           mysql> select TIME_TO_SEC('00:39:38');
  1479.                   -> 2378
  1480. Miscellaneous Functions
  1481. -----------------------
  1482. `DATABASE()'
  1483.      Returns the current database name:
  1484.           mysql> select DATABASE();
  1485.                   -> 'test'
  1486.      If there is no current database, `DATABASE()' returns the empty
  1487.      string.
  1488. `USER()'
  1489. `SYSTEM_USER()'
  1490. `SESSION_USER()'
  1491.      Returns the current *MySQL* user name:
  1492.           mysql> select USER();
  1493.                   -> 'davida@localhost'
  1494.      In *MySQL* Version 3.22.11 or later, this includes the client
  1495.      hostname as well  as the user name.  You can extract just the user
  1496.      name part like this (which works whether or not the value includes
  1497.      a hostname part):
  1498.           mysql> select substring_index(USER(),"@",1);
  1499.                   -> 'davida'
  1500. `PASSWORD(str)'
  1501.      Calculates a password string from the plaintext password `str'.
  1502.      This is the function that is used for encrypting *MySQL* passwords
  1503.      for storage in the `Password' column of the `user' grant table:
  1504.           mysql> select PASSWORD('badpwd');
  1505.                   -> '7f84554057dd964b'
  1506.      `PASSWORD()' encryption is non-reversible.
  1507.      `PASSWORD()' does not perform password encryption in the same way
  1508.      that Unix passwords are encrypted.  You should not assume that if
  1509.      your Unix password and your *MySQL* password are the same,
  1510.      `PASSWORD()' will result in the same encrypted value as is stored
  1511.      in the Unix password file.  See `ENCRYPT()'.
  1512. `ENCRYPT(str[,salt])'
  1513.      Encrypt `str' using the Unix `crypt()' system call. The `salt'
  1514.      argument should be a string with two characters.  (As of *MySQL*
  1515.      Version 3.22.16, `salt' may be longer than two characters.):
  1516.           mysql> select ENCRYPT("hello");
  1517.                   -> 'VxuFAJXVARROc'
  1518.      If `crypt()' is not available on your system, `ENCRYPT()' always
  1519.      returns `NULL'.
  1520.      `ENCRYPT()' ignores all but the first 8 characters of `str', at
  1521.      least on some systems.  This will be determined by the behavior of
  1522.      the underlying `crypt()' system call.
  1523. `ENCODE(str,pass_str)'
  1524.      Encrypt `str' using `pass_str' as the password.  To decrypt the
  1525.      result, use `DECODE()'.
  1526.      The results is a binary string of the same length as `string'.  If
  1527.      you want to save it in a column, use a `BLOB' column type.
  1528. `DECODE(crypt_str,pass_str)'
  1529.      Descrypts the encrypted string `crypt_str' using `pass_str' as the
  1530.      password.  `crypt_str' should be a string returned from `ENCODE()'.
  1531. `MD5(string)'
  1532.      Calculates a MD5 checksum for the string. Value is returned as a
  1533.      32 long hex number that may, for example, be used as a hash key:
  1534.           mysql> select MD5("testing")
  1535.                   -> 'ae2b1fca515949e5d54fb22b8ed95575'
  1536.      This is an "RSA Data Security, Inc. MD5 Message-Digest Algorithm".
  1537. `LAST_INSERT_ID([expr])'
  1538.      Returns the last automatically generated value that was inserted
  1539.      into an `AUTO_INCREMENT' column.  *Note `mysql_insert_id()':
  1540.      mysql_insert_id.
  1541.           mysql> select LAST_INSERT_ID();
  1542.                   -> 195
  1543.      The last ID that was generated is maintained in the server on a
  1544.      per-connection basis.  It will not be changed by another client.
  1545.      It will not even be changed if you update another `AUTO_INCREMENT'
  1546.      column with a non-magic value (that is, a value that is not `NULL'
  1547.      and not `0').
  1548.      If `expr' is given as an argument to `LAST_INSERT_ID()' in an
  1549.      `UPDATE' clause, then the value of the argument is returned as a
  1550.      `LAST_INSERT_ID()' value.  This can be used to simulate sequences.
  1551.      First create the table:
  1552.           mysql> create table sequence (id int not null);
  1553.           mysql> insert into sequence values (0);
  1554.      Then the table can be used to generate sequence numbers like this:
  1555.           mysql> update sequence set id=LAST_INSERT_ID(id+1);
  1556.      You can generate sequences without calling `LAST_INSERT_ID()', but
  1557.      the utility of using the function this way is that the ID value is
  1558.      maintained in the server as the last automatically generated
  1559.      value.  You can retrieve the new ID as you would read any normal
  1560.      `AUTO_INCREMENT' value in *MySQL*.  For example,
  1561.      `LAST_INSERT_ID()' (without an argument) will return the new ID.
  1562.      The C API function `mysql_insert_id()' can also be used to get the
  1563.      value.
  1564. `FORMAT(X,D)'
  1565.      Formats the number `X' to a format like `'#,###,###.##'', rounded
  1566.      to `D' decimals.  If `D' is `0', the result will have no decimal
  1567.      point or fractional part:
  1568.           mysql> select FORMAT(12332.123456, 4);
  1569.                   -> '12,332.1235'
  1570.           mysql> select FORMAT(12332.1,4);
  1571.                   -> '12,332.1000'
  1572.           mysql> select FORMAT(12332.2,0);
  1573.                   -> '12,332'
  1574. `VERSION()'
  1575.      Returns a string indicating the *MySQL* server version:
  1576.           mysql> select VERSION();
  1577.                   -> '3.23.13-log'
  1578.      Note that if your version ends with `-log' this means that logging
  1579.      is enabled.
  1580. `CONNECTION_ID()'
  1581.      Returns the connection id (`thread_id') for the connection.  Every
  1582.      connection has its own unique id:
  1583.           mysql> select CONNECTION_ID();
  1584.                   -> 1
  1585. `GET_LOCK(str,timeout)'
  1586.      Tries to obtain a lock with a name given by the string `str', with
  1587.      a timeout of `timeout' seconds.  Returns `1' if the lock was
  1588.      obtained successfully, `0' if the attempt timed out, or `NULL' if
  1589.      an error occurred (such as running out of memory or the thread was
  1590.      killed with `mysqladmin kill').  A lock is released when you
  1591.      execute `RELEASE_LOCK()', execute a new `GET_LOCK()', or the thread
  1592.      terminates.  This function can be used to implement application
  1593.      locks or to simulate record locks.  It blocks requests by other
  1594.      clients for locks with the same name; clients that agree on a
  1595.      given lock string name can use the string to perform cooperative
  1596.      advisory locking:
  1597.           mysql> select GET_LOCK("lock1",10);
  1598.                   -> 1
  1599.           mysql> select GET_LOCK("lock2",10);
  1600.                   -> 1
  1601.           mysql> select RELEASE_LOCK("lock2");
  1602.                   -> 1
  1603.           mysql> select RELEASE_LOCK("lock1");
  1604.                   -> NULL
  1605.      Note that the second `RELEASE_LOCK()' call returns `NULL' because
  1606.      the lock `"lock1"' was automatically released by the second
  1607.      `GET_LOCK()' call.
  1608. `RELEASE_LOCK(str)'
  1609.      Releases the lock named by the string `str' that was obtained with
  1610.      `GET_LOCK()'. Returns `1' if the lock was released, `0' if the
  1611.      lock wasn't locked by this thread (in which case the lock is not
  1612.      released), and `NULL' if the named lock didn't exist.  The lock
  1613.      will not exist if it was never obtained by a call to `GET_LOCK()'
  1614.      or if it already has been released.
  1615. `BENCHMARK(count,expr)'
  1616.      The `BENCHMARK()' function executes the expression `expr'
  1617.      repeatedly `count' times.  It may be used to time how fast *MySQL*
  1618.      processes the expression.  The result value is always `0'.  The
  1619.      intended use is in the `mysql' client, which reports query
  1620.      execution times:
  1621.           mysql> select BENCHMARK(1000000,encode("hello","goodbye"));
  1622.           +----------------------------------------------+
  1623.           | BENCHMARK(1000000,encode("hello","goodbye")) |
  1624.           +----------------------------------------------+
  1625.           |                                            0 |
  1626.           +----------------------------------------------+
  1627.           1 row in set (4.74 sec)
  1628.      The time reported is elapsed time on the client end, not CPU time
  1629.      on the server end.  It may be advisable to execute `BENCHMARK()'
  1630.      several times, and interpret the result with regard to how heavily
  1631.      loaded the server machine is.
  1632. `INET_NTOA(expr)'
  1633.      Returns the network address (4 or 8 byte) for the numeric
  1634.      expression:
  1635.           mysql> select INET_NTOA(3520061480);
  1636.                  ->  "209.207.224.40"
  1637. `INET_ATON(expr)'
  1638.      Returns an integer that represents the numeric value for a network
  1639.      address.  Addresses may be 4 or 8 byte addresses:
  1640.           mysql> select INET_ATON("209.207.224.40");
  1641.                  ->  3520061480
  1642. `MASTER_POS_WAIT(log_name, log_pos)'
  1643.      Blocks until the slave reaches the specified position in the
  1644.      master log during replication. If master information is not
  1645.      initialized, returns NULL. If the slave is not running, will block
  1646.      and wait until it is started and goes to or past the specified
  1647.      postion. If the slave is already past the specified postion,
  1648.      returns immediately. The return value is the number of log events
  1649.      it had to wait to get to the specified position, or NULL in case
  1650.      of error. Useful for control of master-slave synchronization, but
  1651.      was originally written to facilate replication testing.
  1652. Functions for Use with `GROUP BY' Clauses
  1653. -----------------------------------------
  1654. If you use a group function in a statement containing no `GROUP BY'
  1655. clause, it is equivalent to grouping on all rows.
  1656. `COUNT(expr)'
  1657.      Returns a count of the number of non-`NULL' values in the rows
  1658.      retrieved by a `SELECT' statement:
  1659.           mysql> select student.student_name,COUNT(*)
  1660.                      from student,course
  1661.                      where student.student_id=course.student_id
  1662.                      GROUP BY student_name;
  1663.      `COUNT(*)' is somewhat different in that it returns a count of the
  1664.      number of rows retrieved, whether or not they contain `NULL'
  1665.      values.
  1666.      `COUNT(*)' is optimized to return very quickly if the `SELECT'
  1667.      retrieves from one table, no other columns are retrieved, and
  1668.      there is no `WHERE' clause.  For example:
  1669.           mysql> select COUNT(*) from student;
  1670. `COUNT(DISTINCT expr,[expr...])'
  1671.      Returns a count of the number of different non-`NULL' values:
  1672.           mysql> select COUNT(DISTINCT results) from student;
  1673.      In *MySQL* you can get the number of distinct expression
  1674.      combinations that don't contain NULL by giving a list of
  1675.      expressions.  In ANSI SQL you would have to do a concatenation of
  1676.      all expressions inside `CODE(DISTINCT ..)'.
  1677. `AVG(expr)'
  1678.      Returns the average value of `expr':
  1679.           mysql> select student_name, AVG(test_score)
  1680.                      from student
  1681.                      GROUP BY student_name;
  1682. `MIN(expr)'
  1683. `MAX(expr)'
  1684.      Returns the minimum or maximum value of `expr'.  `MIN()' and
  1685.      `MAX()' may take a string argument; in such cases they return the
  1686.      minimum or maximum string value. *Note MySQL indexes::.
  1687.           mysql> select student_name, MIN(test_score), MAX(test_score)
  1688.                      from student
  1689.                      GROUP BY student_name;
  1690. `SUM(expr)'
  1691.      Returns the sum of `expr'.  Note that if the return set has no
  1692.      rows, it returns NULL!
  1693. `STD(expr)'
  1694. `STDDEV(expr)'
  1695.      Returns the standard deviation of `expr'. This is an extension to
  1696.      ANSI SQL. The `STDDEV()' form of this function is provided for
  1697.      Oracle compatability.
  1698. `BIT_OR(expr)'
  1699.      Returns the bitwise `OR' of all bits in `expr'. The calculation is
  1700.      performed with 64-bit (`BIGINT') precision.
  1701. `BIT_AND(expr)'
  1702.      Returns the bitwise `AND' of all bits in `expr'. The calculation is
  1703.      performed with 64-bit (`BIGINT') precision.
  1704. *MySQL* has extended the use of `GROUP BY'. You can use columns or
  1705. calculations in the `SELECT' expressions that don't appear in the
  1706. `GROUP BY' part. This stands for _any possible value for this group_.
  1707. You can use this to get better performance by avoiding sorting and
  1708. grouping on unnecessary items.  For example, you don't need to group on
  1709. `customer.name' in the following query:
  1710.      mysql> select order.custid,customer.name,max(payments)
  1711.             from order,customer
  1712.             where order.custid = customer.custid
  1713.             GROUP BY order.custid;
  1714. In ANSI SQL, you would have to add `customer.name' to the `GROUP BY'
  1715. clause.  In *MySQL*, the name is redundant if you don't run in ANSI
  1716. mode.
  1717. *Don't use this feature* if the columns you omit from the `GROUP BY'
  1718. part aren't unique in the group!  You will get unpredictable results.
  1719. In some cases, you can use `MIN()' and `MAX()' to obtain a specific
  1720. column value even if it isn't unique. The following gives the value of
  1721. `column' from the row containing the smallest value in the `sort'
  1722. column:
  1723.      substr(MIN(concat(rpad(sort,6,' '),column)),7)
  1724. *Note example-Maximum-column-group-row::.
  1725. Note that if you are using *MySQL* Version 3.22 (or earlier) or if you
  1726. are trying to follow ANSI SQL, you can't use expressions in `GROUP BY'
  1727. or `ORDER BY' clauses.  You can work around this limitation by using an
  1728. alias for the expression:
  1729.      mysql> SELECT id,FLOOR(value/100) AS val FROM tbl_name
  1730.                 GROUP BY id,val ORDER BY val;
  1731. In *MySQL* Version 3.23 you can do:
  1732.      mysql> SELECT id,FLOOR(value/100) FROM tbl_name ORDER BY RAND();
  1733. `CREATE DATABASE' Syntax
  1734. ========================
  1735.      CREATE DATABASE [IF NOT EXISTS] db_name
  1736. `CREATE DATABASE' creates a database with the given name.  Rules for
  1737. allowable database names are given in *Note Legal names::.  An error
  1738. occurs if the database already exists and you didn't specify `IF NOT
  1739. EXISTS'.
  1740. Databases in *MySQL* are implemented as directories containing files
  1741. that correspond to tables in the database.  Because there are no tables
  1742. in a database when it is initially created, the `CREATE DATABASE'
  1743. statement only creates a directory under the *MySQL* data directory.
  1744. You can also create databases with `mysqladmin'.  *Note Programs::.
  1745. `DROP DATABASE' Syntax
  1746. ======================
  1747.      DROP DATABASE [IF EXISTS] db_name
  1748. `DROP DATABASE' drops all tables in the database and deletes the
  1749. database.  If you do a `DROP DATABASE' on a symbolic linked database,
  1750. both the link and the original database is deleted. *Be VERY careful
  1751. with this command!*
  1752. `DROP DATABASE' returns the number of files that were removed from the
  1753. database directory.  Normally, this is three times the number of
  1754. tables, because normally each table corresponds to a `.MYD' file, a
  1755. `.MYI' file, and a `.frm' file.
  1756. The `DROP DATABASE' command removes from the given database directory
  1757. all files with the following extensions:
  1758. .BAK               .DAT               .HSH               .ISD
  1759. .ISM               .ISM               .MRG               .MYD
  1760. .MYI               .db                .frm               
  1761. All subdirectories that consists of 2 digits (`RAID' directories) are
  1762. also removed.
  1763. In *MySQL* Version 3.22 or later, you can use the keywords `IF EXISTS'
  1764. to prevent an error from occurring if the database doesn't exist.
  1765. You can also drop databases with `mysqladmin'. *Note Programs::.
  1766. `CREATE TABLE' Syntax
  1767. =====================
  1768.      CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)]
  1769.      [table_options] [select_statement]
  1770.      
  1771.      create_definition:
  1772.        col_name type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT]
  1773.                  [PRIMARY KEY] [reference_definition]
  1774.        or    PRIMARY KEY (index_col_name,...)
  1775.        or    KEY [index_name] (index_col_name,...)
  1776.        or    INDEX [index_name] (index_col_name,...)
  1777.        or    UNIQUE [INDEX] [index_name] (index_col_name,...)
  1778.        or    FULLTEXT [INDEX] [index_name] (index_col_name,...)
  1779.        or    [CONSTRAINT symbol] FOREIGN KEY index_name (index_col_name,...)
  1780.                  [reference_definition]
  1781.        or    CHECK (expr)
  1782.      
  1783.      type:
  1784.              TINYINT[(length)] [UNSIGNED] [ZEROFILL]
  1785.        or    SMALLINT[(length)] [UNSIGNED] [ZEROFILL]
  1786.        or    MEDIUMINT[(length)] [UNSIGNED] [ZEROFILL]
  1787.        or    INT[(length)] [UNSIGNED] [ZEROFILL]
  1788.        or    INTEGER[(length)] [UNSIGNED] [ZEROFILL]
  1789.        or    BIGINT[(length)] [UNSIGNED] [ZEROFILL]
  1790.        or    REAL[(length,decimals)] [UNSIGNED] [ZEROFILL]
  1791.        or    DOUBLE[(length,decimals)] [UNSIGNED] [ZEROFILL]
  1792.        or    FLOAT[(length,decimals)] [UNSIGNED] [ZEROFILL]
  1793.        or    DECIMAL(length,decimals) [UNSIGNED] [ZEROFILL]
  1794.        or    NUMERIC(length,decimals) [UNSIGNED] [ZEROFILL]
  1795.        or    CHAR(length) [BINARY]
  1796.        or    VARCHAR(length) [BINARY]
  1797.        or    DATE
  1798.        or    TIME
  1799.        or    TIMESTAMP
  1800.        or    DATETIME
  1801.        or    TINYBLOB
  1802.        or    BLOB
  1803.        or    MEDIUMBLOB
  1804.        or    LONGBLOB
  1805.        or    TINYTEXT
  1806.        or    TEXT
  1807.        or    MEDIUMTEXT
  1808.        or    LONGTEXT
  1809.        or    ENUM(value1,value2,value3,...)
  1810.        or    SET(value1,value2,value3,...)
  1811.      
  1812.      index_col_name:
  1813.              col_name [(length)]
  1814.      
  1815.      reference_definition:
  1816.              REFERENCES tbl_name [(index_col_name,...)]
  1817.                         [MATCH FULL | MATCH PARTIAL]
  1818.                         [ON DELETE reference_option]
  1819.                         [ON UPDATE reference_option]
  1820.      
  1821.      reference_option:
  1822.              RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT
  1823.      
  1824.      table_options:
  1825.       TYPE = {BDB | HEAP | ISAM | INNOBASE | MERGE | MYISAM }
  1826.      or AUTO_INCREMENT = #
  1827.      or AVG_ROW_LENGTH = #
  1828.      or CHECKSUM = {0 | 1}
  1829.      or COMMENT = "string"
  1830.      or MAX_ROWS = #
  1831.      or MIN_ROWS = #
  1832.      or PACK_KEYS = {0 | 1}
  1833.      or PASSWORD = "string"
  1834.      or DELAY_KEY_WRITE = {0 | 1}
  1835.      or      ROW_FORMAT= { default | dynamic | static | compressed }
  1836.      or RAID_TYPE= {1 | STRIPED | RAID0 } RAID_CHUNKS=#  RAID_CHUNKSIZE=#
  1837.      or UNION = (table_name,[table_name...])
  1838.      
  1839.      select_statement:
  1840.       [IGNORE | REPLACE] SELECT ...  (Some legal select statement)
  1841. `CREATE TABLE' creates a table with the given name in the current
  1842. database.  Rules for allowable table names are given in *Note Legal
  1843. names::.  An error occurs if there is no current database or if the
  1844. table already exists.
  1845. In *MySQL* Version 3.22 or later, the table name can be specified as
  1846. `db_name.tbl_name'.  This works whether or not there is a current
  1847. database.
  1848. In *MySQL* Version 3.23, you can use the `TEMPORARY' keyword when you
  1849. create a table.  A temporary table will automatically be deleted if a
  1850. connection dies and the name is per connection.  This means that two
  1851. different connections can both use the same temporary table name
  1852. without conflicting with each other or with an existing table of the
  1853. same name. (The existing table is hidden until the temporary table is
  1854. deleted).
  1855. In *MySQL* Version 3.23 or later, you can use the keywords `IF NOT
  1856. EXISTS' so that an error does not occur if the table already exists.
  1857. Note that there is no verification that the table structures are
  1858. identical.
  1859. Each table `tbl_name' is represented by some files in the database
  1860. directory. In the case of MyISAM-type tables you will get:
  1861. *File*         *Purpose*
  1862. `tbl_name.frm' Table definition (form) file
  1863. `tbl_name.MYD' Data file
  1864. `tbl_name.MYI' Index file
  1865. For more information on the properties of the various column types, see
  1866. *Note Column types:::
  1867.    * If neither `NULL' nor `NOT NULL' is specified, the column is
  1868.      treated as though `NULL' had been specified.
  1869.    * An integer column may have the additional attribute
  1870.      `AUTO_INCREMENT'.  When you insert a value of `NULL' (recommended)
  1871.      or `0' into an `AUTO_INCREMENT' column, the column is set to
  1872.      `value+1', where `value' is the largest value for the column
  1873.      currently in the table.  `AUTO_INCREMENT' sequences begin with `1'.
  1874.      *Note `mysql_insert_id()': mysql_insert_id.
  1875.      If you delete the row containing the maximum value for an
  1876.      `AUTO_INCREMENT' column, the value will be reused with an ISAM
  1877.      table but not with a `MyISAM' table.  If you delete all rows in the
  1878.      table with `DELETE FROM table_name' (without a `WHERE') in
  1879.      `AUTOCOMMIT' mode, the sequence starts over for both table types.
  1880.      *NOTE:* There can be only one `AUTO_INCREMENT' column per table,
  1881.      and it must be indexed. *MySQL* Version 3.23 will also only work
  1882.      properly if the auto_increment column only has positive values.
  1883.      Inserting a negative number is regarded as inserting a very large
  1884.      positive number.  This is done to avoid precision problems when
  1885.      numbers 'wrap' over from positive to negative and also to ensure
  1886.      that one doesn't accidently get an auto_increment column that
  1887.      contains 0.
  1888.      To make *MySQL* compatible with some ODBC applications, you can
  1889.      find the last inserted row with the following query:
  1890.           SELECT * FROM tbl_name WHERE auto_col IS NULL
  1891.    * `NULL' values are handled differently for `TIMESTAMP' columns than
  1892.      for other column types.  You cannot store a literal `NULL' in a
  1893.      `TIMESTAMP' column; setting the column to `NULL' sets it to the
  1894.      current date and time.  Because `TIMESTAMP' columns behave this
  1895.      way, the `NULL' and `NOT NULL' attributes do not apply in the
  1896.      normal way and are ignored if you specify them.
  1897.      On the other hand, to make it easier for *MySQL* clients to use
  1898.      `TIMESTAMP' columns, the server reports that such columns may be
  1899.      assigned `NULL' values (which is true), even though `TIMESTAMP'
  1900.      never actually will contain a `NULL' value.  You can see this when
  1901.      you use `DESCRIBE tbl_name' to get a description of your table.
  1902.      Note that setting a `TIMESTAMP' column to `0' is not the same as
  1903.      setting it to `NULL', because `0' is a valid `TIMESTAMP' value.
  1904.    * If no `DEFAULT' value is specified for a column, *MySQL*
  1905.      automatically assigns one.
  1906.      If the column may take `NULL' as a value, the default value is
  1907.      `NULL'.
  1908.      If the column is declared as `NOT NULL', the default value depends
  1909.      on the column type:
  1910.         - For numeric types other than those declared with the
  1911.           `AUTO_INCREMENT' attribute, the default is `0'.  For an
  1912.           `AUTO_INCREMENT' column, the default value is the next value
  1913.           in the sequence.
  1914.         - For date and time types other than `TIMESTAMP', the default
  1915.           is the appropriate zero value for the type.  For the first
  1916.           `TIMESTAMP' column in a table, the default value is the
  1917.           current date and time.  *Note Date and time types::.
  1918.         - For string types other than `ENUM', the default value is the
  1919.           empty string.  For `ENUM', the default is the first
  1920.           enumeration value.
  1921.      Default values must be constants. This means, for example, that
  1922.      you cannot set the default for a date column to be the value of a
  1923.      function such as `NOW()' or `CURRENT_DATE'.
  1924.    * `KEY' is a synonym for `INDEX'.
  1925.    * In *MySQL*, a `UNIQUE' key can have only distinct values. An error
  1926.      occurs if you try to add a new row with a key that matches an
  1927.      existing row.
  1928.    * A `PRIMARY KEY' is a unique `KEY' with the extra constraint that
  1929.      all key columns must be defined as `NOT NULL'.  In *MySQL* the key
  1930.      is named `PRIMARY'. A table can have only one `PRIMARY KEY'.  If
  1931.      you don't have a `PRIMARY KEY' and some applications ask for the
  1932.      `PRIMARY KEY' in your tables, *MySQL* will return the first
  1933.      `UNIQUE' key, which doesn't have any `NULL' columns, as the
  1934.      `PRIMARY KEY'.
  1935.    * A `PRIMARY KEY' can be a multiple-column index.  However, you
  1936.      cannot create a multiple-column index using the `PRIMARY KEY' key
  1937.      attibute in a column specification.  Doing so will mark only that
  1938.      single column as primary.  You must use the `PRIMARY
  1939.      KEY(index_col_name, ...)' syntax.
  1940.    * If the `PRIMARY' or `UNIQUE' key consists of only one column and
  1941.      this is of type integer, you can also refer to it as `_rowid' (new
  1942.      in Version 3.23.11).
  1943.    * If you don't assign a name to an index, the index will be assigned
  1944.      the same name as the first `index_col_name', with an optional
  1945.      suffix (`_2', `_3', `...') to make it unique.  You can see index
  1946.      names for a table using `SHOW INDEX FROM tbl_name'.  *Note `SHOW':
  1947.      SHOW.
  1948.    * Only the `MyISAM' table type supports indexes on columns that can
  1949.      have `NULL' values. In other cases you must declare such columns
  1950.      `NOT NULL' or an error results.
  1951.    * With `col_name(length)' syntax, you can specify an index that uses
  1952.      only a part of a `CHAR' or `VARCHAR' column. This can make the
  1953.      index file much smaller.  *Note Indexes::.
  1954.    * Only the `MyISAM' table type supports indexing on `BLOB' and
  1955.      `TEXT' columns.  When putting an index on a `BLOB' or `TEXT'
  1956.      column you MUST always specify the length of the index:
  1957.           CREATE TABLE test (blob_col BLOB, index(blob_col(10)));
  1958.    * When you use `ORDER BY' or `GROUP BY' with a `TEXT' or `BLOB'
  1959.      column, only the first `max_sort_length' bytes are used.  *Note
  1960.      `BLOB': BLOB.
  1961.    * In *MySQL* Version 3.23.23 or later, you can also create special
  1962.      *FULLTEXT* indexes. They are used for full-text search. Only the
  1963.      `MyISAM' table type supports `FULLTEXT' indexes. They can be
  1964.      created only from `VARCHAR' and `TEXT' columns.  Indexing always
  1965.      happens over the entire column, partial indexing is not supported.
  1966.      See *Note MySQL full-text search:: for details of operation.
  1967.    * The `FOREIGN KEY', `CHECK', and `REFERENCES' clauses don't
  1968.      actually do anything.  The syntax for them is provided only for
  1969.      compatibility, to make it easier to port code from other SQL
  1970.      servers and to run applications that create tables with references.
  1971.      *Note Missing functions::.
  1972.    * Each `NULL' column takes one bit extra, rounded up to the nearest
  1973.      byte.
  1974.    * The maximum record length in bytes can be calculated as follows:
  1975.           row length = 1
  1976.                        + (sum of column lengths)
  1977.                        + (number of NULL columns + 7)/8
  1978.                        + (number of variable-length columns)
  1979.    * The `table_options' and `SELECT' options are only implemented in
  1980.      *MySQL* Version 3.23 and above.
  1981.      The different table types are:
  1982.      BDB or        Transaction-safe tables with page locking. *Note
  1983.      Berkeley_db   BDB::.
  1984.      GEMINI        Transaction-safe tables with row-level locking *Note
  1985.                    GEMINI::.
  1986.      HEAP          The data for this table is only stored in memory.
  1987.                    *Note HEAP::.
  1988.      ISAM          The original table handler. *Note ISAM::.
  1989.      INNOBASE      Transaction-safe tables with row locking. *Note
  1990.                    INNOBASE::.
  1991.      MERGE         A collection of MyISAM tables used as one table.
  1992.                    *Note MERGE::.
  1993.      MyISAM        The new binary portable table handler that is
  1994.                    replacing ISAM. *Note MyISAM::.
  1995.      *Note Table types::.
  1996.      If a table type is specified, and that particular type is not
  1997.      available, *MySQL* will choose the closest table type to the one
  1998.      that you have specified.  For example, if `TYPE=BDB' is specified,
  1999.      and that distribution of *MySQL* does not support `BDB' tables,
  2000.      the table will be created as `MyISAM' instead.
  2001.      The other table options are used to optimize the behavior of the
  2002.      table. In most cases, you don't have to specify any of them.  The
  2003.      options work for all table types, if not otherwise indicated:
  2004.      `AUTO_INCREMENT'The next auto_increment value you want to set for
  2005.                    your table (MyISAM).
  2006.      `AVG_ROW_LENGTH'An approximation of the average row length for your
  2007.                    table. You only need to set this for large tables
  2008.                    with variable size records.
  2009.      `CHECKSUM'    Set this to 1 if you want *MySQL* to maintain a
  2010.                    checksum for all rows (makes the table a little
  2011.                    slower to update but makes it easier to find
  2012.                    corrupted tables) (MyISAM).
  2013.      `COMMENT'     A 60-character comment for your table.
  2014.      `MAX_ROWS'    Max number of rows you plan to store in the table.
  2015.      `MIN_ROWS'    Minimum number of rows you plan to store in the table.
  2016.      `PACK_KEYS'   Set this to 1 if you want to have a smaller index.
  2017.                    This usually makes updates slower and reads faster
  2018.                    (MyISAM, ISAM).
  2019.      `PASSWORD'    Encrypt the `.frm' file with a password.  This option
  2020.                    doesn't do anything in the standard *MySQL* version.
  2021.      `DELAY_KEY_WRITE'Set this to 1 if want to delay key table updates
  2022.                    until the table is closed (MyISAM).
  2023.      `ROW_FORMAT'  Defines how the rows should be stored (for the
  2024.                    future).
  2025.      When you use a `MyISAM' table, *MySQL* uses the product of
  2026.      `max_rows * avg_row_length' to decide how big the resulting table
  2027.      will be.  If you don't specify any of the above options, the
  2028.      maximum size for a table will be 4G (or 2G if your operating
  2029.      systems only supports 2G tables). The reason for this is just to
  2030.      keep down the pointer sizes to make the index smaller and faster
  2031.      if you don't really need big files.
  2032.      If you don't use `PACK_KEYS', the default is to only pack strings,
  2033.      not numbers.  If you use `PACK_KEYS=1', numbers will be packed as
  2034.      well.
  2035.      When packing binary number keys, *MySQL* will use prefix
  2036.      compression.  This means that you will only get a big benefit of
  2037.      this if you have many numbers that are the same.  Prefix
  2038.      compression means that every key needs one extra byte to indicate
  2039.      how many bytes of the previous key are the same for the next key
  2040.      (note that the pointer to the row is stored in
  2041.      high-byte-first-order directly after the key, to improve
  2042.      compression.)  This means that if you have many equal keys on two
  2043.      rows in a row, all following 'same' keys will usually only take 2
  2044.      bytes (including the pointer to the row).  Compare this to the
  2045.      ordinary case where the following keys will take
  2046.      storage_size_for_key + pointer_size (usually 4).  On the other
  2047.      hand, if all keys are totally different, you will lose 1 byte per
  2048.      key, if the key isn't a key that can have `NULL' values (In this
  2049.      case the packed key length will be stored in the same byte that is
  2050.      used to mark if a key is `NULL'.)
  2051.    * If you specify a `SELECT' after the `CREATE STATEMENT', *MySQL*
  2052.      will create new fields for all elements in the `SELECT'.  For
  2053.      example:
  2054.           mysql> CREATE TABLE test (a int not null auto_increment,
  2055.                      primary key (a), key(b))
  2056.                      TYPE=MyISAM SELECT b,c from test2;
  2057.      This will create a `MyISAM' table with 3 columns.  Note that the
  2058.      table will automatically be deleted if any errors occur while
  2059.      copying data into the table.
  2060.    * The `RAID_TYPE' option will help you to break the 2G/4G limit for
  2061.      the MyISAM data file (not the index file) on operating systems
  2062.      that don't support big files. You can get also more speed from the
  2063.      I/O bottleneck by putting `RAID' directories on different physical
  2064.      disks. `RAID_TYPE' will work on any OS, as long as you have
  2065.      configured *MySQL* with `--with-raid'.  For now the only allowed
  2066.      `RAID_TYPE' is `STRIPED' (`1' and `RAID0' are aliases for this).
  2067.      If you specify `RAID_TYPE=STRIPED' for a `MyISAM' table, `MyISAM'
  2068.      will create `RAID_CHUNKS' subdirectories named 00, 01, 02 in the
  2069.      database directory.  In each of these directories `MyISAM' will
  2070.      create a `table_name.MYD'.  When writing data to the data file,
  2071.      the `RAID' handler will map the first `RAID_CHUNKSIZE' *1024 bytes
  2072.      to the first file, the next `RAID_CHUNKSIZE' *1024 bytes to the
  2073.      next file and so on.
  2074.    * `UNION' is used when you want to use a collection of identical
  2075.      tables as one. This only works with MERGE tables. *Note MERGE::.
  2076.      For the moment you need to have `SELECT', `UPDATE', and `DELETE'
  2077.      privileges on the tables you map to a `MERGE' table.  All mapped
  2078.      tables must be in the same database as the `MERGE' table.
  2079.    * In the created table the `PRIMARY' key will be placed first,
  2080.      followed by all `UNIQUE' keys and then the normal keys.  This
  2081.      helps the *MySQL* optimizer to prioritize which key to use and
  2082.      also more quickly detect duplicated `UNIQUE' keys.
  2083. Silent Column Specification Changes
  2084. -----------------------------------
  2085. In some cases, *MySQL* silently changes a column specification from
  2086. that given in a `CREATE TABLE' statement.  (This may also occur with
  2087. `ALTER TABLE'.):
  2088.    * `VARCHAR' columns with a length less than four are changed to
  2089.      `CHAR'.
  2090.    * If any column in a table has a variable length, the entire row is
  2091.      variable-length as a result.  Therefore, if a table contains any
  2092.      variable-length columns (`VARCHAR', `TEXT', or `BLOB'), all `CHAR'
  2093.      columns longer than three characters are changed to `VARCHAR'
  2094.      columns.  This doesn't affect how you use the columns in any way;
  2095.      in *MySQL*, `VARCHAR' is just a different way to store characters.
  2096.      *MySQL* performs this conversion because it saves space and makes
  2097.      table operations faster.  *Note Table types::.
  2098.    * `TIMESTAMP' display sizes must be even and in the range from 2 to
  2099.      14.  If you specify a display size of 0 or greater than 14, the
  2100.      size is coerced to 14.  Odd-valued sizes in the range from 1 to 13
  2101.      are coerced to the next higher even number.
  2102.    * You cannot store a literal `NULL' in a `TIMESTAMP' column; setting
  2103.      it to `NULL' sets it to the current date and time.  Because
  2104.      `TIMESTAMP' columns behave this way, the `NULL' and `NOT NULL'
  2105.      attributes do not apply in the normal way and are ignored if you
  2106.      specify them.  `DESCRIBE tbl_name' always reports that a
  2107.      `TIMESTAMP' column may be assigned `NULL' values.
  2108.    * *MySQL* maps certain column types used by other SQL database
  2109.      vendors to *MySQL* types.  *Note Other-vendor column types::.
  2110. If you want to see whether or not *MySQL* used a column type other than
  2111. the one you specified, issue a `DESCRIBE tbl_name' statement after
  2112. creating or altering your table.
  2113. Certain other column type changes may occur if you compress a table
  2114. using `myisampack'. *Note Compressed format::.
  2115. `ALTER TABLE' Syntax
  2116. ====================
  2117.      ALTER [IGNORE] TABLE tbl_name alter_spec [, alter_spec ...]
  2118.      
  2119.      alter_specification:
  2120.              ADD [COLUMN] create_definition [FIRST | AFTER column_name ]
  2121.        or    ADD [COLUMN] (create_definition, create_definition,...)
  2122.        or    ADD INDEX [index_name] (index_col_name,...)
  2123.        or    ADD PRIMARY KEY (index_col_name,...)
  2124.        or    ADD UNIQUE [index_name] (index_col_name,...)
  2125.        or    ADD FULLTEXT [index_name] (index_col_name,...)
  2126.        or ADD [CONSTRAINT symbol] FOREIGN KEY index_name (index_col_name,...)
  2127.                  [reference_definition]
  2128.        or    ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
  2129.        or    CHANGE [COLUMN] old_col_name create_definition
  2130.        or    MODIFY [COLUMN] create_definition
  2131.        or    DROP [COLUMN] col_name
  2132.        or    DROP PRIMARY KEY
  2133.        or    DROP INDEX index_name
  2134.        or    RENAME [TO] new_tbl_name
  2135.        or    ORDER BY col
  2136.        or    table_options
  2137. `ALTER TABLE' allows you to change the structure of an existing table.
  2138. For example, you can add or delete columns, create or destroy indexes,
  2139. change the type of existing columns, or rename columns or the table
  2140. itself.  You can also change the comment for the table and type of the
  2141. table.  *Note `CREATE TABLE': CREATE TABLE.
  2142. If you use `ALTER TABLE' to change a column specification but `DESCRIBE
  2143. tbl_name' indicates that your column was not changed, it is possible
  2144. that *MySQL* ignored your modification for one of the reasons described
  2145. in *Note Silent column changes::.  For example, if you try to change a
  2146. `VARCHAR' column to `CHAR', *MySQL* will still use `VARCHAR' if the
  2147. table contains other variable-length columns.
  2148. `ALTER TABLE' works by making a temporary copy of the original table.
  2149. The alteration is performed on the copy, then the original table is
  2150. deleted and the new one is renamed. This is done in such a way that all
  2151. updates are automatically redirected to the new table without any
  2152. failed updates. While `ALTER TABLE' is executing, the original table is
  2153. readable by other clients. Updates and writes to the table are stalled
  2154. until the new table is ready:
  2155.    * To use `ALTER TABLE', you need *select*, *insert*, *delete*,
  2156.      *update*, *create*, and *drop* privileges on the table.
  2157.    * `IGNORE' is a *MySQL* extension to ANSI SQL92.  It controls how
  2158.      `ALTER TABLE' works if there are duplicates on unique keys in the
  2159.      new table.  If `IGNORE' isn't specified, the copy is aborted and
  2160.      rolled back.  If `IGNORE' is specified, then for rows with
  2161.      duplicates on a unique key, only the first row is used; the others
  2162.      are deleted.
  2163.    * You can issue multiple `ADD', `ALTER', `DROP', and `CHANGE'
  2164.      clauses in a single `ALTER TABLE' statement. This is a *MySQL*
  2165.      extension to ANSI SQL92, which allows only one of each clause per
  2166.      `ALTER TABLE' statement.
  2167.    * `CHANGE col_name', `DROP col_name', and `DROP INDEX' are *MySQL*
  2168.      extensions to ANSI SQL92.
  2169.    * `MODIFY' is an Oracle extension to `ALTER TABLE'.
  2170.    * `TRUNCATE' is an Oracle extension. *Note TRUNCATE::.
  2171.    * The optional word `COLUMN' is a pure noise word and can be omitted.
  2172.    * If you use `ALTER TABLE tbl_name RENAME TO new_name' without any
  2173.      other options, *MySQL* simply renames the files that correspond to
  2174.      the table `tbl_name'.  There is no need to create the temporary
  2175.      table.  *Note `RENAME TABLE': RENAME TABLE.
  2176.    * `create_definition' clauses use the same syntax for `ADD' and
  2177.      `CHANGE' as for `CREATE TABLE'.  Note that this syntax includes
  2178.      the column name, not just the column type.  *Note `CREATE TABLE':
  2179.      CREATE TABLE.
  2180.    * You can rename a column using a `CHANGE old_col_name
  2181.      create_definition' clause.  To do so, specify the old and new
  2182.      column names and the type that the column currently has.  For
  2183.      example, to rename an `INTEGER' column from `a' to `b', you can do
  2184.      this:
  2185.           mysql> ALTER TABLE t1 CHANGE a b INTEGER;
  2186.      If you want to change a column's type but not the name, `CHANGE'
  2187.      syntax still requires two column names even if they are the same.
  2188.      For example:
  2189.           mysql> ALTER TABLE t1 CHANGE b b BIGINT NOT NULL;
  2190.      However, as of *MySQL* Version 3.22.16a, you can also use `MODIFY'
  2191.      to change a column's type without renaming it:
  2192.           mysql> ALTER TABLE t1 MODIFY b BIGINT NOT NULL;
  2193.    * If you use `CHANGE' or `MODIFY' to shorten a column for which an
  2194.      index exists on part of the column (for instance, if you have an
  2195.      index on the first 10 characters of a `VARCHAR' column), you
  2196.      cannot make the column shorter than the number of characters that
  2197.      are indexed.
  2198.    * When you change a column type using `CHANGE' or `MODIFY', *MySQL*
  2199.      tries to convert data to the new type as well as possible.
  2200.    * In *MySQL* Version 3.22 or later, you can use `FIRST' or `ADD ...
  2201.      AFTER col_name' to add a column at a specific position within a
  2202.      table row. The default is to add the column last.
  2203.    * `ALTER COLUMN' specifies a new default value for a column or
  2204.      removes the old default value.  If the old default is removed and
  2205.      the column can be `NULL', the new default is `NULL'. If the column
  2206.      cannot be `NULL', *MySQL* assigns a default value.  Default value
  2207.      assignment is described in *Note `CREATE TABLE': CREATE TABLE.
  2208.    * `DROP INDEX' removes an index. This is a *MySQL* extension to ANSI
  2209.      SQL92.
  2210.    * If columns are dropped from a table, the columns are also removed
  2211.      from any index of which they are a part.  If all columns that make
  2212.      up an index are dropped, the index is dropped as well.
  2213.    * `DROP PRIMARY KEY' drops the primary index. If no such index
  2214.      exists, it drops the first `UNIQUE' index in the table.  (*MySQL*
  2215.      marks the first `UNIQUE' key as the `PRIMARY KEY' if no `PRIMARY
  2216.      KEY' was specified explicitly.)
  2217.    * `ORDER BY' allows you to create the new table with the rows in a
  2218.      specific order.  Note that the table will not remain in this order
  2219.      after inserts and deletes.  In some cases, it may make sorting
  2220.      easier for *MySQL* if the table is in order by the column that you
  2221.      wish to order it by later.  This option is mainly useful when you
  2222.      know that you are mostly going to query the rows in a certain
  2223.      order; By using this option after big changes to the table, you
  2224.      may be able to get higher performance.
  2225.    * If you use `ALTER TABLE' on a `MyISAM' table, all non-unique
  2226.      indexes are created in a separate batch (like in `REPAIR').  This
  2227.      should make `ALTER TABLE' much faster when you have many indexes.
  2228.    * With the C API function `mysql_info()', you can find out how many
  2229.      records were copied, and (when `IGNORE' is used) how many records
  2230.      were deleted due to duplication of unique key values.
  2231.    * The `FOREIGN KEY', `CHECK', and `REFERENCES' clauses don't
  2232.      actually do anything.  The syntax for them is provided only for
  2233.      compatibility, to make it easier to port code from other SQL
  2234.      servers and to run applications that create tables with references.
  2235.      *Note Missing functions::.
  2236. Here is an example that shows some of the uses of `ALTER TABLE'.  We
  2237. begin with a table `t1' that is created as shown below:
  2238.      mysql> CREATE TABLE t1 (a INTEGER,b CHAR(10));
  2239. To rename the table from `t1' to `t2':
  2240.      mysql> ALTER TABLE t1 RENAME t2;
  2241. To change column `a' from `INTEGER' to `TINYINT NOT NULL' (leaving the
  2242. name the same), and to change column `b' from `CHAR(10)' to `CHAR(20)'
  2243. as well as renaming it from `b' to `c':
  2244.      mysql> ALTER TABLE t2 MODIFY a TINYINT NOT NULL, CHANGE b c CHAR(20);
  2245. To add a new `TIMESTAMP' column named `d':
  2246.      mysql> ALTER TABLE t2 ADD d TIMESTAMP;
  2247. To add an index on column `d', and make column `a' the primary key:
  2248.      mysql> ALTER TABLE t2 ADD INDEX (d), ADD PRIMARY KEY (a);
  2249. To remove column `c':
  2250.      mysql> ALTER TABLE t2 DROP COLUMN c;
  2251. To add a new `AUTO_INCREMENT' integer column named `c':
  2252.      mysql> ALTER TABLE t2 ADD c INT UNSIGNED NOT NULL AUTO_INCREMENT,
  2253.                 ADD INDEX (c);
  2254. Note that we indexed `c', because `AUTO_INCREMENT' columns must be
  2255. indexed, and also that we declare `c' as `NOT NULL', because indexed
  2256. columns cannot be `NULL'.
  2257. When you add an `AUTO_INCREMENT' column, column values are filled in
  2258. with sequence numbers for you automatically.  You can set the first
  2259. sequence number by executing `SET INSERT_ID=#' before `ALTER TABLE' or
  2260. using the `AUTO_INCREMENT = #' table option.  *Note SET OPTION::.
  2261. *Note ALTER TABLE problems::.
  2262. `RENAME TABLE' Syntax
  2263. =====================
  2264.      RENAME TABLE tbl_name TO new_table_name[, tbl_name2 TO new_table_name2,...]