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

MySQL数据库

开发平台:

Visual C++

  1. The rename is done atomically, which means that no other thread can
  2. access any of the tables while the rename is running. This makes it
  3. possible to replace a table with an empty one:
  4.      CREATE TABLE new_table (...);
  5.      RENAME TABLE old_table TO backup_table, new_table TO old_table;
  6. The rename is done from left to right, which means that if you want to
  7. swap two tables names, you have to:
  8.      RENAME TABLE old_table    TO backup_table,
  9.                   new_table    TO old_table,
  10.                   backup_table TO new_table;
  11. As long as two databases are on the same disk you can also rename from
  12. one database to another:
  13.      RENAME TABLE current_database.table_name TO other_database.table_name;
  14. When you execute `RENAME', you can't have any locked tables or active
  15. transactions.  You must also have the `ALTER' and `DROP' privilege on
  16. the original table and `CREATE' and `INSERT' privilege on the new table.
  17. If *MySQL* encounters any errors in a multiple table rename, it will do
  18. a reverse rename for all renamed tables to get everything back to the
  19. original state.
  20. `DROP TABLE' Syntax
  21. ===================
  22.      DROP TABLE [IF EXISTS] tbl_name [, tbl_name,...] [RESTRICT | CASCADE]
  23. `DROP TABLE' removes one or more tables. All table data and the table
  24. definition are _removed_, so *be careful* with this command!
  25. In *MySQL* Version 3.22 or later, you can use the keywords `IF EXISTS'
  26. to prevent an error from occurring for tables that don't exist.
  27. `RESTRICT' and `CASCADE' are allowed to make porting easier.  For the
  28. moment they don't do anything.
  29. *NOTE*: `DROP TABLE' is not transaction safe and will automaticly
  30. commit any active transactions.
  31. `OPTIMIZE TABLE' Syntax
  32. =======================
  33.      OPTIMIZE TABLE tbl_name[,tbl_name]...
  34. `OPTIMIZE TABLE' should be used if you have deleted a large part of a
  35. table or if you have made many changes to a table with variable-length
  36. rows (tables that have `VARCHAR', `BLOB', or `TEXT' columns).  Deleted
  37. records are maintained in a linked list and subsequent `INSERT'
  38. operations reuse old record positions. You can use `OPTIMIZE TABLE' to
  39. reclaim the unused space and to defragment the data file.
  40. For the moment `OPTIMIZE TABLE' only works on *MyISAM* and `BDB'
  41. tables. For `BDB' tables, `OPTIMIZE TABLE' is currently mapped to
  42. `ANALYZE TABLE'. *Note ANALYZE TABLE::.
  43. You can get optimize table to work on other table types by starting
  44. `mysqld' with `--skip-new' or `--safe-mode', but in this case `OPTIMIZE
  45. TABLE' is just mapped to `ALTER TABLE'.
  46. `OPTIMIZE TABLE' works the following way:
  47.    * If the table has deleted or split rows, repair the table.
  48.    * If the index pages are not sorted, sort them.
  49.    * If the statistics are not up to date (and the repair couldn't be
  50.      done by sorting the index), update them.
  51. `OPTIMIZE TABLE' for `MyISAM' tables is equvialent of running
  52. `myisamchk --quick --check-changed-tables --sort-index --analyze' on
  53. the table.
  54. Note that the table is locked during the time `OPTIMIZE TABLE' is
  55. running!
  56. `CHECK TABLE' Syntax
  57. ====================
  58.      CHECK TABLE tbl_name[,tbl_name...] [option [option...]]
  59.      
  60.      option = QUICK | FAST | MEDIUM | EXTEND | CHANGED
  61. `CHECK TABLE' only works on `MyISAM' tables. On `MyISAM' tables it's
  62. the same thing as running `myisamchk -m table_name' on the table.
  63. If you don't specify any option `MEDIUM' is used.
  64. Checks the table(s) for errors. For `MyISAM' tables the key statistics
  65. is updated. The command returns a table with the following columns:
  66. *Column*                  *Value*
  67. Table                     Table name.
  68. Op                        Always "check".
  69. Msg_type                  One of `status', `error', `info', or `warning'.
  70. Msg_text                  The message.
  71. Note that you can get many rows of information for each checked table.
  72. The last row will be of `Msg_type status' and should normally be `OK'.
  73. If you don't get `OK', or `Not checked' you should normally run a
  74. repair of the table. *Note Table maintenance::. `Not checked' means
  75. that the table the given `TYPE' told *MySQL* that there wasn't any need
  76. to check the table.
  77. The different check types stand for the following:
  78. *Type*         *Meaning*
  79. `QUICK'        Don't scan the rows to check for wrong links.
  80. `FAST'         Only check tables which haven't been closed properly.
  81. `CHANGED'      Only check tables which have been changed since last
  82.                check or haven't been closed properly.
  83. `MEDIUM'       Scan rows to verify that deleted links are ok. This also
  84.                calculates a key checksum for the rows and verifies this
  85.                with a calcualted checksum for the keys.
  86. `EXTENDED'     Do a full key lookup for all keys for each row.  This
  87.                ensures that the table is 100 % consistent, but will take
  88.                a long time!
  89. For dynamic sized `MyISAM' tables a started check will always do a
  90. `MEDIUM' check. For static size rows we skip the row scan for `QUICK'
  91. and `FAST' as the rows are very seldom corrupted.
  92. You can combine check options as in:
  93.      CHECK TABLE test_table FAST QUICK;
  94. Which only would do a quick check on the table if it wasn't closed
  95. properly.
  96. *NOTE:* that in some case `CHECK TABLE' will change the table!  This
  97. happens if the table is marked as 'corrupted' or 'not closed properly'
  98. but `CHECK TABLE' didn't find any problems in the table.  In this case
  99. `CHECK TABLE' will mark the table as ok.
  100. If a table is corrupted, then it's most likely that the problem is in
  101. the indexes and not in the data part.  All of the above check types
  102. checks the indexes throughly and should thus find most errors.
  103. If you just want to check a table that you assume is ok, you should use
  104. no check options or the `QUICK' option. The later should be used when
  105. you are in a hurry and can take the very small risk that `QUICK' didn't
  106. find an error in the data file (In most cases *MySQL* should find,
  107. under normal usage, any error in the data file. If this happens then
  108. the table will be marked as 'corrupted', in which case the table can't
  109. be used until it's repaired).
  110. `FAST' and `CHANGED' are mostly intended to be used from a script (for
  111. example to be executed from cron) if you want to check your table from
  112. time to time. In most cases you `FAST' is to be prefered over
  113. `CHANGED'.  (The only case when it isn't is when you suspect a bug you
  114. have found a bug in the `MyISAM' code.).
  115. `EXTENDED' is only to be used after you have run a normal check but
  116. still get strange errors from a table when *MySQL* tries to update a
  117. row or find a row by key (this is VERY unlikely to happen if a normal
  118. check has succeeded!).
  119. `BACKUP TABLE' Syntax
  120. =====================
  121.      BACKUP TABLE tbl_name[,tbl_name...] TO '/path/to/backup/directory'
  122. Make a copy of all the table files to the backup directory that are the
  123. minimum needed to restore it. Currenlty only works for `MyISAM' tables.
  124. For `MyISAM' table, copies `.frm' (definition)  and `.MYD' (data)
  125. files. The index file can be rebuilt from those two.
  126. During the backup, read lock will be held for each table, one at time,
  127. as they are being backed up. If you want to backup several tables as a
  128. snapshot, you must first issue `LOCK TABLES' obtaining a read lock for
  129. each table in the group.
  130. The command returns a table with the following columns:
  131. *Column*                  *Value*
  132. Table                     Table name
  133. Op                        Always "backup"
  134. Msg_type                  One of `status', `error', `info' or `warning'.
  135. Msg_text                  The message.
  136. Note that `BACKUP TABLE' is only available in *MySQL* version 3.23.25
  137. and later.
  138. `RESTORE TABLE' Syntax
  139. ======================
  140.      RESTORE TABLE tbl_name[,tbl_name...] FROM '/path/to/backup/directory'
  141. Restores the table(s) from the backup that was made with `BACKUP
  142. TABLE'. Existing tables will not be overwritten - if you try to restore
  143. over an existing table, you will get an error. Restore will take
  144. longer than BACKUP due to the need to rebuilt the index. The more keys
  145. you have, the longer it is going to take. Just as `BACKUP TABLE',
  146. currently only works of `MyISAM' tables.
  147. The command returns a table with the following columns:
  148. *Column*                  *Value*
  149. Table                     Table name
  150. Op                        Always "restore"
  151. Msg_type                  One of `status', `error', `info' or `warning'.
  152. Msg_text                  The message.
  153. `ANALYZE TABLE' Syntax
  154. ======================
  155.      ANALYZE TABLE tbl_name[,tbl_name...]
  156. Analyze and store the key distribution for the table.  During the
  157. analyze the table is locked with a read lock.  This works on `MyISAM'
  158. and `BDB' tables.
  159. This is equivalent to running `myisamchk -a' on the table.
  160. *MySQL* uses the stored key distribution to decide in which order
  161. tables should be joined when one does a join on something else than a
  162. constant.
  163. The command returns a table with the following columns:
  164. *Column*                  *Value*
  165. Table                     Table name
  166. Op                        Always "analyze"
  167. Msg_type                  One of `status', `error', `info' or `warning'.
  168. Msg_text                  The message.
  169. You can check the stored key distribution with the `SHOW INDEX' command.
  170. *Note SHOW DATABASE INFO::.
  171. If the table hasn't changed since the last `ANALYZE TABLE' command, the
  172. table will not be analyzed again.
  173. `REPAIR TABLE' Syntax
  174. =====================
  175.      REPAIR TABLE tbl_name[,tbl_name...] [QUICK] [EXTENDED]
  176. `REPAIR TABLE' only works on `MyISAM' tables and is the same as running
  177. `myisamchk -r table_name' on the table.
  178. Repair the corrupted table. The command returns a table with the
  179. following columns:
  180. *Column*                  *Value*
  181. Table                     Table name
  182. Op                        Always "repair"
  183. Msg_type                  One of `status', `error', `info' or `warning'.
  184. Msg_text                  The message.
  185. Note that you can get many rows of information for each repaired table.
  186. The last one row will be of `Msg_type status' and should normally be
  187. `OK'.  If you don't get `OK', you should try repairing the table with
  188. `myisamchk -o', as `REPAIR TABLE' does not yet implement all the
  189. options of `myisamchk'. In the near future, we will make it more
  190. flexible.
  191. If `QUICK' is given then *MySQL* will try to do a `REPAIR' of only the
  192. index tree.
  193. If you use `EXTENDED' then *MySQL* will create the index row by row
  194. instead of creating one index at a time with sorting;  This may be
  195. better than sorting on fixed-length keys if you have long `char()' keys
  196. that compress very good.
  197. `DELETE' Syntax
  198. ===============
  199.      DELETE [LOW_PRIORITY] FROM tbl_name
  200.          [WHERE where_definition]
  201.          [LIMIT rows]
  202. `DELETE' deletes rows from `tbl_name' that satisfy the condition given
  203. by `where_definition', and returns the number of records deleted.
  204. If you issue a `DELETE' with no `WHERE' clause, all rows are deleted.
  205. If you do this in `AUTOCOMMIT' mode, this works as `TRUNCATE'. *Note
  206. TRUNCATE::. One problem with this is that `DELETE' will return zero as
  207. the number of affected records, but this will be fixed in 4.0.
  208. If you really want to know how many records are deleted when you are
  209. deleting all rows, and are willing to suffer a speed penalty, you can
  210. use a `DELETE' statement of this form:
  211.      mysql> DELETE FROM tbl_name WHERE 1>0;
  212. Note that this is MUCH slower than `DELETE FROM tbl_name' with no
  213. `WHERE' clause, because it deletes rows one at a time.
  214. If you specify the keyword `LOW_PRIORITY', execution of the `DELETE' is
  215. delayed until no other clients are reading from the table.
  216. Deleted records are maintained in a linked list and subsequent `INSERT'
  217. operations reuse old record positions. To reclaim unused space and
  218. reduce file sizes, use the `OPTIMIZE TABLE' statement or the `myisamchk'
  219. utility to reorganize tables.  `OPTIMIZE TABLE' is easier, but
  220. `myisamchk' is faster.  See *Note `OPTIMIZE TABLE': OPTIMIZE TABLE and
  221. *Note Optimization::.
  222. The *MySQL*-specific `LIMIT rows' option to `DELETE' tells the server
  223. the maximum number of rows to be deleted before control is returned to
  224. the client.  This can be used to ensure that a specific `DELETE'
  225. command doesn't take too much time.  You can simply repeat the `DELETE'
  226. command until the number of affected rows is less than the `LIMIT'
  227. value.
  228. `TRUNCATE' Syntax
  229. =================
  230.      TRUNCATE TABLE table_name
  231. Is in 3.23 and the same thing as `DELETE FROM table_name'. *Note
  232. DELETE::.  The differences are:
  233.    * Implemented as a drop and re-create of the table, which makes this
  234.      much faster when deleting many rows.
  235.    * Not transaction-safe; `TRUNCATE TABLE' will automaticly end the
  236.      current transaction as if `COMMIT' would have been called.
  237.    * Doesn't return the number of deleted rows.
  238.    * As long as the table definition file `table_name.frm' is valid,
  239.      the table can be re-created this way, even if the data or index
  240.      files have become corrupted.
  241. `SELECT' Syntax
  242. ===============
  243.      SELECT [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
  244.             [HIGH_PRIORITY]
  245.             [DISTINCT | DISTINCTROW | ALL]
  246.          select_expression,...
  247.          [INTO {OUTFILE | DUMPFILE} 'file_name' export_options]
  248.          [FROM table_references
  249.              [WHERE where_definition]
  250.              [GROUP BY {unsigned_integer | col_name | formula} [ASC | DESC], ...]
  251.              [HAVING where_definition]
  252.              [ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] ,...]
  253.              [LIMIT [offset,] rows]
  254.              [PROCEDURE procedure_name] ]
  255. `SELECT' is used to retrieve rows selected from one or more tables.
  256. `select_expression' indicates the columns you want to retrieve.
  257. `SELECT' may also be used to retrieve rows computed without reference to
  258. any table.  For example:
  259.      mysql> SELECT 1 + 1;
  260.               -> 2
  261. All keywords used must be given in exactly the order shown above. For
  262. example, a `HAVING' clause must come after any `GROUP BY' clause and
  263. before any `ORDER BY' clause.
  264.    * A `SELECT' expression may be given an alias using `AS'. The alias
  265.      is used as the expression's column name and can be used with
  266.      `ORDER BY' or `HAVING' clauses.  For example:
  267.           mysql> select concat(last_name,', ',first_name) AS full_name
  268.               from mytable ORDER BY full_name;
  269.    * The `FROM table_references' clause indicates the tables from which
  270.      to retrieve rows.  If you name more than one table, you are
  271.      performing a join.  For information on join syntax, see *Note
  272.      `JOIN': JOIN.
  273.    * You can refer to a column as `col_name', `tbl_name.col_name', or
  274.      `db_name.tbl_name.col_name'.  You need not specify a `tbl_name' or
  275.      `db_name.tbl_name' prefix for a column reference in a `SELECT'
  276.      statement unless the reference would be ambiguous.  See *Note
  277.      Legal names::, for examples of ambiguity that require the more
  278.      explicit column reference forms.
  279.    * A table reference may be aliased using `tbl_name [AS] alias_name':
  280.           mysql> select t1.name, t2.salary from employee AS t1, info AS t2
  281.                      where t1.name = t2.name;
  282.           mysql> select t1.name, t2.salary from employee t1, info t2
  283.                      where t1.name = t2.name;
  284.    * Columns selected for output may be referred to in `ORDER BY' and
  285.      `GROUP BY' clauses using column names, column aliases, or column
  286.      positions.  Column positions begin with 1:
  287.           mysql> select college, region, seed from tournament
  288.                      ORDER BY region, seed;
  289.           mysql> select college, region AS r, seed AS s from tournament
  290.                      ORDER BY r, s;
  291.           mysql> select college, region, seed from tournament
  292.                      ORDER BY 2, 3;
  293.      To sort in reverse order, add the `DESC' (descending) keyword to
  294.      the name of the column in the `ORDER BY' clause that you are
  295.      sorting by.  The default is ascending order; this may be specified
  296.      explicitly using the `ASC' keyword.
  297.    * You can in the `WHERE' clause use any of the functions that
  298.      *MySQL* support. *Note Functions::.
  299.    * The `HAVING' clause can refer to any column or alias named in the
  300.      `select_expression'. It is applied last, just before items are
  301.      sent to the client, with no optimization. Don't use `HAVING' for
  302.      items that should be in the `WHERE' clause.  For example, do not
  303.      write this:
  304.           mysql> select col_name from tbl_name HAVING col_name > 0;
  305.      Write this instead:
  306.           mysql> select col_name from tbl_name WHERE col_name > 0;
  307.      In *MySQL* Version 3.22.5 or later, you can also write queries
  308.      like this:
  309.           mysql> select user,max(salary) from users
  310.                      group by user HAVING max(salary)>10;
  311.      In older *MySQL* versions, you can write this instead:
  312.           mysql> select user,max(salary) AS sum from users
  313.                      group by user HAVING sum>10;
  314.    * `SQL_SMALL_RESULT', `SQL_BIG_RESULT', `SQL_BUFFER_RESULT',
  315.      `STRAIGHT_JOIN', and `HIGH_PRIORITY' are *MySQL* extensions to
  316.      ANSI SQL92.
  317.    * `HIGH_PRIORITY' will give the `SELECT' higher priority than a
  318.      statement that updates a table.  You should only use this for
  319.      queries that are very fast and must be done at once.  A `SELECT
  320.      HIGH_PRIORITY' query will run if the table is locked for read even
  321.      if there is an update statement that is waiting for the table to
  322.      be free.
  323.    * `SQL_BIG_RESULT' can be used with `GROUP BY' or `DISTINCT' to tell
  324.      the optimizer that the result set will have many rows.  In this
  325.      case, *MySQL* will directly use disk-based temporary tables if
  326.      needed.  *MySQL* will also, in this case, prefer sorting to doing a
  327.      temporary table with a key on the `GROUP BY' elements.
  328.    * If you use `GROUP BY', the output rows will be sorted according to
  329.      the `GROUP BY' as if you would have had an `ORDER BY' over all the
  330.      fields in the `GROUP BY'. *MySQL* has extended the `GROUP BY' so
  331.      that you can also specify `ASC' and `DESC' to `GROUP BY':
  332.           SELECT a,COUNT(b) FROM test_table GROUP BY a DESC
  333.    * *MySQL* has extended the use of `GROUP BY' to allow you to select
  334.      fields which are not mentioned in the `GROUP BY' clause.  If you
  335.      are not getting the results you expect from your query, please
  336.      read the `GROUP BY' description.  *Note Group by functions::.
  337.    * `SQL_BUFFER_RESULT' will force the result to be put into a
  338.      temporary table. This will help *MySQL* free the table locks early
  339.      and will help in cases where it takes a long time to send the
  340.      result set to the client.
  341.    * `SQL_SMALL_RESULT', a *MySQL*-specific option, can be used with
  342.      `GROUP BY' or `DISTINCT' to tell the optimizer that the result set
  343.      will be small.  In this case, *MySQL* will use fast temporary
  344.      tables to store the resulting table instead of using sorting. In
  345.      *MySQL* Version 3.23 this shouldn't normally be needed.
  346.    * `STRAIGHT_JOIN' forces the optimizer to join the tables in the
  347.      order in which they are listed in the `FROM' clause. You can use
  348.      this to speed up a query if the optimizer joins the tables in
  349.      non-optimal order.  *Note `EXPLAIN': EXPLAIN.
  350.    * The `LIMIT' clause can be used to constrain the number of rows
  351.      returned by the `SELECT' statement.  `LIMIT' takes one or two
  352.      numeric arguments.
  353.      If two arguments are given, the first specifies the offset of the
  354.      first row to return, the second specifies the maximum number of
  355.      rows to return.  The offset of the initial row is 0 (not 1):
  356.           mysql> select * from table LIMIT 5,10;  # Retrieve rows 6-15
  357.      If one argument is given, it indicates the maximum number of rows
  358.      to return:
  359.           mysql> select * from table LIMIT 5;     # Retrieve first 5 rows
  360.      In other words, `LIMIT n' is equivalent to `LIMIT 0,n'.
  361.    * The `SELECT ... INTO OUTFILE 'file_name'' form of `SELECT' writes
  362.      the selected rows to a file. The file is created on the server
  363.      host and cannot already exist (among other things, this prevents
  364.      database tables and files such as `/etc/passwd' from being
  365.      destroyed).  You must have the *file* privilege on the server host
  366.      to use this form of `SELECT'.
  367.      `SELECT ... INTO OUTFILE' is mainly intended to let you very
  368.      quickly dump a table on the server machine. If you want to create
  369.      the resulting file on some other host than the server host you
  370.      can't use `SELECT ... INTO OUTFILE'. In this case you should
  371.      instead use some client program like `mysqldump --tab' or `mysql
  372.      -e "SELECT ..." > outfile' to generate the file.
  373.      `SELECT ...  INTO OUTFILE' is the complement of `LOAD DATA
  374.      INFILE'; the syntax for the `export_options' part of the statement
  375.      consists of the same `FIELDS' and `LINES' clauses that are used
  376.      with the `LOAD DATA INFILE' statement.  *Note `LOAD DATA': LOAD
  377.      DATA.
  378.      In the resulting text file, only the following characters are
  379.      escaped by the `ESCAPED BY' character:
  380.         * The `ESCAPED BY' character
  381.         * The first character in `FIELDS TERMINATED BY'
  382.         * The first character in `LINES TERMINATED BY'
  383.      Additionally, `ASCII 0' is converted to `ESCAPED BY' followed by 0
  384.      (`ASCII 48').
  385.      The reason for the above is that you MUST escape any `FIELDS
  386.      TERMINATED BY', `ESCAPED BY', or `LINES TERMINATED BY' characters
  387.      to reliably be able to read the file back. `ASCII 0' is escaped to
  388.      make it easier to view with some pagers.
  389.      As the resulting file doesn't have to conform to the SQL syntax,
  390.      nothing else need be escaped.
  391.      Here follows an example of getting a file in the format used by
  392.      many old programs.
  393.           SELECT a,b,a+b INTO OUTFILE "/tmp/result.text"
  394.           FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
  395.           LINES TERMINATED BY "n"
  396.           FROM test_table;
  397.    * If you use `INTO DUMPFILE' instead of `INTO OUTFILE', *MySQL* will
  398.      only write one row into the file, without any column or line
  399.      terminations and without any escaping.  This is useful if you want
  400.      to store a blob in a file.
  401. `JOIN' Syntax
  402. =============
  403. *MySQL* supports the following `JOIN' syntaxes for use in `SELECT'
  404. statements:
  405.      table_reference, table_reference
  406.      table_reference [CROSS] JOIN table_reference
  407.      table_reference INNER JOIN table_reference join_condition
  408.      table_reference STRAIGHT_JOIN table_reference
  409.      table_reference LEFT [OUTER] JOIN table_reference join_condition
  410.      table_reference LEFT [OUTER] JOIN table_reference
  411.      table_reference NATURAL [LEFT [OUTER]] JOIN table_reference
  412.      { oj table_reference LEFT OUTER JOIN table_reference ON conditional_expr }
  413.      table_reference RIGHT [OUTER] JOIN table_reference join_condition
  414.      table_reference RIGHT [OUTER] JOIN table_reference
  415.      table_reference NATURAL [RIGHT [OUTER]] JOIN table_reference
  416. Where `table_reference' is defined as:
  417.      table_name [[AS] alias] [USE INDEX (key_list)] [IGNORE INDEX (key_list)]
  418. and `join_condition' is defined as:
  419.      ON conditional_expr |
  420.      USING (column_list)
  421. Note that in versions before Version 3.23.16, the `INNER JOIN' didn't
  422. take a join condition!
  423. The last `LEFT OUTER JOIN' syntax shown above exists only for
  424. compatibility with ODBC:
  425.    * A table reference may be aliased using `tbl_name AS alias_name' or
  426.      `tbl_name alias_name':
  427.           mysql> select t1.name, t2.salary from employee AS t1, info AS t2
  428.                      where t1.name = t2.name;
  429.    * `INNER JOIN' and `,' (comma) are semantically equivalent.  Both do
  430.      a full join between the tables used.  Normally, you specify how
  431.      the tables should be linked in the `WHERE' condition.
  432.    * The `ON' conditional is any conditional of the form that may be
  433.      used in a `WHERE' clause.
  434.    * If there is no matching record for the right table in the `ON' or
  435.      `USING' part in a `LEFT JOIN', a row with all columns set to
  436.      `NULL' is used for the right table.  You can use this fact to find
  437.      records in a table that have no counterpart in another table:
  438.           mysql> select table1.* from table1
  439.                      LEFT JOIN table2 ON table1.id=table2.id
  440.                      where table2.id is NULL;
  441.      This example finds all rows in `table1' with an `id' value that is
  442.      not present in `table2' (that is, all rows in `table1' with no
  443.      corresponding row in `table2').  This assumes that `table2.id' is
  444.      declared `NOT NULL', of course. *Note LEFT JOIN optimization::.
  445.    * The `USING' `(column_list)' clause names a list of columns that
  446.      must exist in both tables.  A `USING' clause such as:
  447.           A LEFT JOIN B USING (C1,C2,C3,...)
  448.      is defined to be semantically identical to an `ON' expression like
  449.      this:
  450.           A.C1=B.C1 AND A.C2=B.C2 AND A.C3=B.C3,...
  451.    * The `NATURAL [LEFT] JOIN' of two tables is defined to be
  452.      semantically equivalent to an `INNER JOIN' or a `LEFT JOIN' with a
  453.      `USING' clause that names all columns that exist in both tables.
  454.    * `RIGHT JOIN' works analogously as `LEFT JOIN'.  To keep code
  455.      portable across databases, it's recommended to use `LEFT JOIN'
  456.      instead of `RIGHT JOIN'.
  457.    * `STRAIGHT_JOIN' is identical to `JOIN', except that the left table
  458.      is always read before the right table. This can be used for those
  459.      (few) cases where the join optimizer puts the tables in the wrong
  460.      order.
  461.    * As of *MySQL* Version 3.23.12, you can give hints about which
  462.      index *MySQL* should use when retrieving information from a table.
  463.      This is useful if `EXPLAIN' shows that *MySQL* is using the wrong
  464.      index.  By specifying `USE INDEX (key_list)', you can tell *MySQL*
  465.      to use only one of the specified indexes to find rows in the
  466.      table.  The alternative syntax `IGNORE INDEX (key_list)' can be
  467.      used to tell *MySQL* to not use some particular index.
  468. Some examples:
  469.      mysql> select * from table1,table2 where table1.id=table2.id;
  470.      mysql> select * from table1 LEFT JOIN table2 ON table1.id=table2.id;
  471.      mysql> select * from table1 LEFT JOIN table2 USING (id);
  472.      mysql> select * from table1 LEFT JOIN table2 ON table1.id=table2.id
  473.                 LEFT JOIN table3 ON table2.id=table3.id;
  474.      mysql> select * from table1 USE INDEX (key1,key2) WHERE key1=1 and key2=2 AND
  475.             key3=3;
  476.      mysql> select * from table1 IGNORE INDEX (key3) WHERE key1=1 and key2=2 AND
  477.             key3=3;
  478. *Note `LEFT JOIN' optimization: LEFT JOIN optimization.
  479. `INSERT' Syntax
  480. ===============
  481.          INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
  482.              [INTO] tbl_name [(col_name,...)]
  483.              VALUES (expression,...),(...),...
  484.      or  INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
  485.              [INTO] tbl_name [(col_name,...)]
  486.              SELECT ...
  487.      or  INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
  488.              [INTO] tbl_name
  489.              SET col_name=expression, col_name=expression, ...
  490.      or  INSERT [LOW_PRIORITY] [IGNORE] [INTO] tbl_name
  491.              SELECT ...
  492. `INSERT' inserts new rows into an existing table.  The `INSERT ...
  493. VALUES' form of the statement inserts rows based on explicitly
  494. specified values.  The `INSERT ... SELECT' form inserts rows selected
  495. from another table or tables.  The `INSERT ... VALUES' form with
  496. multiple value lists is supported in *MySQL* Version 3.22.5 or later.
  497. The `col_name=expression' syntax is supported in *MySQL* Version
  498. 3.22.10 or later.
  499. `tbl_name' is the table into which rows should be inserted.  The column
  500. name list or the `SET' clause indicates which columns the statement
  501. specifies values for:
  502.    * If you specify no column list for `INSERT ... VALUES' or `INSERT
  503.      ... SELECT', values for all columns must be provided in the
  504.      `VALUES()' list or by the `SELECT'.  If you don't know the order of
  505.      the columns in the table, use `DESCRIBE tbl_name' to find out.
  506.    * Any column not explicitly given a value is set to its default
  507.      value.  For example, if you specify a column list that doesn't
  508.      name all the columns in the table, unnamed columns are set to
  509.      their default values.  Default value assignment is described in
  510.      *Note `CREATE TABLE': CREATE TABLE.
  511.    * An `expression' may refer to any column that was set earlier in a
  512.      value list.  For example, you can say this:
  513.           mysql> INSERT INTO tbl_name (col1,col2) VALUES(15,col1*2);
  514.      But not this:
  515.           mysql> INSERT INTO tbl_name (col1,col2) VALUES(col2*2,15);
  516.    * If you specify the keyword `LOW_PRIORITY', execution of the
  517.      `INSERT' is delayed until no other clients are reading from the
  518.      table.  In this case the client has to wait until the insert
  519.      statement is completed, which may take a long time if the table is
  520.      in heavy use. This is in contrast to `INSERT DELAYED', which lets
  521.      the client continue at once.  *Note INSERT DELAYED::.  Note that
  522.      `LOW_PRIORITY' should normally not be used with `MyISAM' tables as
  523.      this disables concurrent inserts. *Note MyISAM::.
  524.    * If you specify the keyword `IGNORE' in an `INSERT' with many value
  525.      rows, any rows that duplicate an existing `PRIMARY' or `UNIQUE'
  526.      key in the table are ignored and are not inserted.  If you do not
  527.      specify `IGNORE', the insert is aborted if there is any row that
  528.      duplicates an existing key value.  You can determine with the C
  529.      API function `mysql_info()' how many rows were inserted into the
  530.      table.
  531.    * If *MySQL* was configured using the `DONT_USE_DEFAULT_FIELDS'
  532.      option, `INSERT' statements generate an error unless you explicitly
  533.      specify values for all columns that require a non-`NULL' value.
  534.      *Note `configure' options: configure options.
  535.    * You can find the value used for an `AUTO_INCREMENT' column with
  536.      the `mysql_insert_id' function.  *Note `mysql_insert_id()':
  537.      mysql_insert_id.
  538. If you use `INSERT ... SELECT' or an `INSERT ... VALUES' statement with
  539. multiple value lists, you can use the C API function `mysql_info()' to
  540. get information about the query.  The format of the information string
  541. is shown below:
  542.      Records: 100 Duplicates: 0 Warnings: 0
  543. `Duplicates' indicates the number of rows that couldn't be inserted
  544. because they would duplicate some existing unique index value.
  545. `Warnings' indicates the number of attempts to insert column values that
  546. were problematic in some way. Warnings can occur under any of the
  547. following conditions:
  548.    * Inserting `NULL' into a column that has been declared `NOT NULL'.
  549.      The column is set to its default value.
  550.    * Setting a numeric column to a value that lies outside the column's
  551.      range.  The value is clipped to the appropriate endpoint of the
  552.      range.
  553.    * Setting a numeric column to a value such as `'10.34 a''.  The
  554.      trailing garbage is stripped and the remaining numeric part is
  555.      inserted.  If the value doesn't make sense as a number at all, the
  556.      column is set to `0'.
  557.    * Inserting a string into a `CHAR', `VARCHAR', `TEXT', or `BLOB'
  558.      column that exceeds the column's maximum length.  The value is
  559.      truncated to the column's maximum length.
  560.    * Inserting a value into a date or time column that is illegal for
  561.      the column type.  The column is set to the appropriate zero value
  562.      for the type.
  563. INSERT ... SELECT Syntax
  564. ------------------------
  565.      INSERT [LOW_PRIORITY] [IGNORE] [INTO] tbl_name [(column list)] SELECT ...
  566. With `INSERT ... SELECT' statement you can quickly insert many rows
  567. into a table from one or many tables.
  568.      INSERT INTO tblTemp2 (fldID) SELECT tblTemp1.fldOrder_ID FROM tblTemp1 WHERE
  569.      tblTemp1.fldOrder_ID > 100;
  570. The following conditions hold for an `INSERT ... SELECT' statement:
  571.    - The query cannot contain an `ORDER BY' clause.
  572.    - The target table of the `INSERT' statement cannot appear in the
  573.      `FROM' clause of the `SELECT' part of the query because it's
  574.      forbidden in ANSI SQL to `SELECT' from the same table into which
  575.      you are inserting.  (The problem is that the `SELECT' possibly
  576.      would find records that were inserted earlier during the same run.
  577.      When using sub-select clauses, the situation could easily be very
  578.      confusing!)
  579.    - `AUTO_INCREMENT' columns work as usual.
  580.    - You can use the C API function `mysql_info()' to get information
  581.      about the query. *Note INSERT::.
  582. You can of course also use `REPLACE' instead of `INSERT' to overwrite
  583. old rows.
  584. `INSERT DELAYED' syntax
  585. -----------------------
  586.      INSERT DELAYED ...
  587. The `DELAYED' option for the `INSERT' statement is a *MySQL*-specific
  588. option that is very useful if you have clients that can't wait for the
  589. `INSERT' to complete.  This is a common problem when you use *MySQL*
  590. for logging and you also periodically run `SELECT' and `UPDATE'
  591. statements that take a long time to complete.  `DELAYED' was introduced
  592. in *MySQL* Version 3.22.15.  It is a *MySQL* extension to ANSI SQL92.
  593. `INSERT DELAYED' only works with `ISAM' and `MyISAM' tables.  Note that
  594. as `MyISAM' tables supports concurrent `SELECT' and `INSERT', if there
  595. is no empty blocks in the data file, you very seldom need to use
  596. `INSERT DELAYED' with `MyISAM'.
  597. When you use `INSERT DELAYED', the client will get an OK at once and
  598. the row will be inserted when the table is not in use by any other
  599. thread.
  600. Another major benefit of using `INSERT DELAYED' is that inserts from
  601. many clients are bundled together and written in one block. This is much
  602. faster than doing many separate inserts.
  603. Note that currently the queued rows are only stored in memory until
  604. they are inserted into the table.  This means that if you kill `mysqld'
  605. the hard way (`kill -9') or if `mysqld' dies unexpectedly, any queued
  606. rows that weren't written to disk are lost!
  607. The following describes in detail what happens when you use the
  608. `DELAYED' option to `INSERT' or `REPLACE'.  In this description, the
  609. "thread" is the thread that received an `INSERT DELAYED' command and
  610. "handler" is the thread that handles all `INSERT DELAYED' statements
  611. for a particular table.
  612.    * When a thread executes a `DELAYED' statement for a table, a handler
  613.      thread is created to process all `DELAYED' statements for the
  614.      table, if no such handler already exists.
  615.    * The thread checks whether or not the handler has acquired a
  616.      `DELAYED' lock already; if not, it tells the handler thread to do
  617.      so.  The `DELAYED' lock can be obtained even if other threads have
  618.      a `READ' or `WRITE' lock on the table.  However, the handler will
  619.      wait for all `ALTER TABLE' locks or `FLUSH TABLES' to ensure that
  620.      the table structure is up to date.
  621.    * The thread executes the `INSERT' statement, but instead of writing
  622.      the row to the table, it puts a copy of the final row into a queue
  623.      that is managed by the handler thread. Any syntax errors are
  624.      noticed by the thread and reported to the client program.
  625.    * The client can't report the number of duplicates or the
  626.      `AUTO_INCREMENT' value for the resulting row; it can't obtain them
  627.      from the server, because the `INSERT' returns before the insert
  628.      operation has been completed.  If you use the C API, the
  629.      `mysql_info()' function doesn't return anything meaningful, for
  630.      the same reason.
  631.    * The update log is updated by the handler thread when the row is
  632.      inserted into the table.  In case of multiple-row inserts, the
  633.      update log is updated when the first row is inserted.
  634.    * After every `delayed_insert_limit' rows are written, the handler
  635.      checks whether or not any `SELECT' statements are still pending.
  636.      If so, it allows these to execute before continuing.
  637.    * When the handler has no more rows in its queue, the table is
  638.      unlocked.  If no new `INSERT DELAYED' commands are received within
  639.      `delayed_insert_timeout' seconds, the handler terminates.
  640.    * If more than `delayed_queue_size' rows are pending already in a
  641.      specific handler queue, the thread requesting `INSERT DELAYED'
  642.      waits until there is room in the queue.  This is done to ensure
  643.      that the `mysqld' server doesn't use all memory for the delayed
  644.      memory queue.
  645.    * The handler thread will show up in the *MySQL* process list with
  646.      `delayed_insert' in the `Command' column.  It will be killed if
  647.      you execute a `FLUSH TABLES' command or kill it with `KILL
  648.      thread_id'. However, it will first store all queued rows into the
  649.      table before exiting. During this time it will not accept any new
  650.      `INSERT' commands from another thread. If you execute an `INSERT
  651.      DELAYED' command after this, a new handler thread will be created.
  652.    * Note that the above means that `INSERT DELAYED' commands have
  653.      higher priority than normal `INSERT' commands if there is an
  654.      `INSERT DELAYED' handler already running!  Other update commands
  655.      will have to wait until the `INSERT DELAYED' queue is empty,
  656.      someone kills the handler thread (with `KILL thread_id'), or
  657.      someone executes `FLUSH TABLES'.
  658.    * The following status variables provide information about `INSERT
  659.      DELAYED' commands:
  660.      *Variable*              *Meaning*
  661.      `Delayed_insert_threads'Number of handler threads
  662.      `Delayed_writes'        Number of rows written with `INSERT DELAYED'
  663.      `Not_flushed_delayed_rows'Number of rows waiting to be written
  664.      You can view these variables by issuing a `SHOW STATUS' statement
  665.      or by executing a `mysqladmin extended-status' command.
  666. Note that `INSERT DELAYED' is slower than a normal INSERT if the table
  667. is not in use.  There is also the additional overhead for the server to
  668. handle a separate thread for each table on which you use `INSERT
  669. DELAYED'.  This means that you should only use `INSERT DELAYED' when
  670. you are really sure you need it!
  671. `REPLACE' Syntax
  672. ================
  673.          REPLACE [LOW_PRIORITY | DELAYED]
  674.              [INTO] tbl_name [(col_name,...)]
  675.              VALUES (expression,...)
  676.      or  REPLACE [LOW_PRIORITY | DELAYED]
  677.              [INTO] tbl_name [(col_name,...)]
  678.              SELECT ...
  679.      or  REPLACE [LOW_PRIORITY | DELAYED]
  680.              [INTO] tbl_name
  681.              SET col_name=expression, col_name=expression,...
  682. `REPLACE' works exactly like `INSERT', except that if an old record in
  683. the table has the same value as a new record on a unique index, the old
  684. record is deleted before the new record is inserted.  *Note `INSERT':
  685. INSERT.
  686. In other words, you can't access the values of the old row from a
  687. `REPLACE' statement.  In some old *MySQL* version it looked like you
  688. could do this, but that was a bug that has been corrected.
  689. `LOAD DATA INFILE' Syntax
  690. =========================
  691.      LOAD DATA [LOW_PRIORITY] [LOCAL] INFILE 'file_name.txt' [REPLACE | IGNORE]
  692.          INTO TABLE tbl_name
  693.          [FIELDS
  694.              [TERMINATED BY 't']
  695.              [[OPTIONALLY] ENCLOSED BY '']
  696.              [ESCAPED BY '\' ]
  697.          ]
  698.          [LINES TERMINATED BY 'n']
  699.          [IGNORE number LINES]
  700.          [(col_name,...)]
  701. The `LOAD DATA INFILE' statement reads rows from a text file into a
  702. table at a very high speed.  If the `LOCAL' keyword is specified, the
  703. file is read from the client host.  If `LOCAL' is not specified, the
  704. file must be located on the server.  (`LOCAL' is available in *MySQL*
  705. Version 3.22.6 or later.)
  706. For security reasons, when reading text files located on the server, the
  707. files must either reside in the database directory or be readable by
  708. all.  Also, to use `LOAD DATA INFILE' on server files, you must have the
  709. *file* privilege on the server host.  *Note Privileges provided::.
  710. If you specify the keyword `LOW_PRIORITY', execution of the `LOAD DATA'
  711. statement is delayed until no other clients are reading from the table.
  712. Using `LOCAL' will be a bit slower than letting the server access the
  713. files directly, because the contents of the file must travel from the
  714. client host to the server host.  On the other hand, you do not need the
  715. *file* privilege to load local files.
  716. If you are using *MySQL* before Version 3.23.24 you can't read from a
  717. FIFO with `LOAD DATA INFILE'.  If you need to read from a FIFO (for
  718. example the output from gunzip), use `LOAD DATA LOCAL INFILE' instead.
  719. You can also load data files by using the `mysqlimport' utility; it
  720. operates by sending a `LOAD DATA INFILE' command to the server.  The
  721. `--local' option causes `mysqlimport' to read data files from the
  722. client host.  You can specify the `--compress' option to get better
  723. performance over slow networks if the client and server support the
  724. compressed protocol.
  725. When locating files on the server host, the server uses the following
  726. rules:
  727.    * If an absolute pathname is given, the server uses the pathname as
  728.      is.
  729.    * If a relative pathname with one or more leading components is
  730.      given, the server searches for the file relative to the server's
  731.      data directory.
  732.    * If a filename with no leading components is given, the server
  733.      looks for the file in the database directory of the current
  734.      database.
  735. Note that these rules mean a file given as `./myfile.txt' is read from
  736. the server's data directory, whereas a file given as `myfile.txt' is
  737. read from the database directory of the current database.  For example,
  738. the following `LOAD DATA' statement reads the file `data.txt' from the
  739. database directory for `db1' because `db1' is the current database,
  740. even though the statement explicitly loads the file into a table in the
  741. `db2' database:
  742.      mysql> USE db1;
  743.      mysql> LOAD DATA INFILE "data.txt" INTO TABLE db2.my_table;
  744. The `REPLACE' and `IGNORE' keywords control handling of input records
  745. that duplicate existing records on unique key values.  If you specify
  746. `REPLACE', new rows replace existing rows that have the same unique key
  747. value. If you specify `IGNORE', input rows that duplicate an existing
  748. row on a unique key value are skipped.  If you don't specify either
  749. option, an error occurs when a duplicate key value is found, and the
  750. rest of the text file is ignored.
  751. If you load data from a local file using the `LOCAL' keyword, the server
  752. has no way to stop transmission of the file in the middle of the
  753. operation, so the default bahavior is the same as if `IGNORE' is
  754. specified.
  755. If you use `LOAD DATA INFILE' on an empty `MyISAM' table, all
  756. non-unique indexes are created in a separate batch (like in `REPAIR').
  757. This normally makes `LOAD DATA INFILE' much faster when you have many
  758. indexes.
  759. `LOAD DATA INFILE' is the complement of `SELECT ... INTO OUTFILE'.
  760. *Note `SELECT': SELECT.  To write data from a database to a file, use
  761. `SELECT ... INTO OUTFILE'.  To read the file back into the database,
  762. use `LOAD DATA INFILE'.  The syntax of the `FIELDS' and `LINES' clauses
  763. is the same for both commands.  Both clauses are optional, but `FIELDS'
  764. must precede `LINES' if both are specified.
  765. If you specify a `FIELDS' clause, each of its subclauses (`TERMINATED
  766. BY', `[OPTIONALLY] ENCLOSED BY', and `ESCAPED BY') is also optional,
  767. except that you must specify at least one of them.
  768. If you don't specify a `FIELDS' clause, the defaults are the same as if
  769. you had written this:
  770.      FIELDS TERMINATED BY 't' ENCLOSED BY '' ESCAPED BY '\'
  771. If you don't specify a `LINES' clause, the default is the same as if
  772. you had written this:
  773.      LINES TERMINATED BY 'n'
  774. In other words, the defaults cause `LOAD DATA INFILE' to act as follows
  775. when reading input:
  776.    * Look for line boundaries at newlines.
  777.    * Break lines into fields at tabs.
  778.    * Do not expect fields to be enclosed within any quoting characters.
  779.    * Interpret occurrences of tab, newline, or `' preceded by `' as
  780.      literal characters that are part of field values.
  781. Conversely, the defaults cause `SELECT ... INTO OUTFILE' to act as
  782. follows when writing output:
  783.    * Write tabs between fields.
  784.    * Do not enclose fields within any quoting characters.
  785.    * Use `' to escape instances of tab, newline or `' that occur
  786.      within field values.
  787.    * Write newlines at the ends of lines.
  788. Note that to write `FIELDS ESCAPED BY '\'', you must specify two
  789. backslashes for the value to be read as a single backslash.
  790. The `IGNORE number LINES' option can be used to ignore a header of
  791. column names at the start of the file:
  792.      mysql> LOAD DATA INFILE "/tmp/file_name" into table test IGNORE 1 LINES;
  793. When you use `SELECT ... INTO OUTFILE' in tandem with `LOAD DATA
  794. INFILE' to write data from a database into a file and then read the
  795. file back into the database later, the field and line handling options
  796. for both commands must match.  Otherwise, `LOAD DATA INFILE' will not
  797. interpret the contents of the file properly.  Suppose you use `SELECT
  798. ... INTO OUTFILE' to write a file with fields delimited by commas:
  799.      mysql> SELECT * INTO OUTFILE 'data.txt'
  800.                 FIELDS TERMINATED BY ','
  801.                 FROM ...
  802. To read the comma-delimited file back in, the correct statement would
  803. be:
  804.      mysql> LOAD DATA INFILE 'data.txt' INTO TABLE table2
  805.                 FIELDS TERMINATED BY ',';
  806. If instead you tried to read in the file with the statement shown
  807. below, it wouldn't work because it instructs `LOAD DATA INFILE' to look
  808. for tabs between fields:
  809.      mysql> LOAD DATA INFILE 'data.txt' INTO TABLE table2
  810.                 FIELDS TERMINATED BY 't';
  811. The likely result is that each input line would be interpreted as a
  812. single field.
  813. `LOAD DATA INFILE' can be used to read files obtained from external
  814. sources, too. For example, a file in dBASE format will have fields
  815. separated by commas and enclosed in double quotes.  If lines in the
  816. file are terminated by newlines, the command shown below illustrates
  817. the field and line handling options you would use to load the file:
  818.      mysql> LOAD DATA INFILE 'data.txt' INTO TABLE tbl_name
  819.                 FIELDS TERMINATED BY ',' ENCLOSED BY '"'
  820.                 LINES TERMINATED BY 'n';
  821. Any of the field or line handling options may specify an empty string
  822. (`''').  If not empty, the `FIELDS [OPTIONALLY] ENCLOSED BY' and
  823. `FIELDS ESCAPED BY' values must be a single character.  The `FIELDS
  824. TERMINATED BY' and `LINES TERMINATED BY' values may be more than one
  825. character.  For example, to write lines that are terminated by carriage
  826. return-linefeed pairs, or to read a file containing such lines, specify
  827. a `LINES TERMINATED BY 'rn'' clause.
  828. For example, to read a file of jokes, that are separated with a line of
  829. `%%', into a SQL table you can do:
  830.      create table jokes (a int not null auto_increment primary key, joke text
  831.      not null);
  832.      load data infile "/tmp/jokes.txt" into table jokes fields terminated by ""
  833.      lines terminated by "n%%n" (joke);
  834. `FIELDS [OPTIONALLY] ENCLOSED BY' controls quoting of fields.  For
  835. output (`SELECT ... INTO OUTFILE'), if you omit the word `OPTIONALLY',
  836. all fields are enclosed by the `ENCLOSED BY' character.  An example of
  837. such output (using a comma as the field delimiter) is shown below:
  838.      "1","a string","100.20"
  839.      "2","a string containing a , comma","102.20"
  840.      "3","a string containing a " quote","102.20"
  841.      "4","a string containing a ", quote and comma","102.20"
  842. If you specify `OPTIONALLY', the `ENCLOSED BY' character is used only
  843. to enclose `CHAR' and `VARCHAR' fields:
  844.      1,"a string",100.20
  845.      2,"a string containing a , comma",102.20
  846.      3,"a string containing a " quote",102.20
  847.      4,"a string containing a ", quote and comma",102.20
  848. Note that occurrences of the `ENCLOSED BY' character within a field
  849. value are escaped by prefixing them with the `ESCAPED BY' character.
  850. Also note that if you specify an empty `ESCAPED BY' value, it is
  851. possible to generate output that cannot be read properly by `LOAD DATA
  852. INFILE'. For example, the output just shown above would appear as shown
  853. below if the escape character is empty.  Observe that the second field
  854. in the fourth line contains a comma following the quote, which
  855. (erroneously) appears to terminate the field:
  856.      1,"a string",100.20
  857.      2,"a string containing a , comma",102.20
  858.      3,"a string containing a " quote",102.20
  859.      4,"a string containing a ", quote and comma",102.20
  860. For input, the `ENCLOSED BY' character, if present, is stripped from the
  861. ends of field values.  (This is true whether or not `OPTIONALLY' is
  862. specified; `OPTIONALLY' has no effect on input interpretation.)
  863. Occurrences of the `ENCLOSED BY' character preceded by the `ESCAPED BY'
  864. character are interpreted as part of the current field value.  In
  865. addition, duplicated `ENCLOSED BY' characters occurring within fields
  866. are interpreted as single `ENCLOSED BY' characters if the field itself
  867. starts with that character.  For example, if `ENCLOSED BY '"'' is
  868. specified, quotes are handled as shown below:
  869.      "The ""BIG"" boss"  -> The "BIG" boss
  870.      The "BIG" boss      -> The "BIG" boss
  871.      The ""BIG"" boss    -> The ""BIG"" boss
  872. `FIELDS ESCAPED BY' controls how to write or read special characters.
  873. If the `FIELDS ESCAPED BY' character is not empty, it is used to prefix
  874. the following characters on output:
  875.    * The `FIELDS ESCAPED BY' character
  876.    * The `FIELDS [OPTIONALLY] ENCLOSED BY' character
  877.    * The first character of the `FIELDS TERMINATED BY' and `LINES
  878.      TERMINATED BY' values
  879.    * ASCII `0' (what is actually written following the escape character
  880.      is ASCII `'0'', not a zero-valued byte)
  881. If the `FIELDS ESCAPED BY' character is empty, no characters are
  882. escaped.  It is probably not a good idea to specify an empty escape
  883. character, particularly if field values in your data contain any of the
  884. characters in the list just given.
  885. For input, if the `FIELDS ESCAPED BY' character is not empty,
  886. occurrences of that character are stripped and the following character
  887. is taken literally as part of a field value.  The exceptions are an
  888. escaped `0' or `N' (for example, `' or `N' if the escape character is
  889. `').  These sequences are interpreted as ASCII `0' (a zero-valued
  890. byte) and `NULL'.  See below for the rules on `NULL' handling.
  891. For more information about `'-escape syntax, see *Note Literals::.
  892. In certain cases, field and line handling options interact:
  893.    * If `LINES TERMINATED BY' is an empty string and `FIELDS TERMINATED
  894.      BY' is non-empty, lines are also terminated with `FIELDS
  895.      TERMINATED BY'.
  896.    * If the `FIELDS TERMINATED BY' and `FIELDS ENCLOSED BY' values are
  897.      both empty (`'''), a fixed-row (non-delimited) format is used.
  898.      With fixed-row format, no delimiters are used between fields.
  899.      Instead, column values are written and read using the "display"
  900.      widths of the columns.  For example, if a column is declared as
  901.      `INT(7)', values for the column are written using 7-character
  902.      fields.  On input, values for the column are obtained by reading 7
  903.      characters.  Fixed-row format also affects handling of `NULL'
  904.      values; see below.  Note that fixed-size format will not work if
  905.      you are using a multi-byte character set.
  906. Handling of `NULL' values varies, depending on the `FIELDS' and `LINES'
  907. options you use:
  908.    * For the default `FIELDS' and `LINES' values, `NULL' is written as
  909.      `N' for output and `N' is read as `NULL' for input (assuming the
  910.      `ESCAPED BY' character is `').
  911.    * If `FIELDS ENCLOSED BY' is not empty, a field containing the
  912.      literal word `NULL' as its value is read as a `NULL' value (this
  913.      differs from the word `NULL' enclosed within `FIELDS ENCLOSED BY'
  914.      characters, which is read as the string `'NULL'').
  915.    * If `FIELDS ESCAPED BY' is empty, `NULL' is written as the word
  916.      `NULL'.
  917.    * With fixed-row format (which happens when `FIELDS TERMINATED BY'
  918.      and `FIELDS ENCLOSED BY' are both empty), `NULL' is written as an
  919.      empty string.  Note that this causes both `NULL' values and empty
  920.      strings in the table to be indistinguishable when written to the
  921.      file because they are both written as empty strings.  If you need
  922.      to be able to tell the two apart when reading the file back in,
  923.      you should not use fixed-row format.
  924. Some cases are not supported by `LOAD DATA INFILE':
  925.    * Fixed-size rows (`FIELDS TERMINATED BY' and `FIELDS ENCLOSED BY'
  926.      both empty) and `BLOB' or `TEXT' columns.
  927.    * If you specify one separator that is the same as or a prefix of
  928.      another, `LOAD DATA INFILE' won't be able to interpret the input
  929.      properly.  For example, the following `FIELDS' clause would cause
  930.      problems:
  931.           FIELDS TERMINATED BY '"' ENCLOSED BY '"'
  932.    * If `FIELDS ESCAPED BY' is empty, a field value that contains an
  933.      occurrence of `FIELDS ENCLOSED BY' or `LINES TERMINATED BY'
  934.      followed by the `FIELDS TERMINATED BY' value will cause `LOAD DATA
  935.      INFILE' to stop reading a field or line too early.  This happens
  936.      because `LOAD DATA INFILE' cannot properly determine where the
  937.      field or line value ends.
  938. The following example loads all columns of the `persondata' table:
  939.      mysql> LOAD DATA INFILE 'persondata.txt' INTO TABLE persondata;
  940. No field list is specified, so `LOAD DATA INFILE' expects input rows to
  941. contain a field for each table column.  The default `FIELDS' and
  942. `LINES' values are used.
  943. If you wish to load only some of a table's columns, specify a field
  944. list:
  945.      mysql> LOAD DATA INFILE 'persondata.txt'
  946.                 INTO TABLE persondata (col1,col2,...);
  947. You must also specify a field list if the order of the fields in the
  948. input file differs from the order of the columns in the table.
  949. Otherwise, *MySQL* cannot tell how to match up input fields with table
  950. columns.
  951. If a row has too few fields, the columns for which no input field is
  952. present are set to default values.  Default value assignment is
  953. described in *Note `CREATE TABLE': CREATE TABLE.
  954. An empty field value is interpreted differently than if the field value
  955. is missing:
  956.    * For string types, the column is set to the empty string.
  957.    * For numeric types, the column is set to `0'.
  958.    * For date and time types, the column is set to the appropriate
  959.      "zero" value for the type.  *Note Date and time types::.
  960. `TIMESTAMP' columns are only set to the current date and time if there
  961. is a `NULL' value for the column, or (for the first `TIMESTAMP' column
  962. only) if the `TIMESTAMP' column is left out from the field list when a
  963. field list is specified.
  964. If an input row has too many fields, the extra fields are ignored and
  965. the number of warnings is incremented.
  966. `LOAD DATA INFILE' regards all input as strings, so you can't use
  967. numeric values for `ENUM' or `SET' columns the way you can with
  968. `INSERT' statements.  All `ENUM' and `SET' values must be specified as
  969. strings!
  970. If you are using the C API, you can get information about the query by
  971. calling the API function `mysql_info()' when the `LOAD DATA INFILE'
  972. query finishes.  The format of the information string is shown below:
  973.      Records: 1  Deleted: 0  Skipped: 0  Warnings: 0
  974. Warnings occur under the same circumstances as when values are inserted
  975. via the `INSERT' statement (*note `INSERT': INSERT.), except that `LOAD
  976. DATA INFILE' also generates warnings when there are too few or too many
  977. fields in the input row.  The warnings are not stored anywhere; the
  978. number of warnings can only be used as an indication if everything went
  979. well.  If you get warnings and want to know exactly why you got them,
  980. one way to do this is to use `SELECT ... INTO OUTFILE' into another
  981. file and compare this to your original input file.
  982. If you need `LOAD DATA' to read from a pipe, you can use the following
  983. trick:
  984.      mkfifo /mysql/db/x/x
  985.      chmod 666 /mysql/db/x/x
  986.      cat < /dev/tcp/10.1.1.12/4711 > /nt/mysql/db/x/x
  987.      mysql -e "LOAD DATA INFILE 'x' INTO TABLE x" x
  988. If you are using a version of *MySQL* older than 3.23.25 you can only
  989. do the above with `LOAD DATA LOCAL INFILE'.
  990. For more information about the efficiency of `INSERT' versus `LOAD DATA
  991. INFILE' and speeding up `LOAD DATA INFILE', *Note Insert speed::.
  992. `UPDATE' Syntax
  993. ===============
  994.      UPDATE [LOW_PRIORITY] [IGNORE] tbl_name
  995.          SET col_name1=expr1, [col_name2=expr2, ...]
  996.          [WHERE where_definition]
  997.          [ORDER BY ...]
  998.          [LIMIT #]
  999. `UPDATE' updates columns in existing table rows with new values.  The
  1000. `SET' clause indicates which columns to modify and the values they
  1001. should be given.  The `WHERE' clause, if given, specifies which rows
  1002. should be updated.  Otherwise all rows are updated. If the `ORDER BY'
  1003. clause is specified, the rows will be updated in the order that is
  1004. specified.
  1005. If you specify the keyword `LOW_PRIORITY', execution of the `UPDATE' is
  1006. delayed until no other clients are reading from the table.
  1007. If you specify the keyword `IGNORE', the update statement will not
  1008. abort even if we get duplicate key errors during the update.  Rows that
  1009. would cause conflicts will not be updated.
  1010. If you access a column from `tbl_name' in an expression, `UPDATE' uses
  1011. the current value of the column.  For example, the following statement
  1012. sets the `age' column to one more than its current value:
  1013.      mysql> UPDATE persondata SET age=age+1;
  1014. `UPDATE' assignments are evaluated from left to right.  For example, the
  1015. following statement doubles the `age' column, then increments it:
  1016.      mysql> UPDATE persondata SET age=age*2, age=age+1;
  1017. If you set a column to the value it currently has, *MySQL* notices this
  1018. and doesn't update it.
  1019. `UPDATE' returns the number of rows that were actually changed.  In
  1020. *MySQL* Version 3.22 or later, the C API function `mysql_info()'
  1021. returns the number of rows that were matched and updated and the number
  1022. of warnings that occurred during the `UPDATE'.
  1023. In *MySQL* Version 3.23, you can use `LIMIT #' to ensure that only a
  1024. given number of rows are changed.
  1025. `USE' Syntax
  1026. ============
  1027.      USE db_name
  1028. The `USE db_name' statement tells *MySQL* to use the `db_name' database
  1029. as the default database for subsequent queries.  The database remains
  1030. current until the end of the session or until another `USE' statement
  1031. is issued:
  1032.      mysql> USE db1;
  1033.      mysql> SELECT count(*) FROM mytable;      # selects from db1.mytable
  1034.      mysql> USE db2;
  1035.      mysql> SELECT count(*) FROM mytable;      # selects from db2.mytable
  1036. Making a particular database current by means of the `USE' statement
  1037. does not preclude you from accessing tables in other databases.  The
  1038. example below accesses the `author' table from the `db1' database and
  1039. the `editor' table from the `db2' database:
  1040.      mysql> USE db1;
  1041.      mysql> SELECT author_name,editor_name FROM author,db2.editor
  1042.                 WHERE author.editor_id = db2.editor.editor_id;
  1043. The `USE' statement is provided for Sybase compatibility.
  1044. `FLUSH' Syntax (Clearing Caches)
  1045. ================================
  1046.      FLUSH flush_option [,flush_option]
  1047. You should use the `FLUSH' command if you want to clear some of the
  1048. internal caches *MySQL* uses.  To execute `FLUSH', you must have the
  1049. *reload* privilege.
  1050. `flush_option' can be any of the following:
  1051. `HOSTS'     Empties the host cache tables.  You should flush the host
  1052.             tables if some of your hosts change IP number or if you get
  1053.             the error message `Host ... is blocked'.  When more than
  1054.             `max_connect_errors' errors occur in a row for a given host
  1055.             while connection to the *MySQL* server, *MySQL* assumes
  1056.             something is wrong and blocks the host from further
  1057.             connection requests.  Flushing the host tables allows the
  1058.             host to attempt to connect again. *Note Blocked host::.) You
  1059.             can start `mysqld' with `-O max_connection_errors=999999999'
  1060.             to avoid this error message.
  1061. `LOGS'      Closes and reopens all log files.  If you have specified the
  1062.             update log file or a binary log file without an extension,
  1063.             the extension number of the log file will be incremented by
  1064.             one relative to the previous file.  If you have used an
  1065.             extension in the file name, *MySQL* will close and reopen
  1066.             the update log file.  *Note Update log::.
  1067. `PRIVILEGES'Reloads the privileges from the grant tables in the `mysql'
  1068.             database.
  1069. `TABLES'    Closes all open tables and force all tables in use to be
  1070.             closed.
  1071. `[TABLE |   Flushes only the given tables.
  1072. TABLES]     
  1073. table_name  
  1074. [,table_name...]'
  1075. `TABLES     Closes all open tables and locks all tables for all
  1076. WITH READ   databases with a read until one executes `UNLOCK TABLES'.
  1077. LOCK'       This is very convinient way to get backups if you have a
  1078.             file system, like Veritas,that can take snapshots in time.
  1079. `STATUS'    Resets most status variables to zero.
  1080. You can also access each of the commands shown above with the
  1081. `mysqladmin' utility, using the `flush-hosts', `flush-logs', `reload',
  1082. or `flush-tables' commands.
  1083. `KILL' Syntax
  1084. =============
  1085.      KILL thread_id
  1086. Each connection to `mysqld' runs in a separate thread.  You can see
  1087. which threads are running with the `SHOW PROCESSLIST' command and kill
  1088. a thread with the `KILL thread_id' command.
  1089. If you have the *process* privilege, you can see and kill all threads.
  1090. Otherwise, you can see and kill only your own threads.
  1091. You can also use the `mysqladmin processlist' and `mysqladmin kill'
  1092. commands to examine and kill threads.
  1093. When you do a `KILL', a thread specific `kill flag' is set for the
  1094. thread.
  1095. In most cases it may take some time for the thread to die as the kill
  1096. flag is only checked at specific intervals.
  1097.    * In `SELECT', `ORDER BY' and `GROUP BY' loops, the flag is checked
  1098.      after reading a block of rows. If the kill flag is set the
  1099.      statement is aborted
  1100.    * When doing an `ALTER TABLE' the kill flag is checked before each
  1101.      block of rows are read from the original table. If the kill flag
  1102.      was set the command is aborted and the temporary table is deleted.
  1103.    * When doing an `UPDATE TABLE' and `DELETE TABLE', the kill flag is
  1104.      checked after each block read and after each updated or delete
  1105.      row. If the kill flag is set the statement is aborted.  Note that
  1106.      if you are not using transactions, the changes will not be rolled
  1107.      back!
  1108.    * `GET_LOCK()' will abort with `NULL'.
  1109.    * An `INSERT DELAYED' thread will quickly flush all rows it has in
  1110.      memory and die.
  1111.    * If the thread is in the table lock handler (state: `Locked'), the
  1112.      table lock will be quickly aborted.
  1113.    * If the thread is waiting for free disk space in a `write' call, the
  1114.      write is aborted with an disk full error message.
  1115. `SHOW' Syntax (Get Information About Tables, Columns,...)
  1116. =========================================================
  1117.         SHOW DATABASES [LIKE wild]
  1118.      or SHOW [OPEN] TABLES [FROM db_name] [LIKE wild]
  1119.      or SHOW [FULL] COLUMNS FROM tbl_name [FROM db_name] [LIKE wild]
  1120.      or SHOW INDEX FROM tbl_name [FROM db_name]
  1121.      or SHOW TABLE STATUS [FROM db_name] [LIKE wild]
  1122.      or SHOW STATUS [LIKE wild]
  1123.      or SHOW VARIABLES [LIKE wild]
  1124.      or SHOW LOGS
  1125.      or SHOW [FULL] PROCESSLIST
  1126.      or SHOW GRANTS FOR user
  1127.      or SHOW CREATE TABLE table_name
  1128.      or SHOW MASTER STATUS
  1129.      or SHOW MASTER LOGS
  1130.      or SHOW SLAVE STATUS
  1131. `SHOW' provides information about databases, tables, columns, or status
  1132. information about the server. If the `LIKE wild' part is used, the
  1133. `wild' string can be a string that uses the SQL `%' and `_' wild-card
  1134. characters.
  1135. SHOW Information About Databases, Tables, Columns, and Indexes
  1136. --------------------------------------------------------------
  1137. You can use `db_name.tbl_name' as an alternative to the `tbl_name FROM
  1138. db_name' syntax.  These two statements are equivalent:
  1139.      mysql> SHOW INDEX FROM mytable FROM mydb;
  1140.      mysql> SHOW INDEX FROM mydb.mytable;
  1141. `SHOW DATABASES' lists the databases on the *MySQL* server host.  You
  1142. can also get this list using the `mysqlshow' command.
  1143. `SHOW TABLES' lists the tables in a given database.  You can also get
  1144. this list using the `mysqlshow db_name' command.
  1145. *NOTE:* If a user doesn't have any privileges for a table, the table
  1146. will not show up in the output from `SHOW TABLES' or `mysqlshow
  1147. db_name'.
  1148. `SHOW OPEN TABLES' lists the tables that are currently open in the
  1149. table cache. *Note Table cache::.  The `Comment' field tells how many
  1150. times the table is `cached' and `in_use'.
  1151. `SHOW COLUMNS' lists the columns in a given table.  If you specify the
  1152. `FULL' option, you will also get the privileges you have for each
  1153. column.  If the column types are different than you expect them to be
  1154. based on a `CREATE TABLE' statement, note that *MySQL* sometimes
  1155. changes column types.  *Note Silent column changes::.
  1156. The `DESCRIBE' statement provides information similar to `SHOW COLUMNS'.
  1157. *Note `DESCRIBE': DESCRIBE.
  1158. `SHOW FIELDS' is a synonym for `SHOW COLUMNS', and `SHOW KEYS' is a
  1159. synonym for `SHOW INDEX'.  You can also list a table's columns or
  1160. indexes with `mysqlshow db_name tbl_name' or `mysqlshow -k db_name
  1161. tbl_name'.
  1162. `SHOW INDEX' returns the index information in a format that closely
  1163. resembles the `SQLStatistics' call in ODBC. The following columns are
  1164. returned:
  1165. *Column*                  *Meaning*
  1166. `Table'                   Name of the table.
  1167. `Non_unique'              0 if the index can't contain duplicates.
  1168. `Key_name'                Name of the index.
  1169. `Seq_in_index'            Column sequence number in index, starting with
  1170.                           1.
  1171. `Column_name'             Column name.
  1172. `Collation'               How the column is sorted in the index.  In
  1173.                           *MySQL*, this can have values `A' (Ascending)
  1174.                           or `NULL' (Not sorted).
  1175. `Cardinality'             Number of unique values in the index.  This is
  1176.                           updated by running `isamchk -a'.
  1177. `Sub_part'                Number of indexed characters if the column is
  1178.                           only partly indexed. `NULL' if the entire key
  1179.                           is indexed.
  1180. `Comment'                 Various remarks.  For now, it tells whether
  1181.                           index is FULLTEXT or not.
  1182. Note that as the `Cardinality' is counted based on statistics stored as
  1183. integers, it's not necessarily accurate for small tables.
  1184. SHOW Status Information About Tables
  1185. ------------------------------------
  1186.      SHOW TABLE STATUS [FROM db_name] [LIKE wild]
  1187. `SHOW TABLE STATUS' (new in Version 3.23) works likes `SHOW STATUS',
  1188. but provides a lot of information about each table. You can also get
  1189. this list using the `mysqlshow --status db_name' command.  The
  1190. following columns are returned:
  1191. *Column*               *Meaning*
  1192. `Name'                 Name of the table.
  1193. `Type'                 Type of table. *Note Table types::.
  1194. `Row_format'           The row storage format (Fixed, Dynamic, or
  1195.                        Compressed).
  1196. `Rows'                 Number of rows.
  1197. `Avg_row_length'       Average row length.
  1198. `Data_length'          Length of the data file.
  1199. `Max_data_length'      Max length of the data file.
  1200. `Index_length'         Length of the index file.
  1201. `Data_free'            Number of allocated but not used bytes.
  1202. `Auto_increment'       Next autoincrement value.
  1203. `Create_time'          When the table was created.
  1204. `Update_time'          When the data file was last updated.
  1205. `Check_time'           When the table was last checked.
  1206. `Create_options'       Extra options used with `CREATE TABLE'.
  1207. `Comment'              The comment used when creating the table (or some
  1208.                        information why *MySQL* couldn't access the table
  1209.                        information).
  1210. `INNOBASE' tables will report the free space in the tablespace in the
  1211. table comment.
  1212. SHOW Status Information
  1213. -----------------------
  1214. `SHOW STATUS' provides server status information (like `mysqladmin
  1215. extended-status'). The output resembles that shown below, though the
  1216. format and numbers probably differ:
  1217.      +--------------------------+------------+
  1218.      | Variable_name            | Value      |
  1219.      +--------------------------+------------+
  1220.      | Aborted_clients          | 0          |
  1221.      | Aborted_connects         | 0          |
  1222.      | Bytes_received           | 155372598  |
  1223.      | Bytes_sent               | 1176560426 |
  1224.      | Connections              | 30023      |
  1225.      | Created_tmp_disk_tables  | 0          |
  1226.      | Created_tmp_tables       | 8340       |
  1227.      | Created_tmp_files        | 60         |
  1228.      | Delayed_insert_threads   | 0          |
  1229.      | Delayed_writes           | 0          |
  1230.      | Delayed_errors           | 0          |
  1231.      | Flush_commands           | 1          |
  1232.      | Handler_delete           | 462604     |
  1233.      | Handler_read_first       | 105881     |
  1234.      | Handler_read_key         | 27820558   |
  1235.      | Handler_read_next        | 390681754  |
  1236.      | Handler_read_prev        | 6022500    |
  1237.      | Handler_read_rnd         | 30546748   |
  1238.      | Handler_read_rnd_next    | 246216530  |
  1239.      | Handler_update           | 16945404   |
  1240.      | Handler_write            | 60356676   |
  1241.      | Key_blocks_used          | 14955      |
  1242.      | Key_read_requests        | 96854827   |
  1243.      | Key_reads                | 162040     |
  1244.      | Key_write_requests       | 7589728    |
  1245.      | Key_writes               | 3813196    |
  1246.      | Max_used_connections     | 0          |
  1247.      | Not_flushed_key_blocks   | 0          |
  1248.      | Not_flushed_delayed_rows | 0          |
  1249.      | Open_tables              | 1          |
  1250.      | Open_files               | 2          |
  1251.      | Open_streams             | 0          |
  1252.      | Opened_tables            | 44600      |
  1253.      | Questions                | 2026873    |
  1254.      | Select_full_join         | 0          |
  1255.      | Select_full_range_join   | 0          |
  1256.      | Select_range             | 99646      |
  1257.      | Select_range_check       | 0          |
  1258.      | Select_scan              | 30802      |
  1259.      | Slave_running            | OFF        |
  1260.      | Slave_open_temp_tables   | 0          |
  1261.      | Slow_launch_threads      | 0          |
  1262.      | Slow_queries             | 0          |
  1263.      | Sort_merge_passes        | 30         |
  1264.      | Sort_range               | 500        |
  1265.      | Sort_rows                | 30296250   |
  1266.      | Sort_scan                | 4650       |
  1267.      | Table_locks_immediate    | 1920382    |
  1268.      | Table_locks_waited       | 0          |
  1269.      | Threads_cached           | 0          |
  1270.      | Threads_created          | 30022      |
  1271.      | Threads_connected        | 1          |
  1272.      | Threads_running          | 1          |
  1273.      | Uptime                   | 80380      |
  1274.      +--------------------------+------------+
  1275. The status variables listed above have the following meaning:
  1276. *Variable*                *Meaning*
  1277. `Aborted_clients'         Number of connections aborted because the
  1278.                           client died without closing the connection
  1279.                           properly. *Note Communication errors::.
  1280. `Aborted_connects'        Number of tries to connect to the *MySQL*
  1281.                           server that failed. *Note Communication
  1282.                           errors::.
  1283. `Bytes_received'          Number of bytes received from all clients.
  1284. `Bytes_sent'              Number of bytes sent to all clients.
  1285. `Connections'             Number of connection attempts to the *MySQL*
  1286.                           server.
  1287. `Created_tmp_disk_tables' Number of implicit temporary tables on disk
  1288.                           created while executing statements.
  1289. `Created_tmp_tables'      Number of implicit temporary tables in memory
  1290.                           created while executing statements.
  1291. `Created_tmp_files'       How many temporary files `mysqld' have created.
  1292. `Delayed_insert_threads'  Number of delayed insert handler threads in
  1293.                           use.
  1294. `Delayed_writes'          Number of rows written with `INSERT DELAYED'.
  1295. `Delayed_errors'          Number of rows written with `INSERT DELAYED'
  1296.                           for which some error occurred (probably
  1297.                           `duplicate key').
  1298. `Flush_commands'          Number of executed `FLUSH' commands.
  1299. `Handler_delete'          Number of times a row was deleted from a table.
  1300. `Handler_read_first'      Number of times the first entry was read from
  1301.                           an index.  If this is high, it suggests that
  1302.                           the server is doing a lot of full index scans,
  1303.                           for example, `SELECT col1 FROM foo', assuming
  1304.                           that col1 is indexed.
  1305. `Handler_read_key'        Number of requests to read a row based on a
  1306.                           key. If this is high, it is a good indication
  1307.                           that your queries and tables are properly
  1308.                           indexed.
  1309. `Handler_read_next'       Number of requests to read next row in key
  1310.                           order. This will be incremented if you are
  1311.                           querying an index column with a range
  1312.                           contraint. This also will be incremented if
  1313.                           you are doing an index scan.
  1314. `Handler_read_rnd'        Number of requests to read a row based on a
  1315.                           fixed position.  This will be high if you are
  1316.                           doing a lot of queries that require sorting of
  1317.                           the result.
  1318. `Handler_read_rnd_next'   Number of requests to read the next row in the
  1319.                           datafile.  This will be high if you are doing
  1320.                           a lot of table scans. Generally this suggests
  1321.                           that your tables are not properly indexed or
  1322.                           that your queries are not written to take
  1323.                           advantage of the indexes you have.
  1324. `Handler_update'          Number of requests to update a row in a table.
  1325. `Handler_write'           Number of requests to insert a row in a table.
  1326. `Key_blocks_used'         The number of used blocks in the key cache.
  1327. `Key_read_requests'       The number of requests to read a key block
  1328.                           from the cache.
  1329. `Key_reads'               The number of physical reads of a key block
  1330.                           from disk.
  1331. `Key_write_requests'      The number of requests to write a key block to
  1332.                           the cache.
  1333. `Key_writes'              The number of physical writes of a key block
  1334.                           to disk.
  1335. `Max_used_connections'    The maximum number of connections in use
  1336.                           simultaneously.
  1337. `Not_flushed_key_blocks'  Keys blocks in the key cache that has changed
  1338.                           but hasn't yet been flushed to disk.
  1339. `Not_flushed_delayed_rows'Number of rows waiting to be written in
  1340.                           `INSERT DELAY' queues.
  1341. `Open_tables'             Number of tables that are open.
  1342. `Open_files'              Number of files that are open.
  1343. `Open_streams'            Number of streams that are open (used mainly
  1344.                           for logging).
  1345. `Opened_tables'           Number of tables that have been opened.
  1346. `Select_full_join'        Number of joins without keys (Should be 0).
  1347. `Select_full_range_join'  Number of joins where we used a range search
  1348.                           on reference table.
  1349. `Select_range'            Number of joins where we used ranges on the
  1350.                           first table. (It's normally not critical even
  1351.                           if this is big.)
  1352. `Select_scan'             Number of joins where we scanned the first
  1353.                           table.
  1354. `Select_range_check'      Number of joins without keys where we check
  1355.                           for key usage after each row (Should be 0).
  1356. `Questions'               Number of queries sent to the server.
  1357. `Slave_open_temp_tables'  Number of temporary tables currently open by
  1358.                           the slave thread
  1359. `Slow_launch_threads'     Number of threads that have taken more than
  1360.                           `slow_launch_time' to connect.
  1361. `Slow_queries'            Number of queries that have taken more than
  1362.                           `long_query_time'. *Note Slow query log::.
  1363. `Sort_merge_passes'       Number of merges the sort has to do. If this
  1364.                           value is large you should consider increasing
  1365.                           `sort_buffer'.
  1366. `Sort_range'              Number of sorts that where done with ranges.
  1367. `Sort_rows'               Number of sorted rows.
  1368. `Sort_scan'               Number of sorts that where done by scanning
  1369.                           the table.
  1370. `Table_locks_immediate'   Number of times a table lock was acquired
  1371.                           immediately. Available after 3.23.33.
  1372. `Table_locks_waited'      Number of times a table lock could not be
  1373.                           acquired immediately and a wait was needed. If
  1374.                           this is high, and you have performance
  1375.                           problems, you should first optimize your
  1376.                           queries, and then either split your table(s)
  1377.                           or use replication. Available after 3.23.33.
  1378. `Threads_cached'          Number of threads in the thread cache.
  1379. `Threads_connected'       Number of currently open connections.
  1380. `Threads_created'         Number of threads created to handle
  1381.                           connections.
  1382. `Threads_running'         Number of threads that are not sleeping.
  1383. `Uptime'                  How many seconds the server has been up.
  1384. Some comments about the above:
  1385.    * If `Opened_tables' is big, then your `table_cache' variable is
  1386.      probably too small.
  1387.    * If `key_reads' is big, then your `key_cache' is probably too
  1388.      small.  The cache hit rate can be calculated with
  1389.      `key_reads'/`key_read_requests'.
  1390.    * If `Handler_read_rnd' is big, then you probably have a lot of
  1391.      queries that require *MySQL* to scan whole tables or you have
  1392.      joins that don't use keys properly.
  1393.    * If `Threads_created' is big, you may want to increase the
  1394.      `thread_cache_size' variable.
  1395. SHOW VARIABLES
  1396. --------------
  1397.      SHOW VARIABLES [LIKE wild]
  1398. `SHOW VARIABLES' shows the values of some *MySQL* system variables.
  1399. You can also get this information using the `mysqladmin variables'
  1400. command.  If the default values are unsuitable, you can set most of
  1401. these variables using command-line options when `mysqld' starts up.
  1402. *Note Command-line options::.
  1403. The output resembles that shown below, though the format and numbers may
  1404. differ somewhat:
  1405.      +-------------------------+---------------------------+
  1406.      | Variable_name           | Value                     |
  1407.      +-------------------------+---------------------------+
  1408.      | ansi_mode               | OFF                       |
  1409.      | back_log                | 50                        |
  1410.      | basedir                 | /my/monty/                |
  1411.      | bdb_cache_size          | 16777216                  |
  1412.      | bdb_log_buffer_size     | 32768                     |
  1413.      | bdb_home                | /my/monty/data/           |
  1414.      | bdb_max_lock            | 10000                     |
  1415.      | bdb_logdir              |                           |
  1416.      | bdb_shared_data         | OFF                       |
  1417.      | bdb_tmpdir              | /tmp/                     |
  1418.      | binlog_cache_size       | 32768                     |
  1419.      | concurrent_insert       | ON                        |
  1420.      | connect_timeout         | 5                         |
  1421.      | datadir                 | /my/monty/data/           |
  1422.      | delay_key_write         | ON                        |
  1423.      | delayed_insert_limit    | 100                       |
  1424.      | delayed_insert_timeout  | 300                       |
  1425.      | delayed_queue_size      | 1000                      |
  1426.      | flush                   | OFF                       |
  1427.      | flush_time              | 0                         |
  1428.      | have_bdb                | YES                       |
  1429.      | have_gemini             | NO                        |
  1430.      | have_innobase           | YES                       |
  1431.      | have_raid               | YES                       |
  1432.      | have_ssl                | NO                        |
  1433.      | init_file               |                           |
  1434.      | interactive_timeout     | 28800                     |
  1435.      | join_buffer_size        | 131072                    |
  1436.      | key_buffer_size         | 16776192                  |
  1437.      | language                | /my/monty/share/english/  |
  1438.      | large_files_support     | ON                        |
  1439.      | log                     | OFF                       |
  1440.      | log_update              | OFF                       |
  1441.      | log_bin                 | OFF                       |
  1442.      | log_slave_updates       | OFF                       |
  1443.      | long_query_time         | 10                        |
  1444.      | low_priority_updates    | OFF                       |
  1445.      | lower_case_table_names  | 0                         |
  1446.      | max_allowed_packet      | 1048576                   |
  1447.      | max_binlog_cache_size   | 4294967295                |
  1448.      | max_connections         | 100                       |
  1449.      | max_connect_errors      | 10                        |
  1450.      | max_delayed_threads     | 20                        |
  1451.      | max_heap_table_size     | 16777216                  |
  1452.      | max_join_size           | 4294967295                |
  1453.      | max_sort_length         | 1024                      |
  1454.      | max_tmp_tables          | 32                        |
  1455.      | max_write_lock_count    | 4294967295                |
  1456.      | myisam_recover_options  | DEFAULT                   |
  1457.      | myisam_sort_buffer_size | 8388608                   |
  1458.      | net_buffer_length       | 16384                     |
  1459.      | net_read_timeout        | 30                        |
  1460.      | net_retry_count         | 10                        |
  1461.      | net_write_timeout       | 60                        |
  1462.      | open_files_limit        | 0                         |
  1463.      | pid_file                | /my/monty/data/donna.pid  |
  1464.      | port                    | 3306                      |
  1465.      | protocol_version        | 10                        |
  1466.      | record_buffer           | 131072                    |
  1467.      | query_buffer_size       | 0                         |
  1468.      | safe_show_database      | OFF                       |
  1469.      | server_id               | 0                         |
  1470.      | skip_locking            | ON                        |
  1471.      | skip_networking         | OFF                       |
  1472.      | skip_show_database      | OFF                       |
  1473.      | slow_launch_time        | 2                         |
  1474.      | socket                  | /tmp/mysql.sock           |
  1475.      | sort_buffer             | 2097116                   |
  1476.      | table_cache             | 64                        |
  1477.      | table_type              | MYISAM                    |
  1478.      | thread_cache_size       | 4                         |
  1479.      | thread_stack            | 65536                     |
  1480.      | tmp_table_size          | 1048576                   |
  1481.      | tmpdir                  | /tmp/                     |
  1482.      | version                 | 3.23.29a-gamma-debug      |
  1483.      | wait_timeout            | 28800                     |
  1484.      +-------------------------+---------------------------+
  1485. Each option is described below. Values for buffer sizes, lengths, and
  1486. stack sizes are given in bytes.  You can specify values with a suffix
  1487. of `K' or `M' to indicate kilobytes or megabytes. For example, `16M'
  1488. indicates 16 megabytes.  The case of suffix letters does not matter;
  1489. `16M' and `16m' are equivalent:
  1490. ``ansi_mode'.'
  1491.      Is `ON' if `mysqld' was started with `--ansi'.  *Note ANSI mode::.
  1492. ``back_log''
  1493.      The number of outstanding connection requests *MySQL* can have.
  1494.      This comes into play when the main *MySQL* thread gets *VERY* many
  1495.      connection requests in a very short time. It then takes some time
  1496.      (although very little) for the main thread to check the connection
  1497.      and start a new thread. The `back_log' value indicates how many
  1498.      requests can be stacked during this short time before *MySQL*
  1499.      momentarily stops answering new requests. You need to increase
  1500.      this only if you expect a large number of connections in a short
  1501.      period of time.
  1502.      In other words, this value is the size of the listen queue for
  1503.      incoming TCP/IP connections.  Your operating system has its own
  1504.      limit on the size of this queue.  The manual page for the Unix
  1505.      `listen(2)' system call should have more details.  Check your OS
  1506.      documentation for the maximum value for this variable.  Attempting
  1507.      to set `back_log' higher than your operating system limit will be
  1508.      ineffective.
  1509. ``basedir''
  1510.      The value of the `--basedir' option.
  1511. ``bdb_cache_size''
  1512.      The buffer that is allocated to cache index and rows for `BDB'
  1513.      tables.  If you don't use `BDB' tables, you should start `mysqld'
  1514.      with `--skip-bdb' to not waste memory for this cache.
  1515. ``bdb_log_buffer_size''
  1516.      The buffer that is allocated to cache index and rows for `BDB'
  1517.      tables.  If you don't use `BDB' tables, you should set this to 0 or
  1518.      start `mysqld' with `--skip-bdb' to not waste memory for this
  1519.      cache.
  1520. ``bdb_home''
  1521.      The value of the `--bdb-home' option.
  1522. ``bdb_max_lock''
  1523.      The maximum number of locks (1000 by default) you can have active
  1524.      on a BDB table. You should increase this if you get errors of type
  1525.      `bdb: Lock table is out of available locks' or `Got error 12 from
  1526.      ...' when you have do long transactions or when `mysqld' has to
  1527.      examine a lot of rows to calculate the query.
  1528. ``bdb_logdir''
  1529.      The value of the `--bdb-logdir' option.
  1530. ``bdb_shared_data''
  1531.      Is `ON' if you are using `--bdb-shared-data'.
  1532. ``bdb_tmpdir''
  1533.      The value of the `--bdb-tmpdir' option.
  1534. ``binlog_cache_size'.  The size of the cache to hold the SQL'
  1535.      statements for the binary log during a transaction.  If you often
  1536.      use big, multi-statement transactions you can increase this to get
  1537.      more performance. *Note COMMIT::.
  1538. ``character_set''
  1539.      The default character set.
  1540. ``character_sets''
  1541.      The supported character sets.
  1542. ``concurrent_inserts''
  1543.      If `ON' (the default), *MySQL* will allow you to use `INSERT' on
  1544.      `MyISAM' tables at the same time as you run `SELECT' queries on
  1545.      them.  You can turn this option off by starting mysqld with
  1546.      `--safe' or `--skip-new'.
  1547. ``connect_timeout''
  1548.      The number of seconds the `mysqld' server is waiting for a connect
  1549.      packet before responding with `Bad handshake'.
  1550. ``datadir''
  1551.      The value of the `--datadir' option.
  1552. ``delay_key_write''
  1553.      If enabled (is on by default), *MySQL* will honor the
  1554.      `delay_key_write' option `CREATE TABLE'.  This means that the key
  1555.      buffer for tables with this option will not get flushed on every
  1556.      index update, but only when a table is closed.  This will speed up
  1557.      writes on keys a lot, but you should add automatic checking of all
  1558.      tables with `myisamchk --fast --force' if you use this.  Note that
  1559.      if you start `mysqld' with the `--delay-key-write-for-all-tables'
  1560.      option this means that all tables will be treated as if they were
  1561.      created with the `delay_key_write' option.  You can clear this flag
  1562.      by starting `mysqld' with `--skip-new' or `--safe-mode'.
  1563. ``delayed_insert_limit''
  1564.      After inserting `delayed_insert_limit' rows, the `INSERT DELAYED'
  1565.      handler will check if there are any `SELECT' statements pending.
  1566.      If so, it allows these to execute before continuing.
  1567. ``delayed_insert_timeout''
  1568.      How long a `INSERT DELAYED' thread should wait for `INSERT'
  1569.      statements before terminating.
  1570. ``delayed_queue_size''
  1571.      What size queue (in rows) should be allocated for handling `INSERT
  1572.      DELAYED'.  If the queue becomes full, any client that does `INSERT
  1573.      DELAYED' will wait until there is room in the queue again.
  1574. ``flush''
  1575.      This is `ON' if you have started *MySQL* with the `--flush' option.
  1576. ``flush_time''
  1577.      If this is set to a non-zero value, then every `flush_time'
  1578.      seconds all tables will be closed (to free up resources and sync
  1579.      things to disk). We only recommend this option on Win95, Win98, or
  1580.      on systems where you have very little resources.
  1581. ``have_bdb''
  1582.      `YES' if `mysqld' supports Berkeley DB tables. `DISABLED' if
  1583.      `--skip-bdb' is used.
  1584. ``have_gemini''
  1585.      `YES' if `mysqld' supports Gemini tables. `DISABLED' if
  1586.      `--skip-gemini' is used.
  1587. ``have_innobase''
  1588.      `YES' if `mysqld' supports Innobase tables. `DISABLED' if
  1589.      `--skip-innobase' is used.
  1590. ``have_raid''
  1591.      `YES' if `mysqld' supports the `RAID' option.
  1592. ``have_ssl''
  1593.      `YES' if `mysqld' supports SSL (encryption) on the client/server
  1594.      protocol.
  1595. ``init_file''
  1596.      The name of the file specified with the `--init-file' option when
  1597.      you start the server.  This is a file of SQL statements you want
  1598.      the server to execute when it starts.
  1599. ``interactive_timeout''
  1600.      The number of seconds the server waits for activity on an
  1601.      interactive connection before closing it.  An interactive client
  1602.      is defined as a client that uses the `CLIENT_INTERACTIVE' option to
  1603.      `mysql_real_connect()'.  See also `wait_timeout'.
  1604. ``join_buffer_size''
  1605.      The size of the buffer that is used for full joins (joins that do
  1606.      not use indexes).  The buffer is allocated one time for each full
  1607.      join between two tables. Increase this value to get a faster full
  1608.      join when adding indexes is not possible. (Normally the best way
  1609.      to get fast joins is to add indexes.)
  1610. ``key_buffer_size''
  1611.      Index blocks are buffered and are shared by all threads.
  1612.      `key_buffer_size' is the size of the buffer used for index blocks.
  1613.      Increase this to get better index handling (for all reads and
  1614.      multiple writes) to as much as you can afford; 64M on a 256M
  1615.      machine that mainly runs *MySQL* is quite common.  If you,
  1616.      however, make this too big (more than 50% of your total memory?)
  1617.      your system may start to page and become REALLY slow. Remember
  1618.      that because *MySQL* does not cache data read, that you will have
  1619.      to leave some room for the OS filesystem cache.
  1620.      You can check the performance of the key buffer by doing `show
  1621.      status' and examine the variables `Key_read_requests',
  1622.      `Key_reads', `Key_write_requests', and `Key_writes'.  The
  1623.      `Key_reads/Key_read_request' ratio should normally be < 0.01.  The
  1624.      `Key_write/Key_write_requests' is usually near 1 if you are using
  1625.      mostly updates/deletes but may be much smaller if you tend to do
  1626.      updates that affect many at the same time or if you are using
  1627.      `delay_key_write'. *Note SHOW::.
  1628.      To get even more speed when writing many rows at the same time, use
  1629.      `LOCK TABLES'.  *Note `LOCK TABLES': LOCK TABLES.
  1630. ``language''
  1631.      The language used for error messages.
  1632. ``large_file_support''
  1633.      If `mysqld' was compiled with options for big file support.
  1634. ``locked_in_memory''
  1635.      If `mysqld' was locked in memory with `--memlock'
  1636. ``log''
  1637.      If logging of all queries is enabled.
  1638. ``log_update''
  1639.      If the update log is enabled.
  1640. ``log_bin''
  1641.      If the binary log is enabled.
  1642. ``log_slave_updates''
  1643.      If the updates from the slave should be logged.
  1644. ``long_query_time''
  1645.      If a query takes longer than this (in seconds), the `Slow_queries'
  1646.      counter will be incremented. If you are using
  1647.      `--log-slow-queries', the query will be logged to the slow query
  1648.      logfile. *Note Slow query log::.
  1649. ``lower_case_table_names''
  1650.      If set to 1 table names are stored in lowercase on disk. This will
  1651.      enable you to access the table names case-insensitive also on Unix.
  1652.      *Note Name case sensitivity::.
  1653. ``max_allowed_packet''
  1654.      The maximum size of one packet. The message buffer is initialized
  1655.      to `net_buffer_length' bytes, but can grow up to
  1656.      `max_allowed_packet' bytes when needed.  This value by default is
  1657.      small, to catch big (possibly wrong) packets.  You must increase
  1658.      this value if you are using big `BLOB' columns. It should be as
  1659.      big as the biggest `BLOB' you want to use.  The current protocol
  1660.      limits `max_allowed_packet' to 16M.
  1661. ``max_binlog_cache_size'.  If a multi-statement transaction'
  1662.      requires more than this amount of memory, one will get the error
  1663.      "Multi-statement transaction required more than
  1664.      'max_binlog_cache_size' bytes of storage".
  1665. ``max_binlog_size'. Available after 3.23.33. If a write to the'
  1666.      binary ( replication) log exceeds the given value, rotate the
  1667.      logs. You cannot set it to less than 1024 bytes, or more than 1
  1668.      GB. Default is 1 GB.
  1669. ``max_connections''
  1670.      The number of simultaneous clients allowed. Increasing this value
  1671.      increases the number of file descriptors that `mysqld' requires.
  1672.      See below for comments on file descriptor limits. *Note Too many
  1673.      connections::.
  1674. ``max_connect_errors''
  1675.      If there is more than this number of interrupted connections from
  1676.      a host this host will be blocked from further connections.  You
  1677.      can unblock a host with the command `FLUSH HOSTS'.
  1678. ``max_delayed_threads''
  1679.      Don't start more than this number of threads to handle `INSERT
  1680.      DELAYED' statements.  If you try to insert data into a new table
  1681.      after all `INSERT DELAYED' threads are in use, the row will be
  1682.      inserted as if the `DELAYED' attribute wasn't specified.
  1683. ``max_heap_table_size''
  1684.      Don't allow creation of heap tables bigger than this.
  1685. ``max_join_size''
  1686.      Joins that are probably going to read more than `max_join_size'
  1687.      records return an error. Set this value if your users tend to
  1688.      perform joins that lack a `WHERE' clause, that take a long time,
  1689.      and that return millions of rows.
  1690. ``max_sort_length''
  1691.      The number of bytes to use when sorting `BLOB' or `TEXT' values
  1692.      (only the first `max_sort_length' bytes of each value are used;
  1693.      the rest are ignored).
  1694. ``max_user_connections''
  1695.      The maximum number of active connections for a single user (0 = no
  1696.      limit).
  1697. ``max_tmp_tables''
  1698.      (This option doesn't yet do anything.)  Maximum number of
  1699.      temporary tables a client can keep open at the same time.
  1700. ``max_write_lock_count''
  1701.      After this many write locks, allow some read locks to run in
  1702.      between.
  1703. ``myisam_recover_options''
  1704.      The value of the `--myisam-recover' option.
  1705. ``myisam_sort_buffer_size''
  1706.      The buffer that is allocated when sorting the index when doing a
  1707.      `REPAIR' or when creating indexes with `CREATE INDEX' or `ALTER
  1708.      TABLE'.
  1709. ``net_buffer_length''
  1710.      The communication buffer is reset to this size between queries.
  1711.      This should not normally be changed, but if you have very little
  1712.      memory, you can set it to the expected size of a query.  (That is,
  1713.      the expected length of SQL statements sent by clients.  If
  1714.      statements exceed this length, the buffer is automatically
  1715.      enlarged, up to `max_allowed_packet' bytes.)
  1716. ``net_read_timeout''
  1717.      Number of seconds to wait for more data from a connection before
  1718.      aborting the read.  Note that when we don't expect data from a
  1719.      connection, the timeout is defined by `write_timeout'.
  1720. ``net_retry_count''
  1721.      If a read on a communication port is interrupted, retry this many
  1722.      times before giving up.  This value should be quite high on
  1723.      `FreeBSD' as internal interrupts are sent to all threads.
  1724. ``net_write_timeout''
  1725.      Number of seconds to wait for a block to be written to a
  1726.      connection before aborting the write.
  1727. ``open_files_limit''
  1728.      If this is not 0, then `mysqld' will use this value to reserve file
  1729.      descriptors to use with `getrlimit()'.  If this value is 0 then
  1730.      `mysqld' will reserve `max_connections*5' or `max_connections +
  1731.      table_cache*2' (whichever is larger) number of files.  You should
  1732.      try increasing this if `mysqld' gives you the error 'Too many open
  1733.      files'.
  1734. ``pid_file''
  1735.      The value of the `--pid-file' option.
  1736. ``port''
  1737.      The value of the `--port' option.
  1738. ``protocol_version''
  1739.      The protocol version used by the *MySQL* server.
  1740. ``record_buffer''
  1741.      Each thread that does a sequential scan allocates a buffer of this
  1742.      size for each table it scans. If you do many sequential scans, you
  1743.      may want to increase this value.
  1744. ``query_buffer_size''
  1745.      The initial allocation of the query buffer. If most of your
  1746.      queries are long (like when inserting blobs), you should increase
  1747.      this!
  1748. ``safe_show_databases''
  1749.      Don't show databases for which the user doesn't have any database
  1750.      or table privileges. This can improve security if you're concerned
  1751.      about people being able to see what databases other users have.
  1752.      See also `skip_show_databases'.
  1753. ``server_id''
  1754.      The value of the `--server-id' option.
  1755. ``skip_locking''
  1756.      Is OFF if `mysqld' uses external locking.
  1757. ``skip_networking''
  1758.      Is ON if we only allow local (socket) connections.
  1759. ``skip_show_databases''
  1760.      This prevents people from doing `SHOW DATABASES' if they don't have
  1761.      the `PROCESS_PRIV' privilege. This can improve security if you're
  1762.      concerned about people being able to see what databases other users
  1763.      have. See also `safe_show_databases'.
  1764. ``slow_launch_time''
  1765.      If creating the thread takes longer than this value (in seconds),
  1766.      the `Slow_launch_threads' counter will be incremented.
  1767. ``socket''
  1768.      The Unix socket used by the server.
  1769. ``sort_buffer''
  1770.      Each thread that needs to do a sort allocates a buffer of this
  1771.      size. Increase this value for faster `ORDER BY' or `GROUP BY'
  1772.      operations.  *Note Temporary files::.
  1773. ``table_cache''
  1774.      The number of open tables for all threads. Increasing this value
  1775.      increases the number of file descriptors that `mysqld' requires.
  1776.      *MySQL* needs two file descriptors for each unique open table.
  1777.      See below for comments on file descriptor limits. You can check if
  1778.      you need to increase the table cache by checking the
  1779.      `Opened_tables' variable. *Note SHOW::.  If this variable is big
  1780.      and you don't do `FLUSH TABLES' a lot (which just forces all
  1781.      tables to be closed and reopenend), then you should increase the
  1782.      value of this variable.
  1783.      Make sure that your operating system can handle the number of open
  1784.      file descriptors implied by the `table_cache' setting.  If
  1785.      `table_cache' is set too high, *MySQL* may run out of file
  1786.      descriptors and refuse connections, fail to perform queries, and
  1787.      be very unreliable.
  1788.      For information about how the table cache works, see *Note Table
  1789.      cache::.
  1790. ``table_type''
  1791.      The default table type
  1792. ``thread_cache_size''
  1793.      How many threads we should keep in a cache for reuse.  When a
  1794.      client disconnects, the client's threads are put in the cache if
  1795.      there aren't more than `thread_cache_size' threads from before.
  1796.      All new threads are first taken from the cache, and only when the
  1797.      cache is empty is a new thread created.  This variable can be
  1798.      increased to improve performance if you have a lot of new
  1799.      connections. (Normally this doesn't give a notable performance
  1800.      improvement if you have a good thread implementation.)  By examing
  1801.      the difference between the `Connections' and `Threads_created' you
  1802.      can see how efficient the current thread cache is for you.
  1803. ``thread_concurrency''
  1804.      On Solaris, `mysqld' will call `thr_setconcurrency()' with this
  1805.      value.  `thr_setconcurrency()' permits the application to give the
  1806.      threads system a hint for the desired number of threads that should
  1807.      be run at the same time.
  1808. ``thread_stack''
  1809.      The stack size for each thread.  Many of the limits detected by the
  1810.      `crash-me' test are dependent on this value. The default is large
  1811.      enough for normal operation.  *Note Benchmarks::.
  1812. ``timezone''
  1813.      The timezone for the server.
  1814. ``tmp_table_size''
  1815.      If an in-memory temporary table exceeds this size, *MySQL* will
  1816.      automatically convert it to an on-disk `MyISAM' table.  Increase
  1817.      the value of `tmp_table_size' if you do many advanced `GROUP BY'
  1818.      queries and you have lots of memory.
  1819. ``tmpdir''
  1820.      The directory used for temporary files and temporary tables.
  1821. ``version''
  1822.      The version number for the server.
  1823. ``wait_timeout''
  1824.      The number of seconds the server waits for activity on a
  1825.      connection before closing it. See also `interactive_timeout'.
  1826. The manual section that describes tuning *MySQL* contains some
  1827. information of how to tune the above variables. *Note Server
  1828. parameters::.
  1829. SHOW Information About Log Files
  1830. --------------------------------
  1831. `SHOW LOGS' shows you status information about existing log files.  It
  1832. currently only displays information about Berkeley DB log files.
  1833.    * `File' shows the full path to the log file
  1834.    * `Type' shows the type of the log file (`BDB' for Berkeley DB log
  1835.      files)
  1836.    * `Status' shows the status of the log file (`FREE' if the file can
  1837.      be removed, or `IN USE' if the file is needed by the transaction
  1838.      subsystem)
  1839. SHOW Information About Connected Threads (Processes)
  1840. ----------------------------------------------------
  1841. `SHOW PROCESSLIST' shows you which threads are running.  You can also
  1842. get this information using the `mysqladmin processlist' command.  If
  1843. you have the *process* privilege, you can see all threads.  Otherwise,
  1844. you can see only your own threads.  *Note `KILL': KILL.  If you don't
  1845. use the `FULL' option, then only the first 100 characters of each query
  1846. will be shown.
  1847. This command is very useful if you get the 'too many connections' error
  1848. message and want to find out what's going on. *MySQL* reserves one
  1849. extra connection for a client with the `Process_priv' privilege to
  1850. ensure that you should always be able to login and check the system
  1851. (assuming you are not giving this privilege to all your users).
  1852. SHOW GRANTS (Privileges) for a User
  1853. -----------------------------------
  1854. `SHOW GRANTS FOR user' lists the grant commands that must be issued to
  1855. duplicate the grants for a user.
  1856.      mysql> SHOW GRANTS FOR root@localhost;
  1857.      +---------------------------------------------------------------------+
  1858.      | Grants for root@localhost                                           |
  1859.      +---------------------------------------------------------------------+
  1860.      | GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
  1861.      +---------------------------------------------------------------------+
  1862. SHOW CREATE TABLE
  1863. -----------------
  1864. Shows a `CREATE TABLE' statement that will create the given table:
  1865.      mysql> show create table tG
  1866.      *************************** 1. row ***************************
  1867.             Table: t
  1868.      Create Table: CREATE TABLE t (
  1869.        id int(11) default NULL auto_increment,
  1870.        s char(60) default NULL,
  1871.        PRIMARY KEY (id)
  1872.      ) TYPE=MyISAM
  1873. `SHOW CREATE TABLE' will quote table and column names according to
  1874. `SQL_QUOTE_SHOW_CREATE' option.  *Note `SET OPTION
  1875. SQL_QUOTE_SHOW_CREATE': SET OPTION.
  1876. `EXPLAIN' Syntax (Get Information About a `SELECT')
  1877. ===================================================
  1878.          EXPLAIN tbl_name
  1879.      or  EXPLAIN SELECT select_options
  1880. `EXPLAIN tbl_name' is a synonym for `DESCRIBE tbl_name' or `SHOW
  1881. COLUMNS FROM tbl_name'.
  1882. When you precede a `SELECT' statement with the keyword `EXPLAIN',
  1883. *MySQL* explains how it would process the `SELECT', providing
  1884. information about how tables are joined and in which order.
  1885. With the help of `EXPLAIN', you can see when you must add indexes to
  1886. tables to get a faster `SELECT' that uses indexes to find the records.
  1887. You can also see if the optimizer joins the tables in an optimal order.
  1888. To force the optimizer to use a specific join order for a `SELECT'
  1889. statement, add a `STRAIGHT_JOIN' clause.
  1890. For non-simple joins, `EXPLAIN' returns a row of information for each
  1891. table used in the `SELECT' statement. The tables are listed in the order
  1892. they would be read.  *MySQL* resolves all joins using a single-sweep
  1893. multi-join method. This means that *MySQL* reads a row from the first
  1894. table, then finds a matching row in the second table, then in the third
  1895. table and so on. When all tables are processed, it outputs the selected
  1896. columns and backtracks through the table list until a table is found
  1897. for which there are more matching rows. The next row is read from this
  1898. table and the process continues with the next table.
  1899. Output from `EXPLAIN' includes the following columns:
  1900. `table'
  1901.      The table to which the row of output refers.
  1902. `type'
  1903.      The join type.  Information about the various types is given below.
  1904. `possible_keys'
  1905.      The `possible_keys' column indicates which indexes *MySQL* could
  1906.      use to find the rows in this table. Note that this column is
  1907.      totally independent of the order of the tables. That means that
  1908.      some of the keys in possible_keys may not be usable in practice
  1909.      with the generated table order.
  1910.      If this column is empty, there are no relevant indexes. In this
  1911.      case, you may be able to improve the performance of your query by
  1912.      examining the `WHERE' clause to see if it refers to some column or
  1913.      columns that would be suitable for indexing.  If so, create an
  1914.      appropriate index and check the query with `EXPLAIN' again. *Note
  1915.      ALTER TABLE::.
  1916.      To see what indexes a table has, use `SHOW INDEX FROM tbl_name'.
  1917. `key'
  1918.      The `key' column indicates the key that *MySQL* actually decided
  1919.      to use. The key is `NULL' if no index was chosen.  If *MySQL*
  1920.      chooses the wrong index, you can probably force *MySQL* to use
  1921.      another index by using `myisamchk --analyze', *Note myisamchk
  1922.      syntax::, or by using `USE INDEX/IGNORE INDEX'.  *Note JOIN::.
  1923. `key_len'
  1924.      The `key_len' column indicates the length of the key that *MySQL*
  1925.      decided to use.  The length is `NULL' if the `key' is `NULL'. Note
  1926.      that this tells us how many parts of a multi-part key *MySQL* will
  1927.      actually use.
  1928. `ref'
  1929.      The `ref' column shows which columns or constants are used with the
  1930.      `key' to select rows from the table.
  1931. `rows'
  1932.      The `rows' column indicates the number of rows *MySQL* believes it
  1933.      must examine to execute the query.
  1934. `Extra'
  1935.      This column contains additional information of how *MySQL* will
  1936.      resolve the query. Here is an explanation of the different text
  1937.      strings that can be found in this column:
  1938.     `Distinct'
  1939.           *MySQL* will not continue searching for more rows for the
  1940.           current row combination after it has found the first matching
  1941.           row.
  1942.     `Not exists'
  1943.           *MySQL* was able to do a `LEFT JOIN' optimization on the
  1944.           query and will not examine more rows in this table for a row
  1945.           combination after it finds one row that matches the `LEFT
  1946.           JOIN' criteria.
  1947.     ``range checked for each record (index map: #)''
  1948.           *MySQL* didn't find a real good index to use. It will,
  1949.           instead, for each row combination in the preceding tables, do
  1950.           a check on which index to use (if any), and use this index to
  1951.           retrieve the rows from the table.  This isn't very fast but
  1952.           is faster than having to do a join without an index.
  1953.     `Using filesort'
  1954.           *MySQL* will need to do an extra pass to find out how to
  1955.           retrieve the rows in sorted order.  The sort is done by going
  1956.           through all rows according to the `join type' and storing the
  1957.           sort key + pointer to the row for all rows that match the
  1958.           `WHERE'. Then the keys are sorted. Finally the rows are
  1959.           retrieved in sorted order.
  1960.     `Using index'
  1961.           The column information is retrieved from the table using only
  1962.           information in the index tree without having to do an
  1963.           additional seek to read the actual row.  This can be done
  1964.           when all the used columns for the table are part of the same
  1965.           index.
  1966.     `Using temporary'
  1967.           To resolve the query *MySQL* will need to create a temporary
  1968.           table to hold the result.  This typically happens if you do an
  1969.           `ORDER BY' on a different column set than you did a `GROUP
  1970.           BY' on.
  1971.     `Where used'
  1972.           A `WHERE' clause will be used to restrict which rows will be
  1973.           matched against the next table or sent to the client.  If you
  1974.           don't have this information and the table is of type `ALL' or
  1975.           `index', you may have something wrong in your query (if you
  1976.           don't intend to fetch/examine all rows from the table).
  1977.      If you want to get your queries as fast as possible, you should
  1978.      look out for `Using filesort' and `Using temporary'.
  1979. The different join types are listed below, ordered from best to worst
  1980. type:
  1981. `system'
  1982.      The table has only one row (= system table). This is a special
  1983.      case of the `const' join type.
  1984. `const'
  1985.      The table has at most one matching row, which will be read at the
  1986.      start of the query. Because there is only one row, values from the
  1987.      column in this row can be regarded as constants by the rest of the
  1988.      optimizer. `const' tables are very fast as they are read only once!
  1989. `eq_ref'
  1990.      One row will be read from this table for each combination of rows
  1991.      from the previous tables.  This is the best possible join type,
  1992.      other than the `const' types.  It is used when all parts of an
  1993.      index are used by the join and the index is `UNIQUE' or a `PRIMARY
  1994.      KEY'.
  1995. `ref'
  1996.      All rows with matching index values will be read from this table
  1997.      for each combination of rows from the previous tables.  `ref' is
  1998.      used if the join uses only a leftmost prefix of the key, or if the
  1999.      key is not `UNIQUE' or a `PRIMARY KEY' (in other words, if the
  2000.      join cannot select a single row based on the key value).  If the
  2001.      key that is used matches only a few rows, this join type is good.
  2002. `range'
  2003.      Only rows that are in a given range will be retrieved, using an
  2004.      index to select the rows.  The `key' column indicates which index
  2005.      is used.  The `key_len' contains the longest key part that was
  2006.      used.  The `ref' column will be NULL for this type.
  2007. `index'
  2008.      This is the same as `ALL', except that only the index tree is
  2009.      scanned.  This is usually faster than `ALL', as the index file is
  2010.      usually smaller than the data file.
  2011. `ALL'
  2012.      A full table scan will be done for each combination of rows from
  2013.      the previous tables.  This is normally not good if the table is
  2014.      the first table not marked `const', and usually *very* bad in all
  2015.      other cases. You normally can avoid `ALL' by adding more indexes,
  2016.      so that the row can be retrieved based on constant values or
  2017.      column values from earlier tables.
  2018. You can get a good indication of how good a join is by multiplying all
  2019. values in the `rows' column of the `EXPLAIN' output. This should tell
  2020. you roughly how many rows *MySQL* must examine to execute the query.
  2021. This number is also used when you restrict queries with the
  2022. `max_join_size' variable.  *Note Server parameters::.
  2023. The following example shows how a `JOIN' can be optimized progressively
  2024. using the information provided by `EXPLAIN'.
  2025. Suppose you have the `SELECT' statement shown below, that you examine
  2026. using `EXPLAIN':
  2027.      EXPLAIN SELECT tt.TicketNumber, tt.TimeIn,
  2028.                  tt.ProjectReference, tt.EstimatedShipDate,
  2029.                  tt.ActualShipDate, tt.ClientID,
  2030.                  tt.ServiceCodes, tt.RepetitiveID,
  2031.                  tt.CurrentProcess, tt.CurrentDPPerson,
  2032.                  tt.RecordVolume, tt.DPPrinted, et.COUNTRY,
  2033.                  et_1.COUNTRY, do.CUSTNAME
  2034.              FROM tt, et, et AS et_1, do
  2035.              WHERE tt.SubmitTime IS NULL
  2036.                  AND tt.ActualPC = et.EMPLOYID
  2037.                  AND tt.AssignedPC = et_1.EMPLOYID
  2038.                  AND tt.ClientID = do.CUSTNMBR;
  2039. For this example, assume that:
  2040.    * The columns being compared have been declared as follows:
  2041.      *Table* *Column*      *Column type*
  2042.      `tt'    `ActualPC'    `CHAR(10)'
  2043.      `tt'    `AssignedPC'  `CHAR(10)'
  2044.      `tt'    `ClientID'    `CHAR(10)'
  2045.      `et'    `EMPLOYID'    `CHAR(15)'
  2046.      `do'    `CUSTNMBR'    `CHAR(15)'
  2047.    * The tables have the indexes shown below:
  2048.      *Table* *Index*
  2049.      `tt'    `ActualPC'
  2050.      `tt'    `AssignedPC'
  2051.      `tt'    `ClientID'
  2052.      `et'    `EMPLOYID' (primary key)
  2053.      `do'    `CUSTNMBR' (primary key)
  2054.    * The `tt.ActualPC' values aren't evenly distributed.
  2055. Initially, before any optimizations have been performed, the `EXPLAIN'
  2056. statement produces the following information:
  2057.      table type possible_keys                key  key_len ref  rows  Extra
  2058.      et    ALL  PRIMARY                      NULL NULL    NULL 74
  2059.      do    ALL  PRIMARY                      NULL NULL    NULL 2135
  2060.      et_1  ALL  PRIMARY                      NULL NULL    NULL 74
  2061.      tt    ALL  AssignedPC,ClientID,ActualPC NULL NULL    NULL 3872
  2062.            range checked for each record (key map: 35)
  2063. Because `type' is `ALL' for each table, this output indicates that
  2064. *MySQL* is doing a full join for all tables!  This will take quite a
  2065. long time, as the product of the number of rows in each table must be
  2066. examined!  For the case at hand, this is `74 * 2135 * 74 * 3872 =
  2067. 45,268,558,720' rows.  If the tables were bigger, you can only imagine
  2068. how long it would take.
  2069. One problem here is that *MySQL* can't (yet) use indexes on columns
  2070. efficiently if they are declared differently.  In this context,
  2071. `VARCHAR' and `CHAR' are the same unless they are declared as different
  2072. lengths. Because `tt.ActualPC' is declared as `CHAR(10)' and
  2073. `et.EMPLOYID' is declared as `CHAR(15)', there is a length mismatch.
  2074. To fix this disparity between column lengths, use `ALTER TABLE' to
  2075. lengthen `ActualPC' from 10 characters to 15 characters:
  2076.      mysql> ALTER TABLE tt MODIFY ActualPC VARCHAR(15);
  2077. Now `tt.ActualPC' and `et.EMPLOYID' are both `VARCHAR(15)'.  Executing
  2078. the `EXPLAIN' statement again produces this result:
  2079.      table type   possible_keys   key     key_len ref         rows    Extra
  2080.      tt    ALL    AssignedPC,ClientID,ActualPC NULL NULL NULL 3872    where used
  2081.      do    ALL    PRIMARY         NULL    NULL    NULL        2135
  2082.            range checked for each record (key map: 1)
  2083.      et_1  ALL    PRIMARY         NULL    NULL    NULL        74
  2084.            range checked for each record (key map: 1)
  2085.      et    eq_ref PRIMARY         PRIMARY 15      tt.ActualPC 1
  2086. This is not perfect, but is much better (the product of the `rows'
  2087. values is now less by a factor of 74). This version is executed in a
  2088. couple of seconds.
  2089. A second alteration can be made to eliminate the column length
  2090. mismatches for the `tt.AssignedPC = et_1.EMPLOYID' and `tt.ClientID =
  2091. do.CUSTNMBR' comparisons:
  2092.      mysql> ALTER TABLE tt MODIFY AssignedPC VARCHAR(15),
  2093.                            MODIFY ClientID   VARCHAR(15);
  2094. Now `EXPLAIN' produces the output shown below:
  2095.      table type   possible_keys   key     key_len ref            rows     Extra
  2096.      et    ALL    PRIMARY         NULL    NULL    NULL           74
  2097.      tt    ref    AssignedPC,ClientID,ActualPC ActualPC 15 et.EMPLOYID 52 where used
  2098.      et_1  eq_ref PRIMARY         PRIMARY 15      tt.AssignedPC  1
  2099.      do    eq_ref PRIMARY         PRIMARY 15      tt.ClientID    1
  2100. This is almost as good as it can get.
  2101. The remaining problem is that, by default, *MySQL* assumes that values
  2102. in the `tt.ActualPC' column are evenly distributed, and that isn't the
  2103. case for the `tt' table.  Fortunately, it is easy to tell *MySQL* about
  2104. this:
  2105.      shell> myisamchk --analyze PATH_TO_MYSQL_DATABASE/tt
  2106.      shell> mysqladmin refresh
  2107. Now the join is perfect, and `EXPLAIN' produces this result:
  2108.      table type   possible_keys   key     key_len ref            rows    Extra
  2109.      tt    ALL    AssignedPC,ClientID,ActualPC NULL NULL NULL    3872    where used
  2110.      et    eq_ref PRIMARY         PRIMARY 15      tt.ActualPC    1
  2111.      et_1  eq_ref PRIMARY         PRIMARY 15      tt.AssignedPC  1
  2112.      do    eq_ref PRIMARY         PRIMARY 15      tt.ClientID    1
  2113. Note that the `rows' column in the output from `EXPLAIN' is an educated
  2114. guess from the *MySQL* join optimizer. To optimize a query, you should
  2115. check if the numbers are even close to the truth.  If not, you may get
  2116. better performance by using `STRAIGHT_JOIN' in your `SELECT' statement
  2117. and trying to list the tables in a different order in the `FROM' clause.
  2118. `DESCRIBE' Syntax (Get Information About Columns)
  2119. =================================================
  2120.      {DESCRIBE | DESC} tbl_name {col_name | wild}
  2121. `DESCRIBE' provides information about a table's columns.  `col_name'
  2122. may be a column name or a string containing the SQL `%' and `_'
  2123. wild-card characters.
  2124. If the column types are different than you expect them to be based on a
  2125. `CREATE TABLE' statement, note that *MySQL* sometimes changes column
  2126. types.  *Note Silent column changes::.
  2127. This statement is provided for Oracle compatibility.
  2128. The `SHOW' statement provides similar information.  *Note `SHOW': SHOW.
  2129. `BEGIN/COMMIT/ROLLBACK' Syntax
  2130. ==============================
  2131. By default, *MySQL* runs in `autocommit' mode. This means that as soon
  2132. as you execute an update, *MySQL* will store the update on disk.
  2133. If you are using transactions safe tables (like `BDB', `INNOBASE' or
  2134. `GEMINI'), you can put *MySQL* into non-`autocommit' mode with the
  2135. following command:
  2136.      SET AUTOCOMMIT=0
  2137. After this you must use `COMMIT' to store your changes to disk or
  2138. `ROLLBACK' if you want to ignore the changes you have made since the
  2139. beginning of your transaction.
  2140. If you want to switch from `AUTOCOMMIT' mode for one series of
  2141. statements, you can use the `BEGIN' or `BEGIN WORK' statement:
  2142.      BEGIN;
  2143.      SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
  2144.      UPDATE table2 SET summmary=@A WHERE type=1;
  2145.      COMMIT;
  2146. Note that if you are using non-transaction-safe tables, the changes
  2147. will be stored at once, independent of the status of the `autocommit'
  2148. mode.
  2149. If you do a `ROLLBACK' when you have updated a non-transactional table
  2150. you will get an error (`ER_WARNING_NOT_COMPLETE_ROLLBACK') as a
  2151. warning.  All transactional safe tables will be restored but any
  2152. non-transactional table will not change.
  2153. If you are using `BEGIN' or `SET AUTO_COMMIT=0', you should use the
  2154. *MySQL* binary log for backups instead of the old update log;  The
  2155. transaction is stored in the binary log in one chunk, during `COMMIT',
  2156. the to ensure and `ROLLBACK':ed transactions are not stored. *Note
  2157. Binary log::.
  2158. The following commands automaticly ends an transaction (as if you had
  2159. done a `COMMIT' before executing the command):
  2160. `ALTER TABLE'            `BEGIN'                  `CREATE INDEX'
  2161. `DROP DATABASE'          `DROP TABLE'             `RENAME TABLE'
  2162. `TRUNCATE'                                        
  2163. `LOCK TABLES/UNLOCK TABLES' Syntax
  2164. ==================================
  2165.      LOCK TABLES tbl_name [AS alias] {READ | [READ LOCAL] | [LOW_PRIORITY] WRITE}
  2166.                  [, tbl_name {READ | [LOW_PRIORITY] WRITE} ...]
  2167.      ...
  2168.      UNLOCK TABLES
  2169. `LOCK TABLES' locks tables for the current thread.  `UNLOCK TABLES'
  2170. releases any locks held by the current thread.  All tables that are
  2171. locked by the current thread are automatically unlocked when the thread
  2172. issues another `LOCK TABLES', or when the connection to the server is
  2173. closed.
  2174. If a thread obtains a `READ' lock on a table, that thread (and all other
  2175. threads) can only read from the table. If a thread obtains a `WRITE'
  2176. lock on a table, then only the thread holding the lock can `READ' from
  2177. or `WRITE' to the table.  Other threads are blocked.
  2178. The difference between `READ LOCAL' and `READ' is that `READ LOCAL'
  2179. allows non-conflicting `INSERT' statements to execute while the lock is
  2180. held.  This can't however be used if you are going to manipulate the
  2181. database files outside *MySQL* while you hold the lock.
  2182. Each thread waits (without timing out) until it obtains all the locks
  2183. it has requested.
  2184. `WRITE' locks normally have higher priority than `READ' locks, to
  2185. ensure that updates are processed as soon as possible. This means that
  2186. if one thread obtains a `READ' lock and then another thread requests a
  2187. `WRITE' lock, subsequent `READ' lock requests will wait until the
  2188. `WRITE' thread has gotten the lock and released it.  You can use
  2189. `LOW_PRIORITY WRITE' locks to allow other threads to obtain `READ'
  2190. locks while the thread is waiting for the `WRITE' lock. You should only
  2191. use `LOW_PRIORITY WRITE' locks if you are sure that there will
  2192. eventually be a time when no threads will have a `READ' lock.
  2193. When you use `LOCK TABLES', you must lock all tables that you are going
  2194. to use and you must use the same alias that you are going to use in
  2195. your queries!  If you are using a table multiple times in a query (with
  2196. aliases), you must get a lock for each alias! This policy ensures that
  2197. table locking is deadlock free and makes the locking code smaller,
  2198. simpler and much faster.
  2199. Note that you should *NOT* lock any tables that you are using with
  2200. `INSERT DELAYED'.  This is because that in this case the `INSERT' is
  2201. done by a separate thread.
  2202. Normally, you don't have to lock tables, as all single `UPDATE'
  2203. statements are atomic; no other thread can interfere with any other
  2204. currently executing SQL statement. There are a few cases when you would
  2205. like to lock tables anyway:
  2206.    * If you are going to run many operations on a bunch of tables, it's
  2207.      much faster to lock the tables you are going to use.  The downside
  2208.      is, of course, that no other thread can update a `READ'-locked
  2209.      table and no other thread can read a `WRITE'-locked table.
  2210.    * *MySQL* doesn't support a transaction environment, so you must use
  2211.      `LOCK TABES' if you want to ensure that no other thread comes
  2212.      between a `SELECT' and an `UPDATE'. The example shown below
  2213.      requires `LOCK TABLES' in order to execute safely:
  2214.           mysql> LOCK TABLES trans READ, customer WRITE;
  2215.           mysql> select sum(value) from trans where customer_id= some_id;
  2216.           mysql> update customer set total_value=sum_from_previous_statement
  2217.                      where customer_id=some_id;
  2218.           mysql> UNLOCK TABLES;
  2219.      Without `LOCK TABLES', there is a chance that another thread might
  2220.      insert a new row in the `trans' table between execution of the
  2221.      `SELECT' and `UPDATE' statements.
  2222. By using incremental updates (`UPDATE customer SET
  2223. value=value+new_value') or the `LAST_INSERT_ID()' function, you can
  2224. avoid using `LOCK TABLES' in many cases.
  2225. You can also solve some cases by using the user-level lock functions
  2226. `GET_LOCK()' and `RELEASE_LOCK()'.  These locks are saved in a hash
  2227. table in the server and implemented with `pthread_mutex_lock()' and
  2228. `pthread_mutex_unlock()' for high speed.  *Note Miscellaneous
  2229. functions::.
  2230. See *Note Internal locking::, for more information on locking policy.
  2231. You can also lock all tables in all databases with read locks with the
  2232. `FLUSH TABLES WITH READ LOCK' command. *Note FLUSH::. This is very
  2233. convinient way to get backups if you have a file system, like Veritas,
  2234. that can take snapshots in time.
  2235. *NOTE*: `LOCK TABLES' is not transaction safe and will automaticly
  2236. commit any active transactions before attempting to lock the tables.
  2237. `SET' Syntax
  2238. ============
  2239.      SET [OPTION] SQL_VALUE_OPTION= value, ...
  2240. `SET OPTION' sets various options that affect the operation of the
  2241. server or your client.  Any option you set remains in effect until the
  2242. current session ends, or until you set the option to a different value.
  2243. `CHARACTER SET character_set_name | DEFAULT'
  2244.      This maps all strings from and to the client with the given
  2245.      mapping.  Currently the only option for `character_set_name' is