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

MySQL数据库

开发平台:

Visual C++

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