diff options
author | unknown <jcole@tetra.spaceapes.com> | 2001-08-13 14:10:46 -0500 |
---|---|---|
committer | unknown <jcole@tetra.spaceapes.com> | 2001-08-13 14:10:46 -0500 |
commit | 577f5ea1fec80cd117c36effcf156b02cbbb8c38 (patch) | |
tree | 2faeabb3a2e1ae4a9fb331169c2f33a198c1a1dc | |
parent | edccd23fcebaf7a3e99c535bb364b615539fef9e (diff) | |
download | mariadb-git-577f5ea1fec80cd117c36effcf156b02cbbb8c38.tar.gz |
Replaced @strong{MySQL} with MySQL
Replaced @strong{MySQL AB} with MySQL AB
-rw-r--r-- | Docs/manual.texi | 4674 |
1 files changed, 2337 insertions, 2337 deletions
diff --git a/Docs/manual.texi b/Docs/manual.texi index 59d9e44a6cf..05310a3cdd9 100644 --- a/Docs/manual.texi +++ b/Docs/manual.texi @@ -34,7 +34,7 @@ @c yellow. From Steeve Buehler <ahr@YogElements.com> @set _extra_head <style> code {color:purple} tt {color:green} samp {color:navy} pre {color:maroon} </style> -@settitle @strong{MySQL} Reference Manual for version @value{mysql_version}. +@settitle MySQL Reference Manual for version @value{mysql_version}. @c We want single-sided heading format, with chapters on new pages. To @c get double-sided format change 'on' below to 'odd' @@ -57,14 +57,14 @@ @ifinfo @format START-INFO-DIR-ENTRY -* mysql: (mysql). @strong{MySQL} documentation. +* mysql: (mysql). MySQL documentation. END-INFO-DIR-ENTRY @end format @end ifinfo @titlepage @sp 10 -@center @titlefont{@strong{MySQL} Reference Manual} +@center @titlefont{MySQL Reference Manual} @sp 10 @center Copyright @copyright{} 1997-2001 MySQL AB @c blank page after title page makes page 1 be a page front. @@ -101,31 +101,31 @@ END-INFO-DIR-ENTRY @c @end ifhtml @ifinfo -This is a manual for @strong{MySQL}. This version is about the -@value{mysql_version} version of @strong{MySQL}. You can find a manual -about any older version of @strong{MySQL} in the binary or source +This is a manual for MySQL. This version is about the +@value{mysql_version} version of MySQL. You can find a manual +about any older version of MySQL in the binary or source distribution for that version. @end ifinfo @menu -* Introduction:: General Information about @strong{MySQL} -* Installing:: Installing @strong{MySQL} -* Tutorial:: @strong{MySQL} Tutorial +* Introduction:: General Information about MySQL +* Installing:: Installing MySQL +* Tutorial:: MySQL Tutorial * MySQL Database Administration:: * MySQL Optimization:: -* Reference:: @strong{MySQL} language reference -* Table types:: @strong{MySQL} table types -* Clients:: @strong{MySQL} client tools and APIs +* Reference:: MySQL language reference +* Table types:: MySQL table types +* Clients:: MySQL client tools and APIs * Extending MySQL:: * Problems:: Problems -* Environment variables:: @strong{MySQL} environment variables -* Users:: Some @strong{MySQL} users +* Environment variables:: MySQL environment variables +* Users:: Some MySQL users * MySQL customer usage:: * Contrib:: Contributed programs -* Credits:: Contributors to @strong{MySQL} -* News:: @strong{MySQL} change history +* Credits:: Contributors to MySQL +* News:: MySQL change history * Porting:: Comments on porting to other systems -* Regexp:: Description of @strong{MySQL} regular expression syntax +* Regexp:: Description of MySQL regular expression syntax * Unireg:: What is Unireg? * GPL license:: GNU General Public License * LGPL license:: GNU Library General Public License @@ -146,8 +146,8 @@ distribution for that version. @cindex online location of manual @cindex manual, online location -This is the @strong{MySQL} reference manual; it documents @strong{MySQL} -Version @value{mysql_version}. As @strong{MySQL} is work in progress, +This is the MySQL reference manual; it documents MySQL +Version @value{mysql_version}. As MySQL is work in progress, the manual gets updated frequently. There is a very good chance that this version is out of date, unless you are looking at it online. The most recent version of this manual is available at @@ -155,31 +155,31 @@ most recent version of this manual is available at have a hard time finding information in the manual, you can try the searchable PHP version at @uref{http://www.mysql.com/documentation/manual.php}. -@strong{MySQL} is a very fast, multi-threaded, multi-user, and robust SQL +MySQL is a very fast, multi-threaded, multi-user, and robust SQL (Structured Query Language) database server. -@strong{MySQL} is free software. It is licensed with the @strong{GNU +MySQL is free software. It is licensed with the @strong{GNU GENERAL PUBLIC LICENSE} @uref{http://www.gnu.org/}. @xref{Licensing and Support}. -@uref{http://www.mysql.com/, The @strong{MySQL} home page} -provides the latest information about @strong{MySQL}. +@uref{http://www.mysql.com/, The MySQL home page} +provides the latest information about MySQL. The following list describes some useful sections of the manual: @itemize @bullet @item -For information about the company behind @strong{MySQL}, see +For information about the company behind MySQL, see @ref{What is MySQL AB}. @item -For a discussion of @strong{MySQL}'s capabilities, see @ref{Features}. +For a discussion of MySQL's capabilities, see @ref{Features}. @item For installation instructions, see @ref{Installing}. @item -For tips on porting @strong{MySQL} to new architectures or operating +For tips on porting MySQL to new architectures or operating systems, see @ref{Porting}. @item @@ -187,7 +187,7 @@ For information about upgrading from a Version 3.22 release, see @ref{Upgrading-from-3.22}. @item -For a tutorial introduction to @strong{MySQL}, see @ref{Tutorial}. +For a tutorial introduction to MySQL, see @ref{Tutorial}. @item For examples of SQL and benchmarking information, see the benchmarking @@ -216,7 +216,7 @@ The @code{mysqlbug} script should be used to generate bug reports. For source distributions, the @code{mysqlbug} script can be found in the @file{scripts} directory. For binary distributions, @code{mysqlbug} can be found in the @file{bin} directory. If you have found a sensitive -security bug in @strong{MySQL}, you should send an email to +security bug in MySQL, you should send an email to @email{security@@mysql.com}. @cindex errors, reporting @@ -230,7 +230,7 @@ manual, please send them to the manual team at @email{docs@@mysql.com}. This is a reference manual; it does not provide general instruction on SQL or relational database concepts. If you want general information about SQL, see @ref{General-SQL}. For books that focus more specifically on -@strong{MySQL}, see @ref{MySQL-Books}. +MySQL, see @ref{MySQL-Books}. @menu @@ -247,13 +247,13 @@ see @ref{General-SQL}. For books that focus more specifically on @section MySQL, MySQL AB, and Open Source @menu -* What-is:: What is @strong{MySQL}? -* What is MySQL AB:: What is @strong{MySQL AB}? +* What-is:: What is MySQL? +* What is MySQL AB:: What is MySQL AB? * Manual-info:: About this manual * Manual conventions:: Conventions used in this manual -* History:: History of @strong{MySQL} -* Features:: The main features of @strong{MySQL} -* Stability:: How stable is @strong{MySQL}? +* History:: History of MySQL +* Features:: The main features of MySQL +* Stability:: How stable is MySQL? * Table size:: * Year 2000 compliance:: Year 2000 compliance @end menu @@ -265,89 +265,89 @@ see @ref{General-SQL}. For books that focus more specifically on @cindex MySQL, defined @cindex MySQL, introduction -@strong{MySQL}, the most popular Open Source SQL database, is provided -by @strong{MySQL AB}. @strong{MySQL AB} is a commercial company that -builds its business providing services around the @strong{MySQL} database. +MySQL, the most popular Open Source SQL database, is provided +by MySQL AB. MySQL AB is a commercial company that +builds its business providing services around the MySQL database. @xref{What is MySQL AB}. @table @asis -@item @strong{MySQL} is a database management system. +@item MySQL is a database management system. A database is a structured collection of data. It may be anything from a simple shopping list to a picture gallery or the vast amounts of information in a corporate network. To add, access, and process data stored in a computer database, you need a database management system -such as @strong{MySQL}. Since computers are very good at handling large +such as MySQL. Since computers are very good at handling large amounts of data, database management plays a central role in computing, as stand-alone utilities, or as parts of other applications. @cindex databases, defined -@item @strong{MySQL} is a relational database management system. +@item MySQL is a relational database management system. A relational database stores data in separate tables rather than putting all the data in one big storeroom. This adds speed and flexibility. The tables are linked by defined relations making it possible to combine -data from several tables on request. The SQL part of @strong{MySQL} +data from several tables on request. The SQL part of MySQL stands for "Structured Query Language" - the most common standardized language used to access databases. @cindex relational databases, defined @cindex SQL, defined -@item @strong{MySQL} is Open Source Software. +@item MySQL is Open Source Software. Open Source means that it is possible for anyone to use and modify. -Anybody can download @strong{MySQL} from the Internet and use it +Anybody can download MySQL from the Internet and use it without paying anything. Anybody so inclined can study the source code -and change it to fit their needs. @strong{MySQL} uses the GPL (GNU +and change it to fit their needs. MySQL uses the GPL (GNU General Public License) @uref{http://www.gnu.org}, to define what you may and may not do with the software in different situations. If you -feel uncomfortable with the GPL or need to embed @strong{MySQL} into a +feel uncomfortable with the GPL or need to embed MySQL into a commercial application you can buy a commercially licensed version from us. @cindex open source, defined @cindex General Public License -@item Why use @strong{MySQL}? +@item Why use MySQL? -@strong{MySQL} is very fast, reliable, and easy to use. If that is what -you are looking for, you should give it a try. @strong{MySQL} also has a +MySQL is very fast, reliable, and easy to use. If that is what +you are looking for, you should give it a try. MySQL also has a very practical set of features developed in very close cooperation with -our users. You can find a performance comparison of @strong{MySQL} +our users. You can find a performance comparison of MySQL to some other database managers on our benchmark page. @xref{MySQL Benchmarks}. -@strong{MySQL} was originally developed to handle very large databases +MySQL was originally developed to handle very large databases much faster than existing solutions and has been successfully used in highly demanding production environments for several years. Though -under constant development, @strong{MySQL} today offers a rich and very +under constant development, MySQL today offers a rich and very useful set of functions. The connectivity, speed, and security make -@strong{MySQL} highly suited for accessing databases on the Internet. +MySQL highly suited for accessing databases on the Internet. -@item The technical features of @strong{MySQL} +@item The technical features of MySQL -For advanced technical information, see @ref{Reference}. @strong{MySQL} is +For advanced technical information, see @ref{Reference}. MySQL is a client/server system that consists of a multi-threaded SQL server that supports different backends, several different client programs and libraries, administrative tools, and several programming interfaces. -We also provide @strong{MySQL} as a multi-threaded library which you can +We also provide MySQL as a multi-threaded library which you can link into your application to get a smaller, faster, easier to manage product. -@item @strong{MySQL} has a lot of contributed software available. +@item MySQL has a lot of contributed software available. It is very likely that you will find that your favorite application or -language already supports @strong{MySQL}. +language already supports MySQL. @end table @cindex pronunciation, MySQL @cindex MySQL, pronunciation @cindex goals of MySQL -The official way to pronounce @strong{MySQL} is ``My Ess Que Ell'' (not +The official way to pronounce MySQL is ``My Ess Que Ell'' (not MY-SEQUEL). But we try to avoid correcting people who say MY-SEQUEL. @@ -356,22 +356,22 @@ MY-SEQUEL). But we try to avoid correcting people who say MY-SEQUEL. @cindex MySQL AB, defined -@strong{MySQL AB} is the Swedish company owned and run by the @strong{MySQL} -founders and main developers. We are dedicated to developing @strong{MySQL} -and spreading our database to new users. @strong{MySQL AB} owns the copyright -to the @strong{MySQL} server source code and the @strong{MySQL} trademark. +MySQL AB is the Swedish company owned and run by the MySQL +founders and main developers. We are dedicated to developing MySQL +and spreading our database to new users. MySQL AB owns the copyright +to the MySQL server source code and the MySQL trademark. A significant amount of revenues from our services goes to developing -@strong{MySQL}. @xref{What-is}. +MySQL. @xref{What-is}. -@strong{MySQL AB} has been profitable providing @strong{MySQL} from the start. +MySQL AB has been profitable providing MySQL from the start. We don't get any outside funding, but have earned all our money ourselves. We are searching after partners that would like to support our development -of @strong{MySQL} so that we could accelerate the development pace. If you +of MySQL so that we could accelerate the development pace. If you are interested in doing this, you can email @email{partner@@mysql.com} about this! -@strong{MySQL AB} has currently 20+ people +MySQL AB has currently 20+ people (@uref{http://www.mysql.com/development/team.html}) on its payroll and is growing rapidly. @@ -379,26 +379,26 @@ Our main sources of income are: @itemize @bullet @item -Commercial high quality support for @strong{MySQL} provided by the -@strong{MySQL} developers themselves. If you are interested in purchasing +Commercial high quality support for MySQL provided by the +MySQL developers themselves. If you are interested in purchasing a support contract, please visit @uref{https://order.mysql.com/} to view our support options or to order support. @item Consulting services. We have developers and consultants in 12 countries and partners in many other countries that can help you with almost any -@strong{MySQL} related issues. If you need consulting services, please +MySQL related issues. If you need consulting services, please email a good description of your needs to @email{info@@mysql.com}! If we can't handle this ourselves we can usually find a partner or a developer that can help you with your problems. @item -We sell licenses for using @strong{MySQL} as an embedded database. +We sell licenses for using MySQL as an embedded database. @xref{Cost}. If you have a commercial product for which you need a fast, high quality database, but you can't afford to make your product Open Source, -you can buy the right to use the @strong{MySQL} server under a normal +you can buy the right to use the MySQL server under a normal commercial copyright. If you are interested in this you can buy -@strong{MySQL} licenses at @uref{https://order.mysql.com/} or contact us +MySQL licenses at @uref{https://order.mysql.com/} or contact us at @email{licensing@@mysql.com}. @item @@ -409,27 +409,27 @@ in the Open source, Linux and database community. If you are interested in this email @email{advertising@@mysql.com}. @item -We are building a partner program to be able to provide @strong{MySQL} +We are building a partner program to be able to provide MySQL services in every country. If you are interested in becoming a partner -of @strong{MySQL AB} please visit +of MySQL AB please visit @uref{http://www.mysql.com/information/partners.html} or email @email{partner@@mysql.com}. @item -We provide @strong{MySQL} training through our partner programs. For more +We provide MySQL training through our partner programs. For more information, please email @email{info@@mysql.com}. @item -The @strong{MySQL} brand has, since 1995, been associated with speed and +The MySQL brand has, since 1995, been associated with speed and reliability, and is known to be something you can depend upon. If you are -interested in using the @strong{MySQL} trademark in your marketing, you +interested in using the MySQL trademark in your marketing, you can email @email{info@@mysql.com} about this. @end itemize -The @strong{MySQL} core values show our dedication to @strong{MySQL} and +The MySQL core values show our dedication to MySQL and Open Source. -We want @strong{MySQL} to be: +We want MySQL to be: @itemize @bullet @item @@ -446,7 +446,7 @@ Fun to use and improve. Free from bugs. @end itemize -@strong{MySQL AB} and the people of @strong{MySQL AB}: +MySQL AB and the people of MySQL AB: @itemize @bullet @item @@ -622,10 +622,10 @@ flexible enough for our needs. This resulted in a new SQL interface to our database but with almost the same API interface as @code{mSQL}. This API was chosen to ease porting of third-party code. -The derivation of the name @strong{MySQL} is not perfectly clear. Our base +The derivation of the name MySQL is not perfectly clear. Our base directory and a large number of our libraries and tools have had the prefix ``my'' for well over 10 years. However, Monty's daughter (some years younger) -is also named My. Which of the two gave its name to @strong{MySQL} is +is also named My. Which of the two gave its name to MySQL is still a mystery, even for us. @@ -636,7 +636,7 @@ still a mystery, even for us. @cindex features of MySQL The following list describes some of the important characteristics -of @strong{MySQL}: +of MySQL: @c This list is too technical and should be divided into one feature @c list comparable to commercial competition and a very technical on @@ -697,7 +697,7 @@ password traffic is encrypted when you connect to a server. @item ODBC (Open-DataBase-Connectivity) support for Win32 (with source). All ODBC 2.5 functions and many others. For example, you can use MS Access to -connect to your @strong{MySQL} server. @xref{ODBC}. +connect to your MySQL server. @xref{ODBC}. @item Very fast B-tree disk tables with index compression. @@ -705,7 +705,7 @@ Very fast B-tree disk tables with index compression. @item Up to 32 indexes per table are allowed. Each index may consist of 1 to 16 columns or parts of columns. The maximum index length is 500 bytes (this -may be changed when compiling @strong{MySQL}). An index may use a prefix +may be changed when compiling MySQL). An index may use a prefix of a @code{CHAR} or @code{VARCHAR} field. @item @@ -715,9 +715,9 @@ Fixed-length and variable-length records. In-memory hash tables which are used as temporary tables. @item -Handles large databases. We are using @strong{MySQL} with some +Handles large databases. We are using MySQL with some databases that contain 50,000,000 records and we know of users that -uses @strong{MySQL} with 60,000 tables and about 5,000,000,000 rows +uses MySQL with 60,000 tables and about 5,000,000,000 rows @item All columns have default values. You can use @code{INSERT} to insert a @@ -734,7 +734,7 @@ Written in C and C++. Tested with a broad range of different compilers. A very fast thread-based memory allocation system. @item -No memory leaks. @strong{MySQL} has been tested with Purify, a commercial +No memory leaks. MySQL has been tested with Purify, a commercial memory leakage detector. @item @@ -755,9 +755,9 @@ string columns are case insensitive. @item Sorting is done according to the chosen character set (the Swedish -way by default). It is possible to change this when the @strong{MySQL} server +way by default). It is possible to change this when the MySQL server is started up. To see an example of very advanced sorting, look at the -Czech sorting code. @strong{MySQL} supports many different character sets +Czech sorting code. MySQL supports many different character sets that can be specified at compile and run time. @item @@ -776,7 +776,7 @@ function call, no spaces are allowed between the function name and the @samp{(} that follows it. @xref{Reserved words}. @item -All @strong{MySQL} programs can be invoked with the @code{--help} or @code{-?} +All MySQL programs can be invoked with the @code{--help} or @code{-?} options to obtain online assistance. @item @@ -784,11 +784,11 @@ The server can provide error messages to clients in many languages. @xref{Languages}. @item -Clients may connect to the @strong{MySQL} server using TCP/IP Sockets, +Clients may connect to the MySQL server using TCP/IP Sockets, Unix Sockets (Unix), or Named Pipes (NT). @item -The @strong{MySQL}-specific @code{SHOW} command can be used to retrieve +The MySQL-specific @code{SHOW} command can be used to retrieve information about databases, tables, and indexes. The @code{EXPLAIN} command can be used to determine how the optimizer resolves a query. @end itemize @@ -799,28 +799,28 @@ can be used to determine how the optimizer resolves a query. @cindex stability -This section addresses the questions ``How stable is @strong{MySQL}?'' and -``Can I depend on @strong{MySQL} in this project?'' We will try to clarify +This section addresses the questions ``How stable is MySQL?'' and +``Can I depend on MySQL in this project?'' We will try to clarify some issues and to answer some of the more important questions that seem to concern many people. This section has been put together from information gathered from the mailing list (which is very active in reporting bugs). -At TcX, @strong{MySQL} has worked without any problems in our projects since -mid-1996. When @strong{MySQL} was released to a wider public, we noticed that +At TcX, MySQL has worked without any problems in our projects since +mid-1996. When MySQL was released to a wider public, we noticed that there were some pieces of ``untested code'' that were quickly found by the new users who made queries in a manner different than our own. Each new release has had fewer portability problems than the previous one (even though each has had many new features). -Each release of @strong{MySQL} has been usable, and there have been problems +Each release of MySQL has been usable, and there have been problems only when users start to use code from the ``gray zones.'' Naturally, outside users don't know what the gray zones are; this section attempts to indicate those that are currently known. The descriptions deal with Version 3.23 -of @strong{MySQL}. All known and reported bugs are fixed in the latest +of MySQL. All known and reported bugs are fixed in the latest version, with the exception of the bugs listed in the bugs section, which are things that are design-related. @xref{Bugs}. -@strong{MySQL} is written in multiple layers and different independent +MySQL is written in multiple layers and different independent modules. These modules are listed below with an indication of how well-tested each of them is: @@ -828,13 +828,13 @@ well-tested each of them is: @table @strong @item The ISAM table handler --- Stable -This manages storage and retrieval of all data in @strong{MySQL} Version 3.22 -and earlier. In all @strong{MySQL} releases there hasn't been a single +This manages storage and retrieval of all data in MySQL Version 3.22 +and earlier. In all MySQL releases there hasn't been a single (reported) bug in this code. The only known way to get a corrupted table is to kill the server in the middle of an update. Even that is unlikely to destroy any data beyond rescue, because all data are flushed to disk between each query. There hasn't been a single bug report about lost data -because of bugs in @strong{MySQL}. +because of bugs in MySQL. @cindex ISAM table handler @cindex storing, data @@ -842,7 +842,7 @@ because of bugs in @strong{MySQL}. @cindex data, ISAM table handler @item The MyISAM table handler --- Stable -This is new in @strong{MySQL} Version 3.23. It's largely based on the ISAM +This is new in MySQL Version 3.23. It's largely based on the ISAM table code but has a lot of new and very useful features. @item The parser and lexical analyser --- Stable @@ -870,7 +870,7 @@ handling. Not a single reported bug in this system. @item Locking --- Gamma This is very system-dependent. On some systems there are big problems using standard OS locking (@code{fcntl()}). In these cases, you should run the -@strong{MySQL} daemon with the @code{--skip-locking} flag. Problems are known +MySQL daemon with the @code{--skip-locking} flag. Problems are known to occur on some Linux systems, and on SunOS when using NFS-mounted file systems. @@ -898,7 +898,7 @@ be a mutex locking/thread juggling. @item Other thread implementions --- Beta - Gamma The ports to other systems are still very new and may have bugs, possibly -in @strong{MySQL}, but most often in the thread implementation itself. +in MySQL, but most often in the thread implementation itself. @item @code{LOAD DATA ...}, @code{INSERT ... SELECT} --- Stable Some people thought they had found bugs here, but these usually have @@ -917,19 +917,19 @@ Written and maintained by Yves Carlier (@email{Yves.Carlier@@rug.ac.be}). Thanks! @item @code{GRANT} --- Stable -Big changes made in @strong{MySQL} Version 3.22.12. +Big changes made in MySQL Version 3.22.12. @item @strong{MyODBC} (uses ODBC SDK 2.5) --- Gamma It seems to work well with some programs. @item Replication -- Beta / Gamma We are still working on replication, so don't expect this to be rock -solid yet. On the other hand, some @strong{MySQL} users are already +solid yet. On the other hand, some MySQL users are already using this with good results. @item BDB Tables -- Beta The Berkeley DB code is very stable, but we are still improving the interface -between @strong{MySQL} and BDB tables, so it will take some time before this +between MySQL and BDB tables, so it will take some time before this is as tested as the other table types. @item InnoDB Tables -- Beta @@ -949,8 +949,8 @@ Text search seems to work, but is still not widely used. @end table -@strong{MySQL AB} provides e-mail support for paying customers, but the -@strong{MySQL} mailing list usually provides answers to common questions. +MySQL AB provides e-mail support for paying customers, but the +MySQL mailing list usually provides answers to common questions. Bugs are usually fixed right away with a patch; for serious bugs, there is almost always a new release. @@ -964,8 +964,8 @@ almost always a new release. @cindex limits, file size @cindex files, size limits -@strong{MySQL} Version 3.22 has a 4G limit on table size. With the new -@code{MyISAM} in @strong{MySQL} Version 3.23 the maximum table size is +MySQL Version 3.22 has a 4G limit on table size. With the new +@code{MyISAM} in MySQL Version 3.23 the maximum table size is pushed up to 8 million terabytes (2 ^ 63 bytes). Note, however, that operating systems have their own file size @@ -985,10 +985,10 @@ On Linux 2.2 you can get bigger tables than 2G by using the LFS patch for the ext2 file system. On Linux 2.4 there exists also patches for ReiserFS to get support for big files. -This means that the table size for @strong{MySQL} is normally limited by +This means that the table size for MySQL is normally limited by the operating system. -By default, @strong{MySQL} tables have a maximum size of about 4G. You can +By default, MySQL tables have a maximum size of about 4G. You can check the maximum table size for a table with the @code{SHOW TABLE STATUS} command or with the @code{myisamchk -dv table_name}. @xref{SHOW}. @@ -1019,26 +1019,26 @@ tables}. @cindex compliance, Y2K @cindex date functions, Y2K compliance -@strong{MySQL} itself has no problems with Year 2000 (Y2K) compliance: +MySQL itself has no problems with Year 2000 (Y2K) compliance: @itemize @bullet @item -@strong{MySQL} uses Unix time functions and has no problems with dates +MySQL uses Unix time functions and has no problems with dates until @code{2069}; all 2-digit years are regarded to be in the range @code{1970} to @code{2069}, which means that if you store @code{01} in a -@code{year} column, @strong{MySQL} treats it as @code{2001}. +@code{year} column, MySQL treats it as @code{2001}. @item -All @strong{MySQL} date functions are stored in one file @file{sql/time.cc} +All MySQL date functions are stored in one file @file{sql/time.cc} and coded very carefully to be year 2000-safe. @item -In @strong{MySQL} Version 3.22 and later, the new @code{YEAR} column type +In MySQL Version 3.22 and later, the new @code{YEAR} column type can store years @code{0} and @code{1901} to @code{2155} in 1 byte and display them using 2 or 4 digits. @end itemize -You may run into problems with applications that use @strong{MySQL} in a +You may run into problems with applications that use MySQL in a way that is not Y2K-safe. For example, many old applications store or manipulate years using 2-digit values (which are ambiguous) rather than 4-digit values. This problem may be compounded by applications that use @@ -1048,7 +1048,7 @@ Unfortunately, these problems may be difficult to fix, because different applications may be written by different programmers, each of whom may use a different set of conventions and date-handling functions. -Here is a simple demonstration illustrating that @strong{MySQL} doesn't have +Here is a simple demonstration illustrating that MySQL doesn't have any problems with dates until the year 2030: @example @@ -1106,8 +1106,8 @@ range up to only @code{2030-01-01}. @code{TIMESTAMP} has a range of @code{1970} to @code{2030} on 32-bit machines (signed value). On 64-bit machines it handles times up to @code{2106} (unsigned value). -Even though @strong{MySQL} is Y2K-compliant, it is your responsibility to -provide unambiguous input. See @ref{Y2K issues} for @strong{MySQL}'s rules +Even though MySQL is Y2K-compliant, it is your responsibility to +provide unambiguous input. See @ref{Y2K issues} for MySQL's rules for dealing with ambiguous date input data (data containing 2-digit year values). @@ -1115,8 +1115,8 @@ values). @node MySQL Information Sources, Licensing and Support, MySQL and MySQL AB, Introduction @section MySQL Information Sources -@cindex manuals, about @strong{MySQL} -@cindex books, about @strong{MySQL} +@cindex manuals, about MySQL +@cindex books, about MySQL @menu * MySQL-Books:: @@ -1131,12 +1131,12 @@ values). While this manual is still the right place for up to date technical information, its primary goal is to contain everything there is to know -about @strong{MySQL}. It is sometimes nice to have a bound book to read -in bed or while you travel. Here is a list of books about @strong{MySQL} and +about MySQL. It is sometimes nice to have a bound book to read +in bed or while you travel. Here is a list of books about MySQL and related subjects (in English). By purchasing a book through these hyperlinks provided herein, you are -contributing to the development of @strong{MySQL}. +contributing to the development of MySQL. @emph{MySQL} @multitable @columnfractions .3 .7 @@ -1153,38 +1153,38 @@ contributing to the development of @strong{MySQL}. @uref{http://www.kitebird.com/mysql-book/errata.html, are available here} @end multitable -Foreword by Michael ``Monty'' Widenius, @strong{MySQL} Moderator. +Foreword by Michael ``Monty'' Widenius, MySQL Moderator. @* In @emph{MySQL}, Paul DuBois provides you with a comprehensive guide to one of the most popular relational database systems. Paul has -contributed to the online documentation for @strong{MySQL} and is an -active member of the @strong{MySQL} community. The principal @strong{MySQL} +contributed to the online documentation for MySQL and is an +active member of the MySQL community. The principal MySQL developer, Monty Widenius, and a network of his fellow developers reviewed the manuscript, and provided Paul with the kind of insight no one else could supply. @* -Instead of merely giving you a general overview of @strong{MySQL}, Paul +Instead of merely giving you a general overview of MySQL, Paul teaches you how to make the most of its capabilities. Through two sample database applications that run throughout the book, he gives you solutions to problems you're sure to face. He helps you -integrate @strong{MySQL} efficiently with third-party tools, such as PHP +integrate MySQL efficiently with third-party tools, such as PHP and Perl, enabling you to generate dynamic Web pages through database queries. He teaches you to write programs that access -@strong{MySQL} databases, and also provides a comprehensive set of +MySQL databases, and also provides a comprehensive set of references to column types, operators, functions, SQL syntax, -@strong{MySQL} programming, C API, Perl @code{DBI}, and PHP API. +MySQL programming, C API, Perl @code{DBI}, and PHP API. @emph{MySQL} simply gives you the kind of information you won't find anywhere else. @* -If you use @strong{MySQL}, this book provides you with: +If you use MySQL, this book provides you with: @itemize @bullet @item -An introduction to @strong{MySQL} and SQL. +An introduction to MySQL and SQL. @item -Coverage of @strong{MySQL}'s data types and how to use them. +Coverage of MySQL's data types and how to use them. @item Thorough treatment of how to write client programs in C. @item @@ -1194,13 +1194,13 @@ command-line and Web-based applications. Tips on administrative issues such as user accounts, backup, crash recovery, and security. @item -Help in choosing an ISP for @strong{MySQL} access. +Help in choosing an ISP for MySQL access. @item -A comprehensive reference for @strong{MySQL}'s data types, operators, +A comprehensive reference for MySQL's data types, operators, functions, and SQL statements and utilities. @item -Complete reference guides for @strong{MySQL}'s C API, the Perl @code{DBI} API, -and PHP's @strong{MySQL}-related functions. +Complete reference guides for MySQL's C API, the Perl @code{DBI} API, +and PHP's MySQL-related functions. @end itemize @* @@ -1215,7 +1215,7 @@ and PHP's @strong{MySQL}-related functions. @item Price @tab $34.95 @end multitable -This book teaches you how to use @strong{MySQL} and @code{mSQL}, two popular +This book teaches you how to use MySQL and @code{mSQL}, two popular and robust database products that support key subsets of SQL on both Linux and Unix systems. Anyone who knows basic C, Java, Perl, or Python can write a program to interact with a database, either as a stand-alone @@ -1273,7 +1273,7 @@ No description available. @end multitable This book puts together information on installing, setting up, and -troubleshooting Apache, @strong{MySQL}, PHP3, and IMP into one complete +troubleshooting Apache, MySQL, PHP3, and IMP into one complete volume. You also learn how each piece is part of a whole by learning, step-by-step, how to create a web-based e-mail system. Learn to run the equivalent of Active Server Pages (ASP) using PHP3, set up an @@ -1331,14 +1331,14 @@ time. @end multitable @emph{PHP and MySQL Web Development} introduces you to the advantages -of implementing both @strong{MySQL} and PHP. These advantages are detailed +of implementing both MySQL and PHP. These advantages are detailed through the provision of both statistics and several case studies. A practical web application is developed throughout the book, providing you with the tools necessary to implement a functional online database. Each function is developed separately, allowing you the choice to incorporate only those parts that you would like to implement. Programming concepts of the PHP language are highlighted, -including functions which tie @strong{MySQL} support into a PHP script and +including functions which tie MySQL support into a PHP script and advanced topics regarding table manipulation. @* @@ -1482,7 +1482,7 @@ A complete reference to DBI. @node General-SQL, Useful Links, MySQL-Books, MySQL Information Sources @subsection General SQL Information and Tutorials -The following book has been recommended by several people on the @strong{MySQL} +The following book has been recommended by several people on the MySQL mailing list: @example @@ -1494,7 +1494,7 @@ ISBN 0-201-62623-3 http://www.awl.com @end example -The following book has also received some recommendations by @strong{MySQL} +The following book has also received some recommendations by MySQL users: @example @@ -1513,59 +1513,59 @@ http://w3.one.net/~jhoffman/sqltut.htm @subsection Useful MySQL-related Links Apart from the following links, you can find and download a lot of -@strong{MySQL} programs, tools and APIs from the +MySQL programs, tools and APIs from the @uref{http://www.mysql.com/Downloads/Contrib/, Contrib directory}. @cindex @code{Contrib} directory @cindex URLs to MySQL information @cindex related information URLs -@strong{MySQL} +MySQL @subheading Tutorials and Manuals @table @asis @item @uref{http://netgraft.com/~mbac/research/mysqlmyths.html, MySQL Myths Debunked} -@strong{MySQL} used in the real world. +MySQL used in the real world. @item @uref{http://www.4t2.com/mysql} Information about the German MySQL mailing list. @item @uref{http://www2.rent-a-database.de/mysql/} -@strong{MySQL} handbook in German. +MySQL handbook in German. @item @uref{http://www.bitmover.com:8888//home/bk/mysql} -Web access to the @strong{MySQL} BitKeeper repository. +Web access to the MySQL BitKeeper repository. @item @uref{http://www.analysisandsolutions.com/code/mybasic.htm} -Beginners @strong{MySQL} Tutorial on how to install and set up -@strong{MySQL} on a Windows machine. +Beginners MySQL Tutorial on how to install and set up +MySQL on a Windows machine. @item @uref{http://www.devshed.com/Server_Side/MySQL/} -A lot of @strong{MySQL} tutorials. +A lot of MySQL tutorials. @item @uref{http://mysql.hitstar.com/} MySQL manual in Chinese. @item @uref{http://www.linuxplanet.com/linuxplanet/tutorials/1046/1/} -Setting Up a @strong{MySQL}-based Web site. +Setting Up a MySQL-based Web site. @item @uref{http://www.hotwired.com/webmonkey/backend/tutorials/tutorial1.html} -@strong{MySQL}-Perl tutorial. +MySQL-Perl tutorial. @item @uref{http://www.iserver.com/support/contrib/perl5/modules.html} Installing new Perl modules that require locally installed modules. @item @uref{http://www.hotwired.com/webmonkey/databases/tutorials/tutorial4.html} -PHP/@strong{MySQL} Tutorial. +PHP/MySQL Tutorial. @item @uref{http://www.useractive.com/} -Hands on tutorial for @strong{MySQL}. +Hands on tutorial for MySQL. @end table @subheading Porting MySQL/Using MySQL on Different Systems @table @asis @item @uref{http://xclave.macnn.com/MySQL/} -The Mac OS Xclave. Running @strong{MySQL} on Mac OS X. +The Mac OS Xclave. Running MySQL on Mac OS X. @item @uref{http://www.prnet.de/RegEx/mysql.html} MySQL for Mac OS X Server. @@ -1587,14 +1587,14 @@ MySQL for Amiga @table @asis @item @uref{http://dbimysql.photoflux.com/} -Perl DBI with @strong{MySQL} FAQ. +Perl DBI with MySQL FAQ. @end table @subheading MySQL Discussion Forums @table @asis @item @uref{http://www.weberdev.com/} -Examples using @strong{MySQL}; (check Top 20) +Examples using MySQL; (check Top 20) @item @uref{http://futurerealm.com/forum/futureforum.htm} FutureForum Web Discussion Software. @@ -1606,7 +1606,7 @@ FutureForum Web Discussion Software. @table @asis @item @uref{http://www.supportwizard.com/} SupportWizard; Interactive helpdesk on the Web (This product includes a -licensed copy of @strong{MySQL}.) +licensed copy of MySQL.) @item @uref{http://www.sonork.com/} Sonork, Instant Messenger that is not only Internet oriented. It's @@ -1617,7 +1617,7 @@ is free, server is free for up to 5 seats. StWeb - Stratos Web and Application server - An easy-to-use, cross platform, Internet/Intranet development and deployment system for development of web-enabled applications. The standard version of StWeb -has a native interface to @strong{MySQL} database. +has a native interface to MySQL database. @item @uref{http://www.rightnowtech.com/} Right Now Web; Web automation for customer service. @@ -1643,44 +1643,44 @@ which services were discovered on which dial-up numbers in your organization. @table @asis @item @uref{http://www.urbanresearch.com/software/utils/urbsql/index.html, urSQL} SQL Editor and Query Utility. Custom syntax highlighting, editable -results grid, exportable result-sets, basic @strong{MySQL} admin functions, +results grid, exportable result-sets, basic MySQL admin functions, Etc.. For Windows. @item @uref{http://www.edatanew.com/, MySQL Data Manager} -@strong{MySQL} Data Manager * is platform independent web client -(written in perl) for @strong{MySQL} server over TCP/IP. +MySQL Data Manager * is platform independent web client +(written in perl) for MySQL server over TCP/IP. @item @uref{http://ksql.sourceforge.net/} -KDE @strong{MySQL} client. +KDE MySQL client. @item @uref{http://www.ecker-software.de} A Windows GUI client by David Ecker. @item @uref{http://www.icaap.org/software/kiosk/} -Kiosk; a @strong{MySQL} client for database management. Written in Perl. +Kiosk; a MySQL client for database management. Written in Perl. Will be a part of Bazaar. @item @uref{http://www.casestudio.com/} Db design tool that supports MySQL 3.23. @item @uref{http://home.skif.net/~voland/zeos/eng/index.html} -Zeos - A client that supports @strong{MySQL}, Interbase and PostgreSQL. +Zeos - A client that supports MySQL, Interbase and PostgreSQL. @item @uref{http://www.geocities.com/SiliconValley/Ridge/4280/GenericReportWriter/grwhome.html} A free report writer in Java @item @uref{http://www.javaframework.de} -MySQLExport - Export of @strong{MySQL} create statements and data in a lot of +MySQLExport - Export of MySQL create statements and data in a lot of different formats (SQL, HTML, CVS, text, ZIP, GZIP...) @item @uref{http://dlabs.4t2.com} -M2D, a @strong{MySQL} Administration client for Windows. M2D supports -administration of @strong{MySQL} databases, creation of new databases and +M2D, a MySQL Administration client for Windows. M2D supports +administration of MySQL databases, creation of new databases and tables, editing, and more. @item @uref{http://dlabs.4t2.com} Dexter, a small server written in Perl which can be used as a proxy server for -@strong{MySQL} or as a database extender. +MySQL or as a database extender. @item @uref{http://www.scibit.com/Products/Software/Utils/Mascon.asp} Mascon is a powerful Win32 GUI for administering MySQL databases. @@ -1704,7 +1704,7 @@ RedHat Linux (7.0 and above) Conectiva Linux (4.0 and above) @end table -@subheading Web Development Tools that Support @strong{MySQL} +@subheading Web Development Tools that Support MySQL @table @asis @item @uref{http://www.php.net/} @@ -1712,7 +1712,7 @@ PHP: A server-side HTML-embedded scripting language. @item @uref{http://www.midgard-project.org} The Midgard Application Server; a powerful Web development environment -based on @strong{MySQL} and PHP. +based on MySQL and PHP. @item @uref{http://www.smartworker.org} SmartWorker is a platform for Web application development. @@ -1731,13 +1731,13 @@ client will stop you. It works as standalone server or as Java servlet. Platform independent ASP from Chili!Soft @item @uref{http://www.voicenet.com/~zellert/tjFM} -A JDBC driver for @strong{MySQL}. +A JDBC driver for MySQL. @item @uref{http://www.wernhart.priv.at/php/} -@strong{MySQL} + PHP demos. +MySQL + PHP demos. @item @uref{http://www.dbwww.com/} -ForwardSQL: HTML interface to manipulate @strong{MySQL} databases. +ForwardSQL: HTML interface to manipulate MySQL databases. @item @uref{http://www.daa.com.au/~james/www-sql/} WWW-SQL: Display database information. @@ -1762,7 +1762,7 @@ Network Database Connection For Linux @item @uref{http://www.wdbi.net/} WDBI: Web browser as a universal front end to databases which supports -@strong{MySQL} well. +MySQL well. @item @uref{http://www.webgroove.com/} WebGroove Script: HTML compiler and server-side scripting language. @@ -1771,22 +1771,22 @@ WebGroove Script: HTML compiler and server-side scripting language. A server-side Web site scripting language. @item @uref{ftp://ftp.igc.apc.org/pub/myodbc/README} -How to use @strong{MySQL} with ColdFusion on Solaris. +How to use MySQL with ColdFusion on Solaris. @item @uref{http://calistra.com/MySQL/} -Calistra's ODBC @strong{MySQL} Administrator. +Calistra's ODBC MySQL Administrator. @cindex Webmerger @item @uref{http://www.webmerger.com} Webmerger - This CGI tool interprets files and generates dynamic output -based on a set of simple tags. Ready-to-run drivers for @strong{MySQL} and +based on a set of simple tags. Ready-to-run drivers for MySQL and PostgreSQL through ODBC. @item @uref{http://phpclub.net/} PHPclub - Tips and tricks for PHP. @item @uref{http://www.penguinservices.com/scripts} -@strong{MySQL} and Perl Scripts. +MySQL and Perl Scripts. @item @uref{http://www.widgetchuck.com} The Widgetchuck; Web Site Tools and Gadgets @@ -1820,7 +1820,7 @@ complicated, low-level, and time-consuming CGI programs. entity relationship diagram (ERD). @end table -@subheading Web Servers with @strong{MySQL} Tools +@subheading Web Servers with MySQL Tools @table @asis @item @uref{ftp://ftp.kcilink.com/pub/} @@ -1834,17 +1834,17 @@ The Roxen Challenger Web server. @table @asis @item @uref{http://www.seawood.org/msql_bind/} -@strong{MySQL} support for BIND (The Internet Domain Name Server). +MySQL support for BIND (The Internet Domain Name Server). @item @uref{http://www.inet-interactive.com/sendmail/} -@strong{MySQL} support for Sendmail and Procmail. +MySQL support for Sendmail and Procmail. @end table -@subheading Using @strong{MySQL} with Other Programs +@subheading Using MySQL with Other Programs @table @asis @item @uref{http://www.iserver.com/support/addonhelp/database/mysql/msaccess.html} -Using @strong{MySQL} with Access. +Using MySQL with Access. @item @uref{http://www.iserver.com/support/contrib/perl5/modules.html} Installing new Perl modules that require locally installed modules. @@ -1865,19 +1865,19 @@ definitive standard for ODBC on the Linux platform. This is to include GUI support for KDE. @item @uref{http://www.sw-soft.com/products/BtrieveODBC/} -A @strong{MySQL}-based ODBC driver for Btrieve. +A MySQL-based ODBC driver for Btrieve. @end table @subheading @strong{API}-related Links @table @asis @item @uref{http://www.jppp.com/} -Partially implemented TDataset-compatible components for @strong{MySQL}. +Partially implemented TDataset-compatible components for MySQL. @item @uref{http://www.riverstyx.net/qpopmysql/} -qpopmysql - A patch to allow POP3 authentication from a @strong{MySQL} +qpopmysql - A patch to allow POP3 authentication from a MySQL database. There's also a link to Paul Khavkine's patch for Procmail to -allow any MTA to deliver to users in a @strong{MySQL} database. +allow any MTA to deliver to users in a MySQL database. @item @uref{http://www.pbc.ottawa.on.ca} Visual Basic class generator for Active X. @@ -1893,18 +1893,18 @@ Plugin for REALbasic (for Macintosh) @item @uref{http://www.iis.ee.ethz.ch/~neeri/macintosh/gusi-qa.html} A library that emulates BSD sockets and pthreads on Macintosh. This can -be used if you want to compile the @strong{MySQL} client library on Mac. -It could probably even be sued to port @strong{MySQL} to Macintosh, but we +be used if you want to compile the MySQL client library on Mac. +It could probably even be sued to port MySQL to Macintosh, but we don't know of anyone that has tried that. @cindex SCMDB @item @uref{http://www.dedecker.net/jessie/scmdb/} -SCMDB - an add-on for SCM that ports the @strong{MySQL} C library to scheme +SCMDB - an add-on for SCM that ports the MySQL C library to scheme (SCM). With this library scheme developers can make connections to a -@strong{MySQL} database and use embedded SQL in their programs. +MySQL database and use embedded SQL in their programs. @end table -@subheading Other @strong{MySQL}-related Links +@subheading Other MySQL-related Links @table @asis @item @uref{http://www.satisoft.com/, SAT} @@ -1914,13 +1914,13 @@ applications in a (Microsoft -or- X) Windows Client / Unix Server environment. @item @uref{http://www.wix.com/mysql-hosting/} -Registry of Web providers who support @strong{MySQL}. +Registry of Web providers who support MySQL. @item @uref{http://www.softagency.co.jp/mysql/index.en.html} -Links about using @strong{MySQL} in Japan/Asia. +Links about using MySQL in Japan/Asia. @item @uref{http://abattoir.cc.ndsu.nodak.edu/~nem/mysql/udf/} -@strong{MySQL} UDF Registry. +MySQL UDF Registry. @item @uref{http://www.open.com.au/products.html} Commercial Web defect tracking system. @@ -1935,13 +1935,13 @@ Job and software tracking system. ExportSQL: A script to export data from Access95+. @item @uref{http://SAL.KachinaTech.COM/H/1/MYSQL.html} -SAL (Scientific Applications on Linux) @strong{MySQL} entry. +SAL (Scientific Applications on Linux) MySQL entry. @item @uref{http://www.infotech-nj.com/itech/index.shtml} -A consulting company which mentions @strong{MySQL} in the right company. +A consulting company which mentions MySQL in the right company. @item @uref{http://www.pmpcs.com/} -PMP Computer Solutions. Database developers using @strong{MySQL} and +PMP Computer Solutions. Database developers using MySQL and @code{mSQL}. @item @uref{http://www.aewa.org/} @@ -1984,22 +1984,22 @@ SQL Reference Page with a lot of interesting links. @c EMAIL: thuss@little6.com (Todd Huss) @item @uref{http://www.little6.com/about/linux/} Little6 Inc., An online contract and job finding site that is powered by -@strong{MySQL}, PHP3, and Linux. +MySQL, PHP3, and Linux. @c Added 990521 @c EMAIL: nh@delec.com (Hillbrecht Nicole) @item @uref{http://www.delec.com/is/products/prep/examples/BookShelf/index.html} DELECis - A tool that makes it very easy to create an automatically generated -table documentation. They have used @strong{MySQL} as an example. +table documentation. They have used MySQL as an example. @c Added 990521 @c EMAIL: info@worldrecords.com (Jim Rota) @item @uref{http://www.worldrecords.com} World Records - A search engine for information about music that uses -@strong{MySQL} and PHP. +MySQL and PHP. @item @uref{http://www.webtechniques.com/archives/1998/01/note/} -A Contact Database using @strong{MySQL} and PHP. +A Contact Database using MySQL and PHP. @item @uref{http://modems.rosenet.net/mysql/} Web based interface and Community Calendar with PHP. @@ -2030,18 +2030,18 @@ the quality of its results over time. Pluribus works by recording which pages a user prefers among those returned for a query. A user votes for a page by selecting it; Pluribus then uses that knowledge to improve the quality of the results when someone else submits the -same (or similar) query. Uses PHP and @strong{MySQL}. +same (or similar) query. Uses PHP and MySQL. @c EMAIL: paul@sword.damocles.com (Paul Bannister) @item @uref{http://www.stopbit.com/} -Stopbit - A technology news site using @strong{MySQL} and PHP. +Stopbit - A technology news site using MySQL and PHP. @item @uref{http://www.linuxsupportline.com/~kalendar/} KDE based calendar manager - The calendar manager has both single user -(file based) and multi-user (@strong{MySQL} database) support. +(file based) and multi-user (MySQL database) support. @item @uref{http://tim.desert.net/~tim/imger/} -Example of storing/retrieving images with @strong{MySQL} and CGI. +Example of storing/retrieving images with MySQL and CGI. @item @uref{http://www.penguinservices.com/scripts} Online shopping cart system. @@ -2050,11 +2050,11 @@ Online shopping cart system. @cindex Old Photo Album @item @uref{http://www.city-gallery.com/album/} Old Photo Album - The album is a collaborative popular history of photography -project that generates all pages from data stored in a @strong{MySQL} +project that generates all pages from data stored in a MySQL database. Pages are dynamically generated through a php3 interface to the database content. Users contribute images and descriptions. Contributed images are stored on the web server to avoid storing them in the database -as BLOBs. All other information is stored on the shared @strong{MySQL} server. +as BLOBs. All other information is stored on the shared MySQL server. @end table @subheading General Database Links @@ -2091,9 +2091,9 @@ B-Trees: Balanced Tree Data Structures. A lecture about B-Trees. @end table -There are also many Web pages that use @strong{MySQL}. @xref{Users}. +There are also many Web pages that use MySQL. @xref{Users}. Send any additions to this list to @email{webmaster@@mysql.com}. We now -require that you show a @strong{MySQL} logo somewhere if you wish your +require that you show a MySQL logo somewhere if you wish your site to be added. It is okay to have it on a ``used tools'' page or something similar. @@ -2105,13 +2105,13 @@ something similar. @cindex MySQL mailing lists @menu -* Mailing-list:: The @strong{MySQL} mailing lists +* Mailing-list:: The MySQL mailing lists * Asking questions:: Asking questions or reporting bugs * Bug reports:: How to report bugs or problems * Answering questions:: Guidelines for answering questions on the mailing list @end menu -This section introduces you to the @strong{MySQL} mailing lists, and gives +This section introduces you to the MySQL mailing lists, and gives some guidelines as to how to use them. @@ -2121,10 +2121,10 @@ some guidelines as to how to use them. @cindex mailing lists @cindex email lists -To subscribe to the main @strong{MySQL} mailing list, send a message to the +To subscribe to the main MySQL mailing list, send a message to the electronic mail address @email{mysql-subscribe@@lists.mysql.com}. -To unsubscribe from the main @strong{MySQL} mailing list, send a message to +To unsubscribe from the main MySQL mailing list, send a message to the electronic mail address @email{mysql-unsubscribe@@lists.mysql.com}. Only the address to which you send your messages is significant. The @@ -2154,23 +2154,23 @@ Your local site may have many subscribers to @email{mysql@@lists.mysql.com}. If so, it may have a local mailing list, so that messages sent from @code{lists.mysql.com} to your site are propagated to the local list. In such cases, please contact your system administrator to be added to or dropped -from the local @strong{MySQL} list. +from the local MySQL list. If you wish to have traffic for a mailing list go to a separate mailbox in your mail program, set up a filter based on the message headers. You can use either the @code{List-ID:} or @code{Delivered-To:} headers to identify list messages. -The following @strong{MySQL} mailing lists exist: +The following MySQL mailing lists exist: @table @code @item @email{announce-subscribe@@lists.mysql.com} announce -This is for announcement of new versions of @strong{MySQL} and related -programs. This is a low volume list all @strong{MySQL} users should +This is for announcement of new versions of MySQL and related +programs. This is a low volume list all MySQL users should subscribe to. @item @email{mysql-subscribe@@lists.mysql.com} mysql -The main list for general @strong{MySQL} discussion. Please note that some +The main list for general MySQL discussion. Please note that some topics are better discussed on the more-specialized lists. If you post to the wrong list, you may not get an answer! @@ -2181,51 +2181,51 @@ messages, sent as one large mail message once a day. @item @email{bugs-subscribe@@lists.mysql.com} bugs On this list you should only post a full, repeatable bug report using the @code{mysqlbug} script (if you are running on Windows, you should -include a description of the operating system and the @strong{MySQL} version). +include a description of the operating system and the MySQL version). Preferably, you should test the problem using the latest stable or development -version of @strong{MySQL} before posting! Anyone should be able to repeat the +version of MySQL before posting! Anyone should be able to repeat the bug by just using @code{mysql test < script} on the included test case. All bugs posted on this list will be corrected or documented in the next -@strong{MySQL} release! If there are only small code changes involved, we +MySQL release! If there are only small code changes involved, we will also post a patch that fixes the problem. @item @email{bugs-digest-subscribe@@lists.mysql.com} bugs-digest The @code{bugs} list in digest form. @item @email{internals-subscribe@@lists.mysql.com} internals -A list for people who work on the @strong{MySQL} code. On this list one -can also discuss @strong{MySQL} development and post patches. +A list for people who work on the MySQL code. On this list one +can also discuss MySQL development and post patches. @item @email{internals-digest-subscribe@@lists.mysql.com} internals-digest A digest version of the @code{internals} list. @item @email{java-subscribe@@lists.mysql.com} java -Discussion about @strong{MySQL} and Java. Mostly about the JDBC drivers. +Discussion about MySQL and Java. Mostly about the JDBC drivers. @item @email{java-digest-subscribe@@lists.mysql.com} java-digest A digest version of the @code{java} list. @item @email{win32-subscribe@@lists.mysql.com} win32 -All things concerning @strong{MySQL} on Microsoft operating systems such as +All things concerning MySQL on Microsoft operating systems such as Win95, Win98, NT, and Win2000. @item @email{win32-digest-subscribe@@lists.mysql.com} win32-digest A digest version of the @code{win32} list. @item @email{myodbc-subscribe@@lists.mysql.com} myodbc -All things about connecting to @strong{MySQL} with ODBC. +All things about connecting to MySQL with ODBC. @item @email{myodbc-digest-subscribe@@lists.mysql.com} myodbc-digest A digest version of the @code{myodbc} list. @item @email{plusplus-subscribe@@lists.mysql.com} plusplus -All things concerning programming with the C++ API to @strong{MySQL}. +All things concerning programming with the C++ API to MySQL. @item @email{plusplus-digest-subscribe@@lists.mysql.com} plusplus-digest A digest version of the @code{plusplus} list. @item @email{msql-mysql-modules-subscribe@@lists.mysql.com} msql-mysql-modules -A list about the Perl support in @strong{MySQL}. msql-mysql-modules +A list about the Perl support in MySQL. msql-mysql-modules @item @email{msql-mysql-modules-digest-subscribe@@lists.mysql.com} msql-mysql-modules-digest A digest version of the @code{msql-mysql-modules} list. @@ -2239,11 +2239,11 @@ unsubscribe from the @code{myodbc} list, send a message to @email{myodbc-unsubscribe@@lists.mysql.com}. If you can't get an answer for your questions from the mailing list, one -option is to pay for support from @strong{MySQL AB}, which will put you -in direct contact with @strong{MySQL} developers. @xref{Support}. +option is to pay for support from MySQL AB, which will put you +in direct contact with MySQL developers. @xref{Support}. -The following table shows some @strong{MySQL} mailing in other languages than -English. Note that these are not operated by @strong{MySQL AB}, so we can't +The following table shows some MySQL mailing in other languages than +English. Note that these are not operated by MySQL AB, so we can't guarantee the quality on these. @table @code @@ -2272,7 +2272,7 @@ Before posting a bug report or question, please do the following: @itemize @bullet @item -Start by searching the @strong{MySQL} online manual at: +Start by searching the MySQL online manual at: @* @uref{http://www.mysql.com/documentation/manual.php} @* @@ -2280,7 +2280,7 @@ We try to keep the manual up to date by updating it frequently with solutions to newly found problems! @item -Search the @strong{MySQL} mailing list archives: +Search the MySQL mailing list archives: @* @uref{http://www.mysql.com/documentation/} @* @@ -2291,7 +2291,7 @@ Web pages (including the manual) that are located at @end itemize If you can't find an answer in the manual or the archives, check with your -local @strong{MySQL} expert. If you still can't find an answer to your +local MySQL expert. If you still can't find an answer to your question, go ahead and read the next section about how to send mail to @email{mysql@@lists.mysql.com}. @@ -2317,7 +2317,7 @@ or at all. We encourage everyone to use the @code{mysqlbug} script to generate a bug report (or a report about any problem), if possible. @code{mysqlbug} can be found in the @file{scripts} directory in the source distribution, or, for a -binary distribution, in the @file{bin} directory under your @strong{MySQL} +binary distribution, in the @file{bin} directory under your MySQL installation directory. If you are unable to use @code{mysqlbug}, you should still include all the necessary information listed in this section. @@ -2334,13 +2334,13 @@ demonstrates the bug, you should post it to the @email{bugs@@lists.mysql.com} list. Note that on this list you should only post a full, repeatable bug report using the @code{mysqlbug} script. If you are running on Windows, you should include a description of the operating system and the -@strong{MySQL} version. Preferably, you should test the problem using -the latest stable or development version of @strong{MySQL} before +MySQL version. Preferably, you should test the problem using +the latest stable or development version of MySQL before posting! Anyone should be able to repeat the bug by just using ``@code{mysql test < script}'' on the included test case or run the shell or perl script that is included in the bug report. All bugs posted on the @code{bugs} list will be corrected or documented in the next -@strong{MySQL} release! If there are only small code changes involved +MySQL release! If there are only small code changes involved to correct this problem, we will also post a patch that fixes the problem. @@ -2354,20 +2354,20 @@ and wait for the answer because you didn't include enough information the first time. The most common errors are that people don't indicate the version number of -the @strong{MySQL} distribution they are using, or don't indicate what -platform they have @strong{MySQL} installed on (including the platform +the MySQL distribution they are using, or don't indicate what +platform they have MySQL installed on (including the platform version number). This is highly relevant information, and in 99 cases out of 100 the bug report is useless without it! Very often we get questions like, ``Why doesn't this work for me?'' then we find that the feature -requested wasn't implemented in that @strong{MySQL} version, or that a bug -described in a report has been fixed already in newer @strong{MySQL} +requested wasn't implemented in that MySQL version, or that a bug +described in a report has been fixed already in newer MySQL versions. Sometimes the error is platform dependent; in such cases, it is next to impossible to fix anything without knowing the operating system and the version number of the platform. Remember also to provide information about your compiler, if it is related to the problem. Often people find bugs in compilers and think the problem is -@strong{MySQL}-related. Most compilers are under development all the time and +MySQL-related. Most compilers are under development all the time and become better version by version. To determine whether or not your problem depends on your compiler, we need to know what compiler is used. Note that every compiling problem should be regarded as a bug report and @@ -2402,10 +2402,10 @@ Please include the following information in your report: @itemize @bullet @item -The version number of the @strong{MySQL} distribution you are using (for -example, @strong{MySQL} Version 3.22.22). You can find out which version you +The version number of the MySQL distribution you are using (for +example, MySQL Version 3.22.22). You can find out which version you are running by executing @code{mysqladmin version}. @code{mysqladmin} can be -found in the @file{bin} directory under your @strong{MySQL} installation +found in the @file{bin} directory under your MySQL installation directory. @item @@ -2420,7 +2420,7 @@ Sometimes the amount of memory (real and virtual) is relevant. If in doubt, include these values. @item -If you are using a source distribution of @strong{MySQL}, the name and +If you are using a source distribution of MySQL, the name and version number of the compiler used is needed. If you have a binary distribution, the distribution name is needed. @@ -2489,7 +2489,7 @@ archive to @uref{ftp://support.mysql.com/pub/mysql/secret/}. Then send a short description of the problem to @email{bugs@@lists.mysql.com}. @item -If you think that @strong{MySQL} produces a strange result from a query, +If you think that MySQL produces a strange result from a query, include not only the result, but also your opinion of what the result should be, and an account describing the basis for your opinion. @@ -2508,7 +2508,7 @@ an example using other names, but please regard this as the last choice. @item Include all the options given to the relevant programs, if possible. For example, indicate the options that you use when you start the @code{mysqld} -daemon and that you use to run any @strong{MySQL} client programs. The +daemon and that you use to run any MySQL client programs. The options to programs like @code{mysqld} and @code{mysql}, and to the @code{configure} script, are often keys to answers and are very relevant! It is never a bad idea to include them anyway! If you use any modules, such @@ -2521,7 +2521,7 @@ the error messages you get when trying to connect! When you test your privileges, you should first run @code{mysqlaccess}. After this, execute @code{mysqladmin reload version} and try to connect with the program that gives you trouble. @code{mysqlaccess} can be found in the @file{bin} -directory under your @strong{MySQL} installation directory. +directory under your MySQL installation directory. @item If you have a patch for a bug, that is good, but don't assume the patch is @@ -2537,7 +2537,7 @@ where the patch won't work, it may be useless. @item Guesses about what the bug is, why it occurs, or what it depends on, -are usually wrong. Even the @strong{MySQL} team can't guess such things +are usually wrong. Even the MySQL team can't guess such things without first using a debugger to determine the real cause of a bug. @item @@ -2548,17 +2548,17 @@ problem yourself. @item If you get a @code{parse error}, please check your syntax closely! If you can't find something wrong with it, it's extremely likely that your -current version of @strong{MySQL} doesn't support the query you are +current version of MySQL doesn't support the query you are using. If you are using the current version and the manual at @uref{http://www.mysql.com/documentation/manual.php} doesn't cover the -syntax you are using, @strong{MySQL} doesn't support your query. In this +syntax you are using, MySQL doesn't support your query. In this case, your only options are to implement the syntax yourself or e-mail @email{mysql-licensing@@mysql.com} and ask for an offer to implement it! If the manual covers the syntax you are using, but you have an older version -of @strong{MySQL}, you should check the @strong{MySQL} change history to see +of MySQL, you should check the MySQL change history to see when the syntax was implemented. In this case, you have the option of -upgrading to a newer version of @strong{MySQL}. @xref{News}. +upgrading to a newer version of MySQL. @xref{News}. @item If you have a problem such that your data appears corrupt or you get @@ -2577,11 +2577,11 @@ it's much easier for us to provide you with a fix for the problem! @xref{What is crashing}. @item -If possible, download and install the most recent version of @strong{MySQL} +If possible, download and install the most recent version of MySQL and check whether or not it solves your problem. All versions of -@strong{MySQL} are thoroughly tested and should work without problems! We +MySQL are thoroughly tested and should work without problems! We believe in making everything as backward compatible as possible, and you -should be able to switch @strong{MySQL} versions in minutes! +should be able to switch MySQL versions in minutes! @xref{Which version}. @end itemize @@ -2632,19 +2632,19 @@ Many users don't read mail with a browser! @cindex support terms @menu -* Licensing policy:: @strong{MySQL} licensing policy -* Copyright:: Copyrights used by @strong{MySQL} +* Licensing policy:: MySQL licensing policy +* Copyright:: Copyrights used by MySQL * Licensing examples:: Example licensing situations -* Cost:: @strong{MySQL} licensing and support costs +* Cost:: MySQL licensing and support costs * Support:: Types of commercial support @end menu -This section describes @strong{MySQL} support and licensing +This section describes MySQL support and licensing arrangements: @itemize @bullet -@item The copyrights under which @strong{MySQL} is distributed +@item The copyrights under which MySQL is distributed (@pxref{Copyright}) @item Sample situations illustrating when a license is required @@ -2668,13 +2668,13 @@ arrangements: The formal terms of the GPL license can be found at @ref{GPL license}. Basically, our licensing policy and interpretation of the GPL is as follows: -Note that older versions of @strong{MySQL} are still using a more +Note that older versions of MySQL are still using a more @uref{http://www.mysql.com/support/arrangements/mypl.html, strict license}. See the documentation for that version for more information. If you need a -commercial @strong{MySQL} license, because the GPL license doesn't suit your +commercial MySQL license, because the GPL license doesn't suit your application, you can buy one at @uref{https://order.mysql.com/}. -For normal internal use, @strong{MySQL} costs nothing. You do not have +For normal internal use, MySQL costs nothing. You do not have to pay us if you do not want to. A license is required if: @@ -2682,22 +2682,22 @@ A license is required if: @itemize @minus @item You link a program, that is not free software, with code from the -@strong{MySQL} server or clients that has the GPL copyright. This -happens for example when you use @strong{MySQL} as an embedded server +MySQL server or clients that has the GPL copyright. This +happens for example when you use MySQL as an embedded server in your applications or when you add not free extensions to the -@strong{MySQL} server. In this case your application/code would also +MySQL server. In this case your application/code would also become GPL through the GPL license that acts as a virus. By licensing -@strong{MySQL} server from @strong{MySQL AB} under a commercial +MySQL server from MySQL AB under a commercial license you will avoid this problem. See @uref{http://www.gnu.org/copyleft/gpl-faq.html}. @item -You have a commercial application that ONLY works with @strong{MySQL} -and ships the application with the @strong{MySQL} server. This is +You have a commercial application that ONLY works with MySQL +and ships the application with the MySQL server. This is because we view this as linking even if it is done over the network. @item -You have a distribution of @strong{MySQL} and you don't provide the -source code for your copy of the @strong{MySQL} server, as defined in +You have a distribution of MySQL and you don't provide the +source code for your copy of the MySQL server, as defined in the GPL license. @end itemize @@ -2707,39 +2707,39 @@ A license is @strong{NOT} required if: @item You do not need a license to include the client code in commercial -programs. The client part of @strong{MySQL} licensed with the +programs. The client part of MySQL licensed with the LGPL @code{GNU Library General Public License}. The @code{mysql} command-line client includes code from the @code{readline} library that is under the @code{GPL}. @item -If your use of @strong{MySQL} does not require a license, but you -like @strong{MySQL} and want to encourage further development, you are -certainly welcome to purchase a license or @strong{MySQL} support anyway. +If your use of MySQL does not require a license, but you +like MySQL and want to encourage further development, you are +certainly welcome to purchase a license or MySQL support anyway. @item -If you use @strong{MySQL} in a commercial context such that you profit by -its use, we ask that you further the development of @strong{MySQL} by -purchasing some level of support. We feel that if @strong{MySQL} helps -your business, it is reasonable to ask that you help @strong{MySQL}. +If you use MySQL in a commercial context such that you profit by +its use, we ask that you further the development of MySQL by +purchasing some level of support. We feel that if MySQL helps +your business, it is reasonable to ask that you help MySQL. (Otherwise, if you ask us support questions, you are not only using for free something into which we've put a lot a work, you're asking us to provide free support, too.) @end itemize -For circumstances under which a @strong{MySQL} license is required, you +For circumstances under which a MySQL license is required, you need a license per machine that runs the @code{mysqld} server. However, a multiple-CPU machine counts as a single machine, and there is no -restriction on the number of @strong{MySQL} servers that run on one +restriction on the number of MySQL servers that run on one machine, or on the number of clients concurrently connected to a server running on that machine! If you have any questions as to whether or not a license is required for -your particular use of @strong{MySQL}, please read this again and then +your particular use of MySQL, please read this again and then contact us. @xref{Contact information}. -If you require a @strong{MySQL} license, the easiest way to pay for it -is to use the license form on @strong{MySQL}'s secure server at +If you require a MySQL license, the easiest way to pay for it +is to use the license form on MySQL's secure server at @uref{https://order.mysql.com/}. Other forms of payment are discussed in @ref{Payment information}. @@ -2753,11 +2753,11 @@ discussed in @ref{Payment information}. * Copyright changes:: Possible future copyright changes @end menu -There are several different copyrights on the @strong{MySQL} distribution: +There are several different copyrights on the MySQL distribution: @enumerate @item -The @strong{MySQL}-specific source needed to build the +The MySQL-specific source needed to build the @code{mysqlclient} library is licensed under the @code{LGPL} and programs in the @file{client} directory is GPL. Each file has a header that shows which copyright is used for that file. @@ -2776,17 +2776,17 @@ This is also available as the file @file{COPYING} in the distributions. @end enumerate One goal is that the SQL client library should be free enough that it is -possible to add @strong{MySQL} support into commercial products +possible to add MySQL support into commercial products without a license. For this reason, we chose the LGPL license for the client code. @cindex licensing, free @cindex free licensing -This means that you can use @strong{MySQL} for free with any program that uses -any of the free software licenses. @strong{MySQL} is also free for any end +This means that you can use MySQL for free with any program that uses +any of the free software licenses. MySQL is also free for any end user for his own or company usage. -However, if you use @strong{MySQL} for something important to you, you may +However, if you use MySQL for something important to you, you may want to help secure its development by purchasing licenses or a support contract. @xref{Support}. @@ -2794,7 +2794,7 @@ contract. @xref{Support}. @node Copyright changes, , Copyright, Copyright @subsubsection Copyright Changes -Version 3.22 of @strong{MySQL} is still using a more strict license. +Version 3.22 of MySQL is still using a more strict license. See the documentation for that version for more information. @@ -2802,9 +2802,9 @@ See the documentation for that version for more information. @subsection Example Licensing Situations @menu -* Products that use MySQL:: Selling products that use @strong{MySQL} -* ISP:: ISP @strong{MySQL} services -* Web server:: Running a web server using @strong{MySQL}. +* Products that use MySQL:: Selling products that use MySQL +* ISP:: ISP MySQL services +* Web server:: Running a web server using MySQL. @end menu @cindex licensing, examples @@ -2812,10 +2812,10 @@ See the documentation for that version for more information. @cindex products, selling This section describes some situations illustrating whether or not you -must license the @strong{MySQL} server. Generally these examples -involve providing @strong{MySQL} as an integral part of a product. +must license the MySQL server. Generally these examples +involve providing MySQL as an integral part of a product. -Note that a single @strong{MySQL} license covers any number of CPUs and +Note that a single MySQL license covers any number of CPUs and @code{mysqld} servers on a machine! There is no artificial limit on the number of clients that connect to the server in any way. @@ -2823,41 +2823,41 @@ number of clients that connect to the server in any way. @node Products that use MySQL, ISP, Licensing examples, Licensing examples @subsubsection Selling Products that use MySQL -To determine whether or not you need a @strong{MySQL} license when +To determine whether or not you need a MySQL license when selling your application, you should ask whether the proper functioning -of your application is dependent on the use of @strong{MySQL} and -whether you include the @strong{MySQL} server with your product. There +of your application is dependent on the use of MySQL and +whether you include the MySQL server with your product. There are several cases to consider: @itemize @bullet @item -Does your application require @strong{MySQL} to function properly? +Does your application require MySQL to function properly? @item -If your product requires @strong{MySQL}, you need a license for any +If your product requires MySQL, you need a license for any machine that runs the @code{mysqld} server. For example, if you've -designed your application around @strong{MySQL}, then you've really made +designed your application around MySQL, then you've really made a commercial product that requires the engine, so you need a license. @item -If your application does not require @strong{MySQL}, you do not need to obtain -a license. For example, if using @strong{MySQL} just adds some new optional +If your application does not require MySQL, you do not need to obtain +a license. For example, if using MySQL just adds some new optional features to your product (such as adding logging to a database if -@strong{MySQL} is used rather than logging to a text file), it should +MySQL is used rather than logging to a text file), it should fall within normal use, and a license would not be required. @item In other words, you need a license if you sell a product designed -specifically for use with @strong{MySQL} or that requires the -@strong{MySQL} server to function at all. This is true whether or not -you provide @strong{MySQL} for your client as part of your product +specifically for use with MySQL or that requires the +MySQL server to function at all. This is true whether or not +you provide MySQL for your client as part of your product distribution. @item It also depends on what you're doing for the client. Do you plan to provide your client with detailed instructions on installing -@strong{MySQL} with your software? Then your product may be contingent -on the use of @strong{MySQL}; if so, you need to buy a license. If you +MySQL with your software? Then your product may be contingent +on the use of MySQL; if so, you need to buy a license. If you are simply tying into a database that you expect already to have been installed by the time your software is purchased, then you probably don't need a license. @@ -2873,22 +2873,22 @@ don't need a license. @cindex services, web @cindex Internet Service Providers -Internet Service Providers (ISPs) often host @strong{MySQL} servers for +Internet Service Providers (ISPs) often host MySQL servers for their customers. With the GPL license this does not require a license. On the other hand, we do encourage people to use ISPs that have -@strong{MySQL} support, as this will give them the confidence that if -they have some problem with their @strong{MySQL} installation, their ISP +MySQL support, as this will give them the confidence that if +they have some problem with their MySQL installation, their ISP will be able to solve the problem for them (in some cases with the help -from the @strong{MySQL} development team). +from the MySQL development team). All ISPs that want to keep themselves up-to-date should subscribe to our @code{announce} mailing list so that they can be aware of fatal issues -that may be relevant for their @strong{MySQL} installations. +that may be relevant for their MySQL installations. -Note that if the ISP doesn't have a license for @strong{MySQL}, +Note that if the ISP doesn't have a license for MySQL, it should give its customers at least read access to the source of -the @strong{MySQL} installation so that its customer can verify that +the MySQL installation so that its customer can verify that it is patched correctly. @@ -2898,13 +2898,13 @@ it is patched correctly. @cindex web server, running @cindex running, a web server -If you use @strong{MySQL} in conjunction with a Web server on Unix, you +If you use MySQL in conjunction with a Web server on Unix, you don't have to pay for a license. This is true even if you run a commercial Web server that uses -@strong{MySQL}, because you are not selling an embedded @strong{MySQL} +MySQL, because you are not selling an embedded MySQL version yourself. However, in this case we would like you to purchase -@strong{MySQL} support, because @strong{MySQL} is helping your enterprise. +MySQL support, because MySQL is helping your enterprise. @node Cost, Support, Licensing examples, Licensing and Support @@ -2944,8 +2944,8 @@ For OEM purchases, you must act as the middle-man for eventual problems or extension requests from your users. We also require that OEM customers have at least an extended e-mail support contract. Note that OEM licenses only apply for products where the user doesn't have direct -access to the @strong{MySQL} server (embedded system). In other words, -the @strong{MySQL} server should only be used with the application +access to the MySQL server (embedded system). In other words, +the MySQL server should only be used with the application that was supplied you. If you have a low-margin, high-volume product, you can always talk to us @@ -3050,18 +3050,18 @@ with your company information and ask us to bill you. @cindex employment with MySQL @cindex jobs at MySQL -For commercial licensing, please contact the @strong{MySQL} licensing +For commercial licensing, please contact the MySQL licensing team. The much preferred method is by e-mail to @email{licensing@@mysql.com}. Fax is also possible but handling of these may take much longer (Fax +46-8-729 69 05). If you represent a business that is interested in partnering with -@strong{MySQL}, please send e-mail to @email{partner@@mysql.com}. +MySQL, please send e-mail to @email{partner@@mysql.com}. -For timely, precise answers to technical questions about @strong{MySQL} +For timely, precise answers to technical questions about MySQL you should @uref{https://order.mysql.com/, order} one of our @uref{http://www.mysql.com/support/arrangements/types.html, support contracts}. -@strong{MySQL} support is provided by the @strong{MySQL} developers so the +MySQL support is provided by the MySQL developers so the standard is extremely high. If you are interested in placing a banner advertisement on our Web site, @@ -3128,21 +3128,21 @@ if you have login support (2000 EURO), you can expect us to work up to @cindex technical support, by email Basic e-mail support is a very inexpensive support option and should be -thought of more as a way to support our development of @strong{MySQL} -than as a real support option. We at @strong{MySQL} do give a lot of free -support in all the different @strong{MySQL} lists, and the money we get from +thought of more as a way to support our development of MySQL +than as a real support option. We at MySQL do give a lot of free +support in all the different MySQL lists, and the money we get from basic e-mail support is largely used to make this possible. -At this support level, the @strong{MySQL} mailing lists are the preferred +At this support level, the MySQL mailing lists are the preferred means of communication. Questions normally should be mailed to the primary mailing list (@email{mysql@@lists.mysql.com}) or one of the other regular lists (for example, @email{win32@@lists.mysql.com} for Windows-related -@strong{MySQL} questions), as someone else already may have experienced and +MySQL questions), as someone else already may have experienced and solved the problem you have. @xref{Asking questions}. However, by purchasing basic e-mail support, you also have access to the support address @email{mysql-support@@mysql.com}, which is not available -as part of the minimal support that you get by purchasing a @strong{MySQL} +as part of the minimal support that you get by purchasing a MySQL license. This means that for especially critical questions, you can cross-post your message to @email{mysql-support@@mysql.com}. (If the message contains sensitive data, you should post only to @@ -3170,23 +3170,23 @@ that we can solve any problem, but at least you will receive an answer if we can contact you by e-mail. @item -We will help with unexpected problems when you install @strong{MySQL} from a +We will help with unexpected problems when you install MySQL from a binary distribution on supported platforms. This level of support does not -cover installing @strong{MySQL} from a source distribution. Supported -platforms are those for which @strong{MySQL} is known to work. +cover installing MySQL from a source distribution. Supported +platforms are those for which MySQL is known to work. @xref{Which OS}. @item We will help you with bugs and missing features. Any bugs that are found are -fixed for the next @strong{MySQL} release. If the bug is critical for +fixed for the next MySQL release. If the bug is critical for you, we will mail you a patch for it as soon the bug is fixed. Critical bugs always have the highest priority for us, and we ensure that they are fixed as soon as possible. @item -Your suggestions for the further development of @strong{MySQL} will be +Your suggestions for the further development of MySQL will be taken into consideration. By taking email support you have already -helped the further development of @strong{MySQL}. If you want to have +helped the further development of MySQL. If you want to have more input, upgrade to a higher level of support. @item @@ -3209,11 +3209,11 @@ Your e-mail will be dealt with before mail from basic e-mail support users and non-registered users. @item -Your suggestions for the further development of @strong{MySQL} will +Your suggestions for the further development of MySQL will receive strong consideration. Simple extensions that suit the basic -goals of @strong{MySQL} are implemented in a matter of days. By taking +goals of MySQL are implemented in a matter of days. By taking extended e-mail support you have already helped the further development -of @strong{MySQL}. +of MySQL. @item Typical situations that are covered by extended e-mail support are: @@ -3221,11 +3221,11 @@ Typical situations that are covered by extended e-mail support are: @itemize @minus @item We will answer and (within reason) solve questions that relate to possible -bugs in @strong{MySQL}. As soon as the bug is found and corrected, we +bugs in MySQL. As soon as the bug is found and corrected, we will mail a patch for it. @item -We will help with unexpected problems when you install @strong{MySQL} from a +We will help with unexpected problems when you install MySQL from a source or binary distribution on supported platforms. @item @@ -3237,7 +3237,7 @@ We will provide hints on optimizing @code{mysqld} for your situation. @end itemize @item -You are allowed to influence the priority of items on the @strong{MySQL} +You are allowed to influence the priority of items on the MySQL TODO List. @xref{TODO}. This will ensure that the features you really need will be implemented sooner than they might be otherwise. @end itemize @@ -3257,10 +3257,10 @@ Your e-mail will be dealt with even before e-mail from extended e-mail support users. @item -Your suggestions for the further development of @strong{MySQL} will +Your suggestions for the further development of MySQL will be taken into very high consideration. Realistic extensions that can be implemented in a couple of hours and that suit the basic goals of -@strong{MySQL} will be implemented as soon as possible. +MySQL will be implemented as soon as possible. @item If you have a very specific problem, we can try to log in on your system @@ -3269,7 +3269,7 @@ to solve the problem ``in place.'' @item Like any database vendor, we can't guarantee that we can rescue any data from crashed tables, but if the worst happens, we will help you rescue as much as -possible. @strong{MySQL} has proven itself very reliable, but anything is +possible. MySQL has proven itself very reliable, but anything is possible due to circumstances beyond our control (for example, if your system crashes or someone kills the server by executing a @code{kill -9} command). @@ -3277,8 +3277,8 @@ crashes or someone kills the server by executing a @code{kill -9} command). We will provide hints on optimizing your system and your queries. @item -You are allowed to call a @strong{MySQL} developer (in moderation) and -discuss your @strong{MySQL}-related problems. This option is however +You are allowed to call a MySQL developer (in moderation) and +discuss your MySQL-related problems. This option is however only to be used as a last result during an emergency after we have failed to grasp the total problem with email. To make efficient use of our time we need to first get all facts about the problem, @@ -3299,7 +3299,7 @@ Your e-mail has the highest possible priority. @item We will actively examine your system and help you optimize it and your -queries. We may also optimize and/or extend @strong{MySQL} to better +queries. We may also optimize and/or extend MySQL to better suit your needs. @item @@ -3309,14 +3309,14 @@ mysql> select MY_FUNC(col1,col2) from table; @end example @item -We will provide a binary distribution of all important @strong{MySQL} +We will provide a binary distribution of all important MySQL releases for your system, as long as we can get an account on a similar system. In the worst case, we may require access to your system to be able to create a binary distribution. @item If you can provide accommodations and pay for traveler fares, you can -even get a @strong{MySQL} developer to visit you and offer you help with +even get a MySQL developer to visit you and offer you help with your troubles. Extended login support entitles you to one personal encounter per year, but we are always very flexible towards our customers! If the visit takes 16 hours or more, the first 8 hours is @@ -3337,7 +3337,7 @@ We will provide you with a dynamic web page showing the current list of @code{MySQL} developers that you can phone when you have a critical problem. @item -For non critical problem, you can request a @strong{MySQL} developer to +For non critical problem, you can request a MySQL developer to phone back within 48 hours to discuss @code{MySQL} related issues. @end itemize @@ -3372,31 +3372,31 @@ to help you get the problem solved. @cindex ANSI SQL92, extensions to @menu -* Extensions to ANSI:: @strong{MySQL} extensions to ANSI SQL92 -* Differences from ANSI:: @strong{MySQL} differences compared to ANSI SQL92 -* ANSI mode:: Running @strong{MySQL} in ANSI mode -* Missing functions:: Functionality missing from @strong{MySQL} -* Standards:: What standards does @strong{MySQL} follow? +* Extensions to ANSI:: MySQL extensions to ANSI SQL92 +* Differences from ANSI:: MySQL differences compared to ANSI SQL92 +* ANSI mode:: Running MySQL in ANSI mode +* Missing functions:: Functionality missing from MySQL +* Standards:: What standards does MySQL follow? * Commit-rollback:: How to cope without @code{COMMIT}-@code{ROLLBACK} * Bugs:: @end menu -This section describes how @strong{MySQL} relates to the ANSI SQL standards. -@strong{MySQL} has many extensions to the ANSI SQL standards, and here you +This section describes how MySQL relates to the ANSI SQL standards. +MySQL has many extensions to the ANSI SQL standards, and here you will find out what they are, and how to use them. You will also find -information about functionality missing from @strong{MySQL}, and how to work +information about functionality missing from MySQL, and how to work around some differences. @node Extensions to ANSI, Differences from ANSI, Compatibility, Compatibility @subsection MySQL Extensions to ANSI SQL92 -@strong{MySQL} includes some extensions that you probably will not find in +MySQL includes some extensions that you probably will not find in other SQL databases. Be warned that if you use them, your code will not be portable to other SQL servers. In some cases, you can write code that -includes @strong{MySQL} extensions, but is still portable, by using comments -of the form @code{/*! ... */}. In this case, @strong{MySQL} will parse and -execute the code within the comment as it would any other @strong{MySQL} +includes MySQL extensions, but is still portable, by using comments +of the form @code{/*! ... */}. In this case, MySQL will parse and +execute the code within the comment as it would any other MySQL statement, but other SQL servers will ignore the extensions. For example: @example @@ -3404,17 +3404,17 @@ SELECT /*! STRAIGHT_JOIN */ col_name FROM table1,table2 WHERE ... @end example If you add a version number after the @code{'!'}, the syntax will only be -executed if the @strong{MySQL} version is equal to or newer than the used +executed if the MySQL version is equal to or newer than the used version number: @example CREATE /*!32302 TEMPORARY */ TABLE (a int); @end example -The above means that if you have Version 3.23.02 or newer, then @strong{MySQL} +The above means that if you have Version 3.23.02 or newer, then MySQL will use the @code{TEMPORARY} keyword. -@strong{MySQL} extensions are listed below: +MySQL extensions are listed below: @itemize @bullet @item @@ -3431,10 +3431,10 @@ ordering determined by the current character set (ISO-8859-1 Latin1 by default). If you don't like this, you should declare your columns with the @code{BINARY} attribute or use the @code{BINARY} cast, which causes comparisons to be done according to the ASCII order used on the -@strong{MySQL} server host. +MySQL server host. @item -@strong{MySQL} maps each database to a directory under the @strong{MySQL} +MySQL maps each database to a directory under the MySQL data directory, and tables within a database to filenames in the database directory. @@ -3448,7 +3448,7 @@ This has a few implications: @itemize @minus @item -Database names and table names are case sensitive in @strong{MySQL} on +Database names and table names are case sensitive in MySQL on operating systems that have case-sensitive filenames (like most Unix systems). @xref{Name case sensitivity}. @@ -3466,7 +3466,7 @@ and @file{.frm} files to which the table corresponds. In SQL statements, you can access tables from different databases with the @code{db_name.tbl_name} syntax. Some SQL servers provide the same functionality but call this @code{User space}. -@strong{MySQL} doesn't support tablespaces as in: +MySQL doesn't support tablespaces as in: @code{create table ralph.my_table...IN my_tablespace}. @item @@ -3556,18 +3556,18 @@ One can specify @code{ASC} and @code{DESC} with @code{GROUP BY}. @item To make it easier for users who come from other SQL environments, -@strong{MySQL} supports aliases for many functions. For example, all +MySQL supports aliases for many functions. For example, all string functions support both ANSI SQL syntax and ODBC syntax. @item -@strong{MySQL} understands the @code{||} and @code{&&} operators to mean -logical OR and AND, as in the C programming language. In @strong{MySQL}, +MySQL understands the @code{||} and @code{&&} operators to mean +logical OR and AND, as in the C programming language. In MySQL, @code{||} and @code{OR} are synonyms, as are @code{&&} and @code{AND}. -Because of this nice syntax, @strong{MySQL} doesn't support +Because of this nice syntax, MySQL doesn't support the ANSI SQL @code{||} operator for string concatenation; use @code{CONCAT()} instead. Because @code{CONCAT()} takes any number of arguments, it's easy to convert use of the @code{||} operator to -@strong{MySQL}. +MySQL. @item @code{CREATE DATABASE} or @code{DROP DATABASE}. @@ -3600,7 +3600,7 @@ operators. @item @code{CONCAT()} or @code{CHAR()} with one argument or more than two -arguments. (In @strong{MySQL}, these functions can take any number of +arguments. (In MySQL, these functions can take any number of arguments.) @item The @code{BIT_COUNT()}, @code{CASE}, @code{ELT()}, @@ -3637,8 +3637,8 @@ SELECT @@t1:=(@@t2:=1)+@@t3:=4,@@t1,@@t2,@@t3; @node Differences from ANSI, ANSI mode, Extensions to ANSI, Compatibility @subsection MySQL Differences Compared to ANSI SQL92 -We try to make @strong{MySQL} follow the ANSI SQL standard and the -ODBC SQL standard, but in some cases @strong{MySQL} does some things +We try to make MySQL follow the ANSI SQL standard and the +ODBC SQL standard, but in some cases MySQL does some things differently: @itemize @bullet @@ -3669,7 +3669,7 @@ extra conditions in this case. @cindex ANSI mode, running If you start @code{mysqld} with the @code{--ansi} option, the following -behavior of @strong{MySQL} changes: +behavior of MySQL changes: @itemize @bullet @item @@ -3678,7 +3678,7 @@ behavior of @strong{MySQL} changes: You can have any number of spaces between a function name and the @samp{(}. This forces all function names to be treated as reserved words. @item -@samp{"} will be an identifier quote character (like the @strong{MySQL} +@samp{"} will be an identifier quote character (like the MySQL @samp{`} quote character) and not a string quote character. @item @code{REAL} will be a synonym for @code{FLOAT} instead of a synonym of @@ -3697,10 +3697,10 @@ This is the same as using @code{--sql-mode=REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QU @cindex functionality, missing The following functionality is missing in the current version of -@strong{MySQL}. For a prioritized list indicating when new extensions -may be added to @strong{MySQL}, you should consult +MySQL. For a prioritized list indicating when new extensions +may be added to MySQL, you should consult @uref{http://www.mysql.com/documentation/manual.php?section=TODO, the -online @strong{MySQL} TODO list}. That is the latest version of the TODO +online MySQL TODO list}. That is the latest version of the TODO list in this manual. @xref{TODO}. @menu @@ -3720,7 +3720,7 @@ list in this manual. @xref{TODO}. @cindex sub-selects -The following will not yet work in @strong{MySQL}: +The following will not yet work in MySQL: @example SELECT * FROM table1 WHERE id IN (SELECT id FROM table2); @@ -3740,7 +3740,7 @@ to hold the subquery. In some cases, however this option will not work. The most frequently encountered of these cases arises with @code{DELETE} statements, for which standard SQL does not support joins (except in sub-selects). For this situation there are two options -available until subqueries are supported by @strong{MySQL}. +available until subqueries are supported by MySQL. The first option is to use a procedural programming language (such as Perl or PHP) to submit a @code{SELECT} query to obtain the primary keys @@ -3749,7 +3749,7 @@ the @code{DELETE} statement (@code{DELETE FROM ... WHERE ... IN (key1, key2, ...)}). The second option is to use interactive SQL to contruct a set of -@code{DELETE} statements automatically, using the @strong{MySQL} +@code{DELETE} statements automatically, using the MySQL extension @code{CONCAT()} (in lieu of the standard @code{||} operator). For example: @@ -3767,7 +3767,7 @@ second instance of the interpreter: prompt> mysql --skip-column-names mydb < myscript.sql | mysql mydb @end example -@strong{MySQL} only supports @code{INSERT ... SELECT ...} and +MySQL only supports @code{INSERT ... SELECT ...} and @code{REPLACE ... SELECT ...} Independent sub-selects will probably be available in Version 4.0. You can now use the function @code{IN()} in other contexts, however. @@ -3778,8 +3778,8 @@ other contexts, however. @findex SELECT INTO TABLE -@strong{MySQL} doesn't yet support the Oracle SQL extension: -@code{SELECT ... INTO TABLE ...}. @strong{MySQL} supports instead the +MySQL doesn't yet support the Oracle SQL extension: +@code{SELECT ... INTO TABLE ...}. MySQL supports instead the ANSI SQL syntax @code{INSERT INTO ... SELECT ...}, which is basically the same thing. @xref{INSERT SELECT}. @@ -3797,15 +3797,15 @@ TABLE ... SELECT} to solve your problem. @cindex transactions, support -As @strong{MySQL} does nowadays support transactions, the following +As MySQL does nowadays support transactions, the following discussion is only valid if you are only using the non-transaction-safe table types. @xref{COMMIT}. The question is often asked, by the curious and the critical, ``Why is -@strong{MySQL} not a transactional database?'' or ``Why does @strong{MySQL} +MySQL not a transactional database?'' or ``Why does MySQL not support transactions?'' -@strong{MySQL} has made a conscious decision to support another paradigm +MySQL has made a conscious decision to support another paradigm for data integrity, ``atomic operations.'' It is our thinking and experience that atomic operations offer equal or even better integrity with much better performance. We, nonetheless, appreciate and understand @@ -3815,7 +3815,7 @@ giving our users the possibility to decide if they need the speed of atomic operations or if they need to use transactional features in their applications. -How does one use the features of @strong{MySQL} to maintain rigorous integrity +How does one use the features of MySQL to maintain rigorous integrity and how do these features compare with the transactional paradigm? First, in the transactional paradigm, if your applications are written @@ -3826,11 +3826,11 @@ corrupting activities are not committed to the database; the server is given the opportunity to do an automatic rollback and your database is saved. -@strong{MySQL}, in almost all cases, allows you to solve for potential +MySQL, in almost all cases, allows you to solve for potential problems by including simple checks before updates and by running simple scripts that check the databases for inconsistencies and automatically repair or warn if such occurs. Note that just by using the -@strong{MySQL} log or even adding one extra log, one can normally fix +MySQL log or even adding one extra log, one can normally fix tables perfectly with no data integrity loss. Moreover, fatal transactional updates can be rewritten to be @@ -3846,7 +3846,7 @@ they could lose data. No system is 100% secure, only ``secure enough.'' Even Oracle, reputed to be the safest of transactional databases, is reported to sometimes lose data in such situations. -To be safe with @strong{MySQL}, you only need to have backups and have +To be safe with MySQL, you only need to have backups and have the update logging turned on. With this you can recover from any situation that you could with any transactional database. It is, of course, always good to have backups, independent of which database you @@ -3855,19 +3855,19 @@ use. The transactional paradigm has its benefits and its drawbacks. Many users and application developers depend on the ease with which they can code around problems where an abort appears to be, or is necessary, and they -may have to do a little more work with @strong{MySQL} to either think +may have to do a little more work with MySQL to either think differently or write more. If you are new to the atomic operations paradigm, or more familiar or more comfortable with transactions, do not -jump to the conclusion that @strong{MySQL} has not addressed these +jump to the conclusion that MySQL has not addressed these issues. Reliability and integrity are foremost in our minds. Recent estimates indicate that there are more than 1,000,000 @code{mysqld} servers currently running, many of which are in production environments. We hear very, very seldom from our users that they have lost any data, and in almost all of those cases user error is involved. This is, in our -opinion, the best proof of @strong{MySQL}'s stability and reliability. +opinion, the best proof of MySQL's stability and reliability. Lastly, in situations where integrity is of highest importance, -@strong{MySQL}'s current features allow for transaction-level or better +MySQL's current features allow for transaction-level or better reliability and integrity. If you lock tables with @code{LOCK TABLES}, all updates will stall until any integrity checks are made. If you only obtain a read lock (as opposed to a write lock), then reads and inserts are @@ -3881,7 +3881,7 @@ to complete. @xref{INSERT DELAYED}. that you can be sure that while each specific update is running, no other user can interfere with it, and there will never be an automatic rollback (which can happen on transaction based systems if you are not -very careful). @strong{MySQL} also guarantees that there will not be +very careful). MySQL also guarantees that there will not be any dirty reads. You can find some example of how to write atomic updates in the commit-rollback section. @xref{Commit-rollback}. @@ -3897,7 +3897,7 @@ optimizations that would not otherwise have been possible. Many of our users who have speed foremost in their minds are not at all concerned about transactions. For them transactions are not an issue. For those of our users who are concerned with or have wondered -about transactions vis-a-vis @strong{MySQL}, there is a ``@strong{MySQL} +about transactions vis-a-vis MySQL, there is a ``MySQL way'' as we have outlined above. For those where safety is more important than speed, we recommend them to use the @code{BDB}, or @code{InnoDB} tables for all their critical data. @xref{Table types}. @@ -3932,7 +3932,7 @@ The planned update language will be able to handle stored procedures, but without triggers. Triggers usually slow down everything, even queries for which they are not needed. -To see when @strong{MySQL} might get stored procedures, see @ref{TODO}. +To see when MySQL might get stored procedures, see @ref{TODO}. @node Missing Foreign Keys, Broken Foreign KEY, Missing Triggers, Missing functions @@ -3952,18 +3952,18 @@ SELECT * from table1,table2 where table1.id = table2.id; @xref{JOIN, , @code{JOIN}}. @xref{example-Foreign keys}. -The @code{FOREIGN KEY} syntax in @strong{MySQL} exists only for compatibility +The @code{FOREIGN KEY} syntax in MySQL exists only for compatibility with other SQL vendors' @code{CREATE TABLE} commands; it doesn't do anything. The @code{FOREIGN KEY} syntax without @code{ON DELETE ...} is mostly used for documentation purposes. Some ODBC applications may use this to produce automatic @code{WHERE} clauses, but this is usually easy to override. @code{FOREIGN KEY} is sometimes used as a constraint check, but this check is unnecessary in practice if rows are inserted into the tables in -the right order. @strong{MySQL} only supports these clauses because some +the right order. MySQL only supports these clauses because some applications require them to exist (regardless of whether or not they work). -In @strong{MySQL}, you can work around the problem of @code{ON DELETE +In MySQL, you can work around the problem of @code{ON DELETE ...} not being implemented by adding the appropriate @code{DELETE} statement to an application when you delete records from a table that has a foreign key. In practice this is as quick (in some cases quicker) and much more portable @@ -4030,7 +4030,7 @@ The only nice aspect of @code{FOREIGN KEY} is that it gives ODBC and some other client programs the ability to see how a table is connected and to use this to show connection diagrams and to help in building applications. -@strong{MySQL} will soon store @code{FOREIGN KEY} definitions so that a +MySQL will soon store @code{FOREIGN KEY} definitions so that a client can ask for and receive an answer about how the original connection was made. The current @file{.frm} file format does not have any place for it. At a later stage we will implement the foreign key @@ -4042,21 +4042,21 @@ constraints for application that can't easily be coded to avoid them. @cindex views -@strong{MySQL} doesn't yet support views, but we plan to implement these +MySQL doesn't yet support views, but we plan to implement these to about 4.1. Views are mostly useful for letting users access a set of relations as one table (in read-only mode). Many SQL databases don't allow one to update any rows in a view, but you have to do the updates in the separate tables. -As @strong{MySQL} is mostly used in applications and on web system where +As MySQL is mostly used in applications and on web system where the application writer has full control on the database usage, most of our users haven't regarded views to be very important. (At least no one has been interested enough in this to be prepared to finance the implementation of views). -One doesn't need views in @strong{MySQL} to restrict access to columns -as @strong{MySQL} has a very sophisticated privilege +One doesn't need views in MySQL to restrict access to columns +as MySQL has a very sophisticated privilege system. @xref{Privilege system}. @@ -4066,14 +4066,14 @@ system. @xref{Privilege system}. @cindex comments, starting @cindex starting, comments -Some other SQL databases use @samp{--} to start comments. @strong{MySQL} +Some other SQL databases use @samp{--} to start comments. MySQL has @samp{#} as the start comment character, even if the @code{mysql} command-line tool removes all lines that start with @samp{--}. You can also use the C comment style @code{/* this is a comment */} with -@strong{MySQL}. +MySQL. @xref{Comments}. -@strong{MySQL} Version 3.23.3 and above supports the @samp{--} comment style +MySQL Version 3.23.3 and above supports the @samp{--} comment style only if the comment is followed by a space. This is because this degenerate comment style has caused many problems with automatically generated SQL queries that have used something like the following code, @@ -4089,10 +4089,10 @@ What do you think will happen when the value of @code{payment} is negative? Because @code{1--1} is legal in SQL, we think it is terrible that @samp{--} means start comment. -In @strong{MySQL} Version 3.23 you can, however, use: +In MySQL Version 3.23 you can, however, use: @code{1-- This is a comment} -The following discussion only concerns you if you are running a @strong{MySQL} +The following discussion only concerns you if you are running a MySQL version earlier than Version 3.23: If you have a SQL program in a text file that contains @samp{--} comments @@ -4143,12 +4143,12 @@ Entry level SQL92. ODBC levels 0-2. The following mostly applies only for @code{ISAM}, @code{MyISAM}, and @code{HEAP} tables. If you only use transaction-safe tables (@code{BDB}, or @code{InnoDB} tables) in an an update, you can do -@code{COMMIT} and @code{ROLLBACK} also with @strong{MySQL}. +@code{COMMIT} and @code{ROLLBACK} also with MySQL. @xref{COMMIT}. The problem with handling @code{COMMIT}-@code{ROLLBACK} efficiently with the above table types would require a completely different table layout -than @strong{MySQL} uses today. The table type would also need extra +than MySQL uses today. The table type would also need extra threads that do automatic cleanups on the tables, and the disk usage would be much higher. This would make these table types about 2-4 times slower than they are today. @@ -4171,7 +4171,7 @@ things may be reprioritized.) The current problem is actually @code{ROLLBACK}. Without @code{ROLLBACK}, you can do any kind of @code{COMMIT} action with @code{LOCK TABLES}. To support @code{ROLLBACK} with the above table -types, @strong{MySQL} would have to be changed to store all old records +types, MySQL would have to be changed to store all old records that were updated and revert everything back to the starting point if @code{ROLLBACK} was issued. For simple cases, this isn't that hard to do (the current @code{isamlog} could be used for this purpose), but it @@ -4245,7 +4245,7 @@ and either the SQL function @code{LAST_INSERT_ID()} or the C API function @code{mysql_insert_id()}. @xref{mysql_insert_id, , @code{mysql_insert_id()}}. @cindex rows, locking -At @strong{MySQL AB}, we have never had any need for row-level locking +At MySQL AB, we have never had any need for row-level locking because we have always been able to code around it. Some cases really need row locking, but they are very few. If you want row-level locking, you can use a flag column in the table and do something like this: @@ -4254,10 +4254,10 @@ can use a flag column in the table and do something like this: UPDATE tbl_name SET row_flag=1 WHERE id=ID; @end example -@strong{MySQL} returns 1 for the number of affected rows if the row was +MySQL returns 1 for the number of affected rows if the row was found and @code{row_flag} wasn't already 1 in the original row. -You can think of it as @strong{MySQL} changed the above query to: +You can think of it as MySQL changed the above query to: @example UPDATE tbl_name SET row_flag=1 WHERE id=ID and row_flag <> 1; @@ -4279,7 +4279,7 @@ fixed: @item @code{ANALYZE TABLE} on a BDB table may in some case make the table unusable until one has restarted @code{mysqld}. When this happens you will -see errors like the following in the @strong{MySQL} error file: +see errors like the following in the MySQL error file: @example 001207 22:07:56 bdb: log_flush: LSN past current end-of-log @@ -4346,7 +4346,7 @@ avoid using bigger unsigned long long values than 63 bits All string columns, except @code{BLOB} and @code{TEXT} columns, automatically have all trailing spaces removed when retrieved. For @code{CHAR} types this is okay, and may be regarded as a feature according to ANSI SQL92. The bug is -that in @strong{MySQL}, @code{VARCHAR} columns are treated the same way. +that in MySQL, @code{VARCHAR} columns are treated the same way. @item You can only have up to 255 @code{ENUM} and @code{SET} columns in one table. @item @@ -4398,7 +4398,7 @@ WHERE band_downloads.userid = 9 AND band_mp3.id = band_downloads.mp3id ORDER BY band_downloads.id DESC; @end example -In the second case you may in @strong{MySQL} 3.23.x get two identical rows +In the second case you may in MySQL 3.23.x get two identical rows in the result set (because the hidden 'id' column may differ). Note that the this only happens for queries where you don't have the @@ -4406,40 +4406,40 @@ ORDER BY columns in the result, something that is you are not allowed to do in ANSI SQL. @item -Because @strong{MySQL} allows you to work with table types that doesn't +Because MySQL allows you to work with table types that doesn't support transactions (and thus can't @code{rollback} data) some things -behaves a little different in @strong{MySQL} than in other SQL servers: -(This is just to ensure that @strong{MySQL} never need to do a rollback +behaves a little different in MySQL than in other SQL servers: +(This is just to ensure that MySQL never need to do a rollback for a SQL command). This may be a little awkward at times as column -Because @strong{MySQL} allows you to work with table types that don't +Because MySQL allows you to work with table types that don't support transactions, and thus can't @code{rollback} data, some things -behave a little differently in @strong{MySQL} than in other SQL servers. -This is just to ensure that @strong{MySQL} never need to do a rollback +behave a little differently in MySQL than in other SQL servers. +This is just to ensure that MySQL never need to do a rollback for a SQL command. This may be a little awkward at times as column values must be checked in the application, but this will actually give -you a nice speed increase as it allows @strong{MySQL} to do some +you a nice speed increase as it allows MySQL to do some optimizations that otherwise would be very hard to do. -If you set a column to an incorrect value, @strong{MySQL} will, instead of +If you set a column to an incorrect value, MySQL will, instead of doing a rollback, store the @code{best possible value} in the column: @itemize @bullet @item If you try to store a value outside the range in a numerical column, -@strong{MySQL} will instead store the smallest or biggest possible value in +MySQL will instead store the smallest or biggest possible value in the column. @item If you try to store a string that doesn't start with a number into a -numerical column, @strong{MySQL} will store 0 into it. +numerical column, MySQL will store 0 into it. @item If you try to store @code{NULL} into a column that doesn't take -@code{NULL} values, @strong{MySQL} will store 0 or @code{''} (empty +@code{NULL} values, MySQL will store 0 or @code{''} (empty string) in it instead. (This behavior can, however, be changed with the -DDONT_USE_DEFAULT_FIELDS compile option). @item -@strong{MySQL} allows you to store some wrong date values into +MySQL allows you to store some wrong date values into @code{DATE} and @code{DATETIME} columns. (Like 2000-02-31 or 2000-02-00). -If the date is totally wrong, @strong{MySQL} will store the special +If the date is totally wrong, MySQL will store the special 0000-00-00 date value in the column. @item If you set an @code{enum} to an unsupported value, it will be set to @@ -4453,7 +4453,7 @@ in some cases the @code{PROCEDURE} will not transform the columns. Creation of a table of type @code{MERGE} doesn't check if the underlying tables are of compatible types. @item -@strong{MySQL} can't yet handle @code{NaN}, @code{-Inf} and @code{Inf} +MySQL can't yet handle @code{NaN}, @code{-Inf} and @code{Inf} values in double. Using these will cause problems when trying to export and import data. We should as an intermediate solution change @code{NaN} to @code{NULL} (if possible) and @code{-Inf} and @code{Inf} to the @@ -4462,7 +4462,7 @@ Minimum respective maximum possible @code{double} value. @code{LIMIT} on negative numbers are treated as big positive numbers. @end itemize -The following are known bugs in earlier versions of @strong{MySQL}: +The following are known bugs in earlier versions of MySQL: @itemize @bullet @item @@ -4481,7 +4481,7 @@ Delayed insert handler has pending inserts to a table. @end enumerate @item -Before @strong{MySQL} Version 3.23.2 an @code{UPDATE} that updated a key with +Before MySQL Version 3.23.2 an @code{UPDATE} that updated a key with a @code{WHERE} on the same key may have failed because the key was used to search for records and the same row may have been found multiple times: @@ -4495,10 +4495,10 @@ A workaround is to use: mysql> UPDATE tbl_name SET KEY=KEY+1 WHERE KEY+0 > 100; @end example -This will work because @strong{MySQL} will not use index on expressions in +This will work because MySQL will not use index on expressions in the @code{WHERE} clause. @item -Before @strong{MySQL} Version 3.23, all numeric types where treated as fixed-point +Before MySQL Version 3.23, all numeric types where treated as fixed-point fields. That means you had to specify how many decimals a floating-point field shall have. All results were returned with the correct number of decimals. @@ -4514,13 +4514,13 @@ For platform-specific bugs, see the sections about compiling and porting. @cindex comparisons, MySQL vs. others @menu -* Compare mSQL:: How @strong{MySQL} compares to @code{mSQL} -* Compare PostgreSQL:: How @strong{MySQL} compares with PostgreSQL +* Compare mSQL:: How MySQL compares to @code{mSQL} +* Compare PostgreSQL:: How MySQL compares with PostgreSQL @end menu -This section compares @strong{MySQL} to other popular databases. +This section compares MySQL to other popular databases. -This section has been written by the @strong{MySQL} developers, so it +This section has been written by the MySQL developers, so it should be read with that in mind. There are no factual errors contained in this section that we know of. If you find something which you believe to be an error, please contact us about it at @email{docs@@mysql.com}. @@ -4536,7 +4536,7 @@ For a list of all supported limits, functions, and types, see the @table @strong @item Performance -For a true comparison of speed, consult the growing @strong{MySQL} benchmark +For a true comparison of speed, consult the growing MySQL benchmark suite. @xref{MySQL Benchmarks}. Because there is no thread creation overhead, a small parser, few features, and @@ -4557,19 +4557,19 @@ easy.) Because these operations are so simple, it is hard to be better at them when you have a higher startup overhead. After the connection is established, -@strong{MySQL} should perform much better. +MySQL should perform much better. -On the other hand, @strong{MySQL} is much faster than @code{mSQL} (and +On the other hand, MySQL is much faster than @code{mSQL} (and most other SQL implementations) on the following: @itemize @bullet @item Complex @code{SELECT} operations. @item -Retrieving large results (@strong{MySQL} has a better, faster, and safer +Retrieving large results (MySQL has a better, faster, and safer protocol). @item -Tables with variable-length strings, because @strong{MySQL} has more efficient +Tables with variable-length strings, because MySQL has more efficient handling and can have indexes on @code{VARCHAR} columns. @item Handling tables with many columns. @@ -4580,7 +4580,7 @@ Handling tables with large record lengths. @item @code{SELECT} on large tables. @item -Handling many connections at the same time. @strong{MySQL} is fully +Handling many connections at the same time. MySQL is fully multi-threaded. Each connection has its own thread, which means that no thread has to wait for another (unless a thread is modifying a table another thread wants to access). In @code{mSQL}, once one connection @@ -4592,7 +4592,7 @@ again, etc. Joins. @code{mSQL} can become pathologically slow if you change the order of tables in a @code{SELECT}. In the benchmark suite, a time more than 15000 times -slower than @strong{MySQL} was seen. This is due to @code{mSQL}'s lack of a +slower than MySQL was seen. This is due to @code{mSQL}'s lack of a join optimizer to order tables in the optimal order. However, if you put the tables in exactly the right order in @code{mSQL}2 and the @code{WHERE} is simple and uses index columns, the join will be relatively fast! @@ -4610,7 +4610,7 @@ Using @code{TEXT} or @code{BLOB} columns. @itemize @bullet @item @code{GROUP BY} and @code{HAVING}. @code{mSQL} does not support @code{GROUP BY} at all. -@strong{MySQL} supports a full @code{GROUP BY} with both @code{HAVING} and +MySQL supports a full @code{GROUP BY} with both @code{HAVING} and the following functions: @code{COUNT()}, @code{AVG()}, @code{MIN()}, @code{MAX()}, @code{SUM()}, and @code{STD()}. @code{COUNT(*)} is optimized to return very quickly if the @code{SELECT} retrieves from one table, no other @@ -4618,55 +4618,55 @@ columns are retrieved, and there is no @code{WHERE} clause. @code{MIN()} and @code{MAX()} may take string arguments. @item @code{INSERT} and @code{UPDATE} with calculations. -@strong{MySQL} can do calculations in an @code{INSERT} or @code{UPDATE}. +MySQL can do calculations in an @code{INSERT} or @code{UPDATE}. For example: @example mysql> UPDATE SET x=x*10+y WHERE x<20; @end example @item Aliasing. -@strong{MySQL} has column aliasing. +MySQL has column aliasing. @item Qualifying column names. -In @strong{MySQL}, if a column name is unique among the tables used in a +In MySQL, if a column name is unique among the tables used in a query, you do not have to use the full qualifier. @item @code{SELECT} with functions. -@strong{MySQL} has many functions (too many to list here; see @ref{Functions}). +MySQL has many functions (too many to list here; see @ref{Functions}). @end itemize @item Disk Space Efficiency That is, how small can you make your tables? -@strong{MySQL} has very precise types, so you can create tables that take -very little space. An example of a useful @strong{MySQL} datatype is the +MySQL has very precise types, so you can create tables that take +very little space. An example of a useful MySQL datatype is the @code{MEDIUMINT} that is 3 bytes long. If you have 100,000,000 records, saving even one byte per record is very important. @code{mSQL2} has a more limited set of column types, so it is more difficult to get small tables. @item Stability -This is harder to judge objectively. For a discussion of @strong{MySQL} +This is harder to judge objectively. For a discussion of MySQL stability, see @ref{Stability}. We have no experience with @code{mSQL} stability, so we cannot say anything about that. @item Price -Another important issue is the license. @strong{MySQL} has a +Another important issue is the license. MySQL has a more flexible license than @code{mSQL}, and is also less expensive than @code{mSQL}. Whichever product you choose to use, remember to at least consider paying for a license or e-mail support. (You are required to get -a license if you include @strong{MySQL} with a product that you sell, +a license if you include MySQL with a product that you sell, of course.) @item Perl Interfaces -@strong{MySQL} has basically the same interfaces to Perl as @code{mSQL} with +MySQL has basically the same interfaces to Perl as @code{mSQL} with some added features. @item JDBC (Java) -@strong{MySQL} currently has a lot of different JDBC drivers: +MySQL currently has a lot of different JDBC drivers: @itemize @bullet @item The mm driver: A type 4 JDBC driver by Mark Matthews @@ -4693,31 +4693,31 @@ We know that @code{mSQL} has a JDBC driver, but we have too little experience with it to compare. @item Rate of Development -@strong{MySQL} has a very small team of developers, but we are quite +MySQL has a very small team of developers, but we are quite used to coding C and C++ very rapidly. Because threads, functions, @code{GROUP BY}, and so on are still not implemented in @code{mSQL}, it has a lot of catching up to do. To get some perspective on this, you can view the @code{mSQL} @file{HISTORY} file for the last year and -compare it with the News section of the @strong{MySQL} Reference Manual +compare it with the News section of the MySQL Reference Manual (@pxref{News}). It should be pretty obvious which one has developed most rapidly. @item Utility Programs -Both @code{mSQL} and @strong{MySQL} have many interesting third-party +Both @code{mSQL} and MySQL have many interesting third-party tools. Because it is very easy to port upward (from @code{mSQL} to -@strong{MySQL}), almost all the interesting applications that are available for -@code{mSQL} are also available for @strong{MySQL}. +MySQL), almost all the interesting applications that are available for +@code{mSQL} are also available for MySQL. -@strong{MySQL} comes with a simple @code{msql2mysql} program that fixes -differences in spelling between @code{mSQL} and @strong{MySQL} for the +MySQL comes with a simple @code{msql2mysql} program that fixes +differences in spelling between @code{mSQL} and MySQL for the most-used C API functions. For example, it changes instances of @code{msqlConnect()} to @code{mysql_connect()}. Converting a client program from @code{mSQL} to -@strong{MySQL} usually takes a couple of minutes. +MySQL usually takes a couple of minutes. @end table @menu -* Using mSQL tools:: How to convert @code{mSQL} tools for @strong{MySQL} +* Using mSQL tools:: How to convert @code{mSQL} tools for MySQL * Protocol differences:: * Syntax differences:: @end menu @@ -4732,24 +4732,24 @@ For example, it changes instances of @code{msqlConnect()} to According to our experience, it would just take a few hours to convert tools such as @code{msql-tcl} and @code{msqljava} that use the -@code{mSQL} C API so that they work with the @strong{MySQL} C API. +@code{mSQL} C API so that they work with the MySQL C API. The conversion procedure is: @enumerate @item Run the shell script @code{msql2mysql} on the source. This requires the -@code{replace} program, which is distributed with @strong{MySQL}. +@code{replace} program, which is distributed with MySQL. @item Compile. @item Fix all compiler errors. @end enumerate -Differences between the @code{mSQL} C API and the @strong{MySQL} C API are: +Differences between the @code{mSQL} C API and the MySQL C API are: @itemize @bullet @item -@strong{MySQL} uses a @code{MYSQL} structure as a connection type (@code{mSQL} +MySQL uses a @code{MYSQL} structure as a connection type (@code{mSQL} uses an @code{int}). @item @code{mysql_connect()} takes a pointer to a @code{MYSQL} structure as a @@ -4761,10 +4761,10 @@ password. You may set these to @code{NULL, NULL} for default use. @code{mysql_error()} takes the @code{MYSQL} structure as a parameter. Just add the parameter to your old @code{msql_error()} code if you are porting old code. @item -@strong{MySQL} returns an error number and a text error message for all +MySQL returns an error number and a text error message for all errors. @code{mSQL} returns only a text error message. @item -Some incompatibilities exist as a result of @strong{MySQL} supporting +Some incompatibilities exist as a result of MySQL supporting multiple connections to the server from the same process. @end itemize @@ -4778,7 +4778,7 @@ multiple connections to the server from the same process. There are enough differences that it is impossible (or at least not easy) to support both. -The most significant ways in which the @strong{MySQL} protocol differs +The most significant ways in which the MySQL protocol differs from the @code{mSQL} protocol are listed below: @itemize @bullet @@ -4794,7 +4794,7 @@ All packets are numbered to catch duplicated or missing packets. All column values are sent in ASCII. The lengths of columns and rows are sent in packed binary coding (1, 2, or 3 bytes). @item -@strong{MySQL} can read in the result unbuffered (without having to store the +MySQL can read in the result unbuffered (without having to store the full set in the client). @item If a single read/write takes more than 30 seconds, the server closes @@ -4815,7 +4815,7 @@ If a connection is idle for 8 hours, the server closes the connection. @strong{Column types} @table @code -@item @strong{MySQL} +@item MySQL Has the following additional types (among others; @pxref{CREATE TABLE, , @code{CREATE TABLE}}): @itemize @bullet @@ -4827,7 +4827,7 @@ Has the following additional types (among others; @code{BIGINT} type for 64-bit integers. @end itemize @item -@strong{MySQL} also supports +MySQL also supports the following additional type attributes: @itemize @bullet @item @@ -4842,9 +4842,9 @@ the following additional type attributes: @code{DEFAULT} value for all columns. @end itemize @item mSQL2 -@code{mSQL} column types correspond to the @strong{MySQL} types shown below: +@code{mSQL} column types correspond to the MySQL types shown below: @multitable @columnfractions .15 .85 -@item @code{mSQL} @strong{type} @tab @strong{Corresponding @strong{MySQL} type} +@item @code{mSQL} @strong{type} @tab @strong{Corresponding MySQL type} @item @code{CHAR(len)} @tab @code{CHAR(len)} @item @code{TEXT(len)} @tab @code{TEXT(len)}. @code{len} is the maximal length. And @code{LIKE} works. @@ -4861,7 +4861,7 @@ And @code{LIKE} works. @strong{Index Creation} @table @code -@item @strong{MySQL} +@item MySQL Indexes may be specified at table creation time with the @code{CREATE TABLE} statement. @item mSQL @@ -4873,7 +4873,7 @@ Indexes must be created after the table has been created, with separate @strong{To Insert a Unique Identifier into a Table} @table @code -@item @strong{MySQL} +@item MySQL Use @code{AUTO_INCREMENT} as a column type specifier. @xref{mysql_insert_id, , @code{mysql_insert_id()}}. @@ -4885,7 +4885,7 @@ Create a @code{SEQUENCE} on a table and select the @code{_seq} column. @strong{To Obtain a Unique Identifier for a Row} @table @code -@item @strong{MySQL} +@item MySQL Add a @code{PRIMARY KEY} or @code{UNIQUE} key to the table and use this. New in Version 3.23.11: If the @code{PRIMARY} or @code{UNIQUE} key consists of only one column and this is of type integer, one can also refer to it as @@ -4899,7 +4899,7 @@ depending on many factors. @strong{To Get the Time a Column Was Last Modified} @table @code -@item @strong{MySQL} +@item MySQL Add a @code{TIMESTAMP} column to the table. This column is automatically set to the current date and time for @code{INSERT} or @code{UPDATE} statements if you don't give the column a value or if you give it a @code{NULL} value. @@ -4912,25 +4912,25 @@ Use the @code{_timestamp} column. @strong{@code{NULL} Value Comparisons} @table @code -@item @strong{MySQL} -@strong{MySQL} follows +@item MySQL +MySQL follows ANSI SQL, and a comparison with @code{NULL} is always @code{NULL}. @item mSQL In @code{mSQL}, @code{NULL = NULL} is TRUE. You must change @code{=NULL} to @code{IS NULL} and @code{<>NULL} to -@code{IS NOT NULL} when porting old code from @code{mSQL} to @strong{MySQL}. +@code{IS NOT NULL} when porting old code from @code{mSQL} to MySQL. @end table @noindent @strong{String Comparisons} @table @code -@item @strong{MySQL} +@item MySQL Normally, string comparisons are performed in case-independent fashion with the sort order determined by the current character set (ISO-8859-1 Latin1 by default). If you don't like this, declare your columns with the @code{BINARY} attribute, which causes comparisons to be done according to the -ASCII order used on the @strong{MySQL} server host. +ASCII order used on the MySQL server host. @item mSQL All string comparisons are performed in case-sensitive fashion with sorting in ASCII order. @@ -4940,9 +4940,9 @@ sorting in ASCII order. @strong{Case-insensitive Searching} @table @code -@item @strong{MySQL} +@item MySQL @code{LIKE} is a case-insensitive or case-sensitive operator, depending on -the columns involved. If possible, @strong{MySQL} uses indexes if the +the columns involved. If possible, MySQL uses indexes if the @code{LIKE} argument doesn't start with a wild-card character. @item mSQL Use @code{CLIKE}. @@ -4952,7 +4952,7 @@ Use @code{CLIKE}. @strong{Handling of Trailing Spaces} @table @code -@item @strong{MySQL} +@item MySQL Strips all spaces at the end of @code{CHAR} and @code{VARCHAR} columns. Use a @code{TEXT} column if this behavior is not desired. @item mSQL @@ -4963,20 +4963,20 @@ Retains trailing space. @strong{@code{WHERE} Clauses} @table @code -@item @strong{MySQL} -@strong{MySQL} correctly prioritizes everything (@code{AND} is evaluated -before @code{OR}). To get @code{mSQL} behavior in @strong{MySQL}, use +@item MySQL +MySQL correctly prioritizes everything (@code{AND} is evaluated +before @code{OR}). To get @code{mSQL} behavior in MySQL, use parentheses (as shown in an example below). @item mSQL Evaluates everything from left to right. This means that some logical calculations with more than three arguments cannot be expressed in any way. It also means you must change some queries when you upgrade to -@strong{MySQL}. You do this easily by adding parentheses. Suppose you +MySQL. You do this easily by adding parentheses. Suppose you have the following @code{mSQL} query: @example mysql> SELECT * FROM table WHERE a=1 AND b=2 OR a=3 AND b=4; @end example -To make @strong{MySQL} evaluate this the way that @code{mSQL} would, +To make MySQL evaluate this the way that @code{mSQL} would, you must add parentheses: @example mysql> SELECT * FROM table WHERE (a=1 AND (b=2 OR (a=3 AND (b=4)))); @@ -4987,7 +4987,7 @@ mysql> SELECT * FROM table WHERE (a=1 AND (b=2 OR (a=3 AND (b=4)))); @strong{Access Control} @table @code -@item @strong{MySQL} +@item MySQL Has tables to store grant (permission) options per user, host, and database. @xref{Privileges}. @item mSQL @@ -5003,7 +5003,7 @@ users. @cindex PostgreSQL vs. MySQL, overview When reading the following, please note that both products are -continually evolving. We at @strong{MySQL AB} and the PostgreSQL +continually evolving. We at MySQL AB and the PostgreSQL developers are both working on making our respective database as good as possible, so we are both a serious choice to any commercial database. @@ -5013,13 +5013,13 @@ knowledge of all PostgreSQL features while we know MySQL througly, we may have got some things wrong. We will however correct these when they come to our attention. -We would first like to note that @code{PostgreSQL} and @strong{MySQL} +We would first like to note that @code{PostgreSQL} and MySQL are both widely used products, but with different design goals, even if we are both striving to be ANSI SQL compatible. This means that for -some applications @strong{MySQL} is more suitable and for others +some applications MySQL is more suitable and for others @code{PostgreSQL} is more suitable. When choosing which database to use, you should first check if the database's feature set satisfies your -application. If you need speed, @strong{MySQL} is probably your best +application. If you need speed, MySQL is probably your best choice. If you need some of the extra features that only @code{PostgreSQL} can offer, you should use @code{PostgreSQL}. @@ -5042,7 +5042,7 @@ that will give maximal throughput. This means that development will take a little longer, but the end result will be well worth this. This kind of development is only possible because all server code are checked by one of a few (currently two) persons before it's included in the -@strong{MySQL} server. +MySQL server. We at MySQL AB believe in frequent releases to be able to push out new features quickly to our users. Because of this we do a new small release @@ -5054,7 +5054,7 @@ it makes sense to prioritize adding a lot of new features, instead of implementing them optimally, because one can always optimize things later if there arises a need for this. -Another big difference between @strong{MySQL} and PostgreSQL is that +Another big difference between MySQL and PostgreSQL is that nearly all of the code in the MySQL server are coded by developers that are employed by MySQL AB and are still working on the server code. The exceptions are the transaction engines and the regexp library. @@ -5066,10 +5066,10 @@ current developer group had finally had time to take a look at all the code in the current PostgreSQL release. Both of the above development methods has it's own merits and drawbacks. -We here at @strong{MySQL AB} think of course that our model is better +We here at MySQL AB think of course that our model is better because our model gives better code consistence, more optimal and reusable code and, in our opinion, fewer bugs. Because we are the -authors of the @strong{MySQL} server code we are better able to +authors of the MySQL server code we are better able to coordinate new features and releases. @@ -5086,33 +5086,33 @@ database. The above web page is however extremely useful when you want to ensure that your applications works with many different databases or when you want to convert your application from one datbase to another. -@strong{MySQL} offers the following advantages over PostgreSQL: +MySQL offers the following advantages over PostgreSQL: @itemize @bullet @item @code{MySQL} is generally much faster than PostgreSQL. @xref{MySQL-PostgreSQL benchmarks}. @item -Because @strong{MySQL} has a much larger user base than PostgreSQL the +Because MySQL has a much larger user base than PostgreSQL the code is more tested and has historically been more stable than -PostgreSQL. @strong{MySQL} is the much more used in production -environments than PostgreSQL, mostly thanks to that @strong{MySQL AB}, +PostgreSQL. MySQL is the much more used in production +environments than PostgreSQL, mostly thanks to that MySQL AB, former TCX DataKonsult AB, has provided top quality commercial support -for @strong{MySQL} from the day it was released, whereas until recently +for MySQL from the day it was released, whereas until recently PostgreSQL was unsupported. @item -@strong{MySQL} works on more platforms than PostgreSQL. @xref{Which OS}. +MySQL works on more platforms than PostgreSQL. @xref{Which OS}. @item -@strong{MySQL} works better on Windows; @strong{MySQL} is running as a +MySQL works better on Windows; MySQL is running as a native windows application (a service on NT/Win2000/WinXP), while PostgreSQL is run under the cygwin emulation. We have heard that PostgreSQL is not yet that stable on windows but we haven't been able to verify this ourselves. @item -@strong{MySQL} has more API to other languages and is supported by more +MySQL has more API to other languages and is supported by more programs than PostgreSQL. @xref{Contrib}. @item -@strong{MySQL} works on 24/7 heavy duty systems. In most circumstances +MySQL works on 24/7 heavy duty systems. In most circumstances you never have to run any cleanups on @code{MySQL}. PostgreSQL doesn't yet support 24/7 systems because you have have to run @code{vacuum()} once in a while to reclaim space from @code{UPDATE} and @code{DELETE} @@ -5130,33 +5130,33 @@ A working, tested replication feature used by sites like @uref{http://www.mobile.de/,mobile.de} and @uref{http://www.slashdot.org,Slashdot}. @item -Included in the @strong{MySQL} distribution is included two different +Included in the MySQL distribution is included two different testing suits (@file{mysql-test-run} and @uref{http://www.mysql.com/information/crash-me.php,crash-me}) and a benchmark suite. The test system is actively updated with code to test each new feature and almost all repeatable bugs that comes to our -attention. We test @strong{MySQL} with these on a lot of platforms +attention. We test MySQL with these on a lot of platforms before every release. These tests are more sofisticated than anything -have seen from PostgreSQL and ensures that the @strong{MySQL} code keeps +have seen from PostgreSQL and ensures that the MySQL code keeps at a high standard. @item -There are far moore books in print on @strong{MySQL} than on PostgreSQL. +There are far moore books in print on MySQL than on PostgreSQL. O'Reilly, Sams, Que, and New Riders are all major publishers with books -about MySQL. All @strong{MySQL} features is also documented in the -@strong{MySQL} on-line manual because when a feature is implemented, the -@strong{MySQL} developers are required to document it before it's +about MySQL. All MySQL features is also documented in the +MySQL on-line manual because when a feature is implemented, the +MySQL developers are required to document it before it's included in the source. @item -@strong{MySQL} has supports more of the standard ODBC functions than +MySQL has supports more of the standard ODBC functions than @code{PostgreSQL}. @item -@strong{MySQL} has a much more sophisticated @code{ALTER TABLE}. +MySQL has a much more sophisticated @code{ALTER TABLE}. @item -@strong{MySQL} has support for tables without transactions for +MySQL has support for tables without transactions for applications that need all speed they can get. The tables may be memory based,@code{HEAP} tables or disk based @code{MyISAM}. @xref{Table types}. @item -@strong{MySQL} has support for 3 different table handles that support +MySQL has support for 3 different table handles that support transactions (@code{BDB} and @code{InnoDB}). Because every transaction engine performs differently under different conditions, this gives the application writer more options to find an @@ -5172,29 +5172,29 @@ the rows in the table, gives you better performance by minimizing disk reads. This is very useful when you are archiving things.@xref{myisampack}. @item -@strong{MySQL} has internal support for text search. @xref{Fulltext Search}. +MySQL has internal support for text search. @xref{Fulltext Search}. @item You can access many databases from the same connection (depending of course on your privileges). @item -@strong{MySQL} is coded from the start with multi-threading while +MySQL is coded from the start with multi-threading while PostgreSQL uses processes. Because context switching and access to common storage areas is much faster between threads, than are separate -processes, this gives @strong{MySQL} a big speed advantage in multi-user -applications and also makes it easier for @strong{MySQL} to take full +processes, this gives MySQL a big speed advantage in multi-user +applications and also makes it easier for MySQL to take full advantage of symmetric multiprocessor systems (SMP). @item -@strong{MySQL} has a much more sophisticated privilege system than +MySQL has a much more sophisticated privilege system than PostgreSQL. While PostgreSQL only supports @code{INSERT}, @code{SELECT}, @code{update/delete} grants per user on a database or a -table @strong{MySQL} allows you to define a full set of different -privileges on database, table and columns level. @strong{MySQL} also allows +table MySQL allows you to define a full set of different +privileges on database, table and columns level. MySQL also allows you to specify the privilege on host+user combinations. @xref{GRANT}. @item -@strong{MySQL} supports a compressed server/client protocol which +MySQL supports a compressed server/client protocol which improves performance over slow links. @item -@strong{MySQL} employs the table handler concept and is the only +MySQL employs the table handler concept and is the only relational database we know of built around this concept. This allows different low level table types to be swapped into the SQL engine, each table type optimized for a different performance characteristics. @@ -5205,23 +5205,23 @@ move, delete and even symlink databases and tables when the server is down. @item Tools to repair and optimize @strong{MyISAM} tables (the most common -@strong{MySQL} table type). A repair tool is only needed when a +MySQL table type). A repair tool is only needed when a physical corruption of a data file happens, usually from a hardware failure. It allows a majority of the data to be recovered. @item -Upgrading @strong{MySQL} is painless. When you are upgrading @strong{MySQL}, +Upgrading MySQL is painless. When you are upgrading MySQL, you don't need to dump/restore your data, as you have to do with most PostgreSQL upgrades. @end itemize -Drawbacks with @strong{MySQL} compared to PostgreSQL: +Drawbacks with MySQL compared to PostgreSQL: @itemize @bullet @item -The transaction support in @strong{MySQL} is not yet as well tested as +The transaction support in MySQL is not yet as well tested as PostgreSQL's system. @item -Because @strong{MySQL} uses threads, which are still a moving target on +Because MySQL uses threads, which are still a moving target on many OS, one must either use binaries from @uref{http://www.mysql.com/downloads} or carefully follow our instructions on @@ -5236,20 +5236,20 @@ for a long time. This can usable be avoided when designing the application. If not, one can always switch the trouble table to use one of the transactional table types. @xref{Table locking}. @item -With UDF (user defined functions) one can extend @strong{MySQL} with +With UDF (user defined functions) one can extend MySQL with both normal SQL functions and aggregates, but this is not as easy or as flexible as in PostgreSQL. @xref{Adding functions}. @item Updates and deletes that goes over multiple tables is harder to do in -@strong{MySQL}. (Will be fixed in @strong{MySQL} 4.0 with multi-table -@code{DELETE} and multi-table @code{UPDATE} and in @strong{MySQL} 4.1 +MySQL. (Will be fixed in MySQL 4.0 with multi-table +@code{DELETE} and multi-table @code{UPDATE} and in MySQL 4.1 with @code{SUB-SELECT}) @end itemize -PostgreSQL offers currently the following advantages over @strong{MySQL}: +PostgreSQL offers currently the following advantages over MySQL: -Note that because we know the @strong{MySQL} road map, we have included -in the following table the version when @strong{MySQL} should support +Note that because we know the MySQL road map, we have included +in the following table the version when MySQL should support this feature. Unfortunately we couldn't do this for previous comparison, because we don't know the PostgreSQL roadmap. @@ -5280,7 +5280,7 @@ One can get speed up PostgreSQL by coding things as stored procedures. Bigger team of developers that contributes to the server. @end itemize -Drawbacks with PostgreSQL compared to @strong{MySQL}: +Drawbacks with PostgreSQL compared to MySQL: @itemize @bullet @item @@ -5305,7 +5305,7 @@ in this section. @cindex PostgreSQL vs. MySQL, benchmarks The only open source benchmark, that we know of, that can be used to -benchmark @strong{MySQL} and PostgreSQL (and other databases) is our +benchmark MySQL and PostgreSQL (and other databases) is our own. It can be found at: @uref{http://www.mysql.com/information/benchmarks.html}. @@ -5313,7 +5313,7 @@ We have many times asked the PostgreSQL developers and some PostgreSQL users to help us extend this benchmark to make the definitive benchmark for databases, but unfortunately we haven't got any feedback for this. -We, the @strong{MySQL} developers, have because of this spent a lot of +We, the MySQL developers, have because of this spent a lot of hours to get maximum performance from PostgreSQL for the benchmarks, but because we don't know PostgreSQL intimately we are sure that there are things that we have missed. We have on the benchmark page documented @@ -5350,15 +5350,15 @@ database is very good at and not test anything that the database is not good at; If one after this publish the result with a single figure things is even easier. -This would be like we would measure the speed of @strong{MySQL} compared +This would be like we would measure the speed of MySQL compared to PostgreSQL by looking at the summary time of the MySQL benchmarks on -our web page. Based on this @strong{MySQL} would be more than 40 times +our web page. Based on this MySQL would be more than 40 times faster than PostgreSQL, something that is of course not true. We could make things even worse by just taking the test where PostgreSQL performs -worst and claim that @strong{MySQL} is more than 2000 times faster than +worst and claim that MySQL is more than 2000 times faster than PostgreSQL. -The case is that @strong{MySQL} does a lot of optimizations that +The case is that MySQL does a lot of optimizations that PostgreSQL doesn't do and the other way around. An SQL optimizer is a very complex thing and a company could spend years on just making the optimizer faster and faster. @@ -5371,8 +5371,8 @@ give you a notion about things to avoid and what you may have to do in other ways. We know of two benchmark tests that claims that PostgreSQL performers -better than @strong{MySQL}. These both where multi-user tests, a test -that we here at @strong{MySQL AB} haven't had time to write and include in +better than MySQL. These both where multi-user tests, a test +that we here at MySQL AB haven't had time to write and include in the benchmark suite, mainly because it's a big task to do this in a manner that is fair against all databases. @@ -5448,10 +5448,10 @@ results or make unprovable statements. Apparently Great Bridge wasn't interested in doing this. @item After the first test, we contacted Great Bridge and mentioned to them -some of the obvious mistakes they had done with @strong{MySQL}; Running +some of the obvious mistakes they had done with MySQL; Running with a debug version of our ODBC driver, running on a Linux system that wasn't optimized for threads, using an old MySQL version when there was -a recommended newer one available, not starting @strong{MySQL} with the +a recommended newer one available, not starting MySQL with the right options for heavy multi-user use (the default installation of MySQL is tuned for minimal resource use). Great Bridge did run a new test, with our optimized ODBC driver and with better startup options for @@ -5498,8 +5498,8 @@ Because of this we can't put any trust in this benchmark either :( Conclusion: The only benchmarks that exist today that anyone can download and run -against @strong{MySQL}and PostgreSQL is the MySQL benchmarks. We here -at @strong{MySQL} believe that open source databases should be tested +against MySQLand PostgreSQL is the MySQL benchmarks. We here +at MySQL believe that open source databases should be tested with open source tools! This is the only way to ensure that no one does tests that nobody can reproduce and use this to claim that a database is better than another. Without knowing all the facts it's @@ -5533,7 +5533,7 @@ tests to the suite. * TODO unplanned:: Some things we don't have any plans to do @end menu -This appendix lists the features that we plan to implement in @strong{MySQL}. +This appendix lists the features that we plan to implement in MySQL. Everything in this list is approximately in the order it will be done. If you want to affect the priority order, please register a license or support us and @@ -5547,9 +5547,9 @@ this without sacrifying the speed or compromise the code. @node TODO MySQL 4.0, TODO future, TODO, TODO @subsection Things that should be in 4.0 -We plan to make @strong{MySQL} Version 4.0 a ``quick'' release where we only +We plan to make MySQL Version 4.0 a ``quick'' release where we only add some new stuff to enable others to help us with developing new features -into Version 4.1. The @strong{MySQL} 4.0 version should only take us about +into Version 4.1. The MySQL 4.0 version should only take us about a month to make after which we want to stabilize it and start working on Version 4.1. Version 4.0 should have the following new features: @@ -5567,7 +5567,7 @@ The new file format will enable us to add new column types, more options for keys and @code{FOREIGN KEY} support. @item @code{mysqld} as a library. This will have the same interface as the -standard @strong{MySQL} client (with an extra function to just set up +standard MySQL client (with an extra function to just set up startup parameters) but will be faster (no TCP/IP or socket overhead), smaller and much easier to use for embedded products. @@ -5575,7 +5575,7 @@ One will be able to define at link time if one wants to use the client/server model or a stand-alone application just by defining which library to link with. -The @code{mysqld} will support all standard @strong{MySQL} features and +The @code{mysqld} will support all standard MySQL features and one can use it in a threaded client to run different queries in each thread. @item @@ -5694,9 +5694,9 @@ Add range checking to @code{MERGE} tables. @item Link the @code{myisampack} code into the server. @item -Port of @strong{MySQL} to BeOS. +Port of MySQL to BeOS. @item -Port of the @strong{MySQL} clients to LynxOS. +Port of the MySQL clients to LynxOS. @item Add a temporary key buffer cache during @code{INSERT/DELETE/UPDATE} so that we can gracefully recover if the index file gets full. @@ -5988,7 +5988,7 @@ important as stored procedures are not very standardized yet. Another problem is that true stored procedures make it much harder for the optimizer and in many cases the result is slower than before We will, on the other hand, add a simple (atomic) update language that -can be used to write loops and such in the @strong{MySQL} server. +can be used to write loops and such in the MySQL server. @item Change to use semaphores when counting threads. One should first implement a semaphore library to MIT-pthreads. @@ -6027,27 +6027,27 @@ Nothing; In the long run we plan to be fully ANSI 92 / ANSI 99 compliant. @menu * Quick Standard Installation:: * General Installation Issues:: -* Installing source:: Installing a @strong{MySQL} source distribution +* Installing source:: Installing a MySQL source distribution * Post-installation:: Post-installation setup and testing * Upgrade:: Upgrading/Downgrading MySQL * Operating System Specific Notes:: @end menu -This chapter describes how to obtain and install @strong{MySQL}: +This chapter describes how to obtain and install MySQL: @itemize @bullet @item -For a list of sites from which you can obtain @strong{MySQL}, see -@ref{Getting MySQL, , Getting @strong{MySQL}}. +For a list of sites from which you can obtain MySQL, see +@ref{Getting MySQL, , Getting MySQL}. @item To see which platforms are supported, see @ref{Which OS}. Please note that -not all supported system are equally good for running @strong{MySQL} on them. +not all supported system are equally good for running MySQL on them. On some it is much more robust and efficient than others - see @ref{Which OS} for details. @item -Several versions of @strong{MySQL} are available in both binary and +Several versions of MySQL are available in both binary and source distributions. We also provide public access to our current source tree for those who want to see our most recent developments and help us test new code. To determine which version and type of @@ -6062,7 +6062,7 @@ into. @item For post-installation procedures, see @ref{Post-installation}. These -procedures apply whether you install @strong{MySQL} using a binary or +procedures apply whether you install MySQL using a binary or source distribution. @end itemize @@ -6083,8 +6083,8 @@ source distribution. @cindex RPM file @cindex RedHat Package Manager -The recommended way to install @strong{MySQL} on Linux is by using an RPM -file. The @strong{MySQL} RPMs are currently being built on a RedHat Version +The recommended way to install MySQL on Linux is by using an RPM +file. The MySQL RPMs are currently being built on a RedHat Version 6.2 system but should work on other versions of Linux that support @code{rpm} and use @code{glibc}. @@ -6097,12 +6097,12 @@ The RPM files you may want to use are: @itemize @bullet @item @code{MySQL-VERSION.i386.rpm} -The @strong{MySQL} server. You will need this unless you only want to -connect to a @strong{MySQL} server running on another machine. +The MySQL server. You will need this unless you only want to +connect to a MySQL server running on another machine. @item @code{MySQL-client-VERSION.i386.rpm} -The standard @strong{MySQL} client programs. You probably always want to +The standard MySQL client programs. You probably always want to install this package. @item @code{MySQL-bench-VERSION.i386.rpm} @@ -6112,7 +6112,7 @@ Tests and benchmarks. Requires Perl and msql-mysql-modules RPMs. @item @code{MySQL-devel-VERSION.i386.rpm} Libraries and include files needed if you want to compile other -@strong{MySQL} clients, such as the Perl modules. +MySQL clients, such as the Perl modules. @item @code{MySQL-VERSION.src.rpm} @@ -6142,11 +6142,11 @@ The RPM places data in @file{/var/lib/mysql}. The RPM also creates the appropriate entries in @file{/etc/rc.d/} to start the server automatically at boot time. (This means that if you have performed a previous installation, you may want to make a copy of your previously installed -@strong{MySQL} startup file if you made any changes to it, so you don't lose +MySQL startup file if you made any changes to it, so you don't lose your changes.) After installing the RPM file(s), the @code{mysqld} daemon should be running -and you should now be able to start using @strong{MySQL}. +and you should now be able to start using MySQL. @xref{Post-installation}. If something goes wrong, you can find more information in the binary @@ -6160,10 +6160,10 @@ The following instructions apply to precompiled binary distributions. If you download a source distribution, you will have to compile and install it yourself. -If you don't have a copy of the @strong{MySQL} distribution, you should +If you don't have a copy of the MySQL distribution, you should first download one from @uref{http://www.mysql.com/downloads/mysql-3.23.html}. -If you plan to connect to @strong{MySQL} from some other program, you will +If you plan to connect to MySQL from some other program, you will probably also need the @strong{MyODBC} driver. You can find this at the @strong{MyODBC} download page (@uref{http://www.mysql.com/downloads/api-myodbc.html}). @@ -6171,12 +6171,12 @@ probably also need the @strong{MyODBC} driver. You can find this at the To install either distribution, unzip it in some empty directory and run the @code{Setup.exe} program. -By default, @strong{MySQL}-Windows is configured to be installed in -@file{C:\mysql}. If you want to install @strong{MySQL} elsewhere, +By default, MySQL-Windows is configured to be installed in +@file{C:\mysql}. If you want to install MySQL elsewhere, install it in @file{C:\mysql} first, then move the installation to -where you want it. If you do move @strong{MySQL}, you must indicate +where you want it. If you do move MySQL, you must indicate where everything is located by supplying a @code{--basedir} option when -you start the server. For example, if you have moved the @strong{MySQL} +you start the server. For example, if you have moved the MySQL distribution to @file{D:\programs\mysql}, you must start @code{mysqld} like this: @@ -6187,20 +6187,20 @@ C:\> D:\programs\mysql\bin\mysqld --basedir D:\programs\mysql Use @code{mysqld --help} to display all the options that @code{mysqld} understands! -With all newer @strong{MySQL} versions, you can also create a +With all newer MySQL versions, you can also create a @file{C:\my.cnf} file that holds any default options for the -@strong{MySQL} server. Copy the file @file{\mysql\my-xxxxx.cnf} to +MySQL server. Copy the file @file{\mysql\my-xxxxx.cnf} to @file{C:\my.cnf} and edit it to suit your setup. Note that you should specify all paths with @samp{/} instead of @samp{\}. If you use @samp{\}, you need to specify it twice, because @samp{\} is the escape -character in @strong{MySQL}. @xref{Option files}. +character in MySQL. @xref{Option files}. -Starting with @strong{MySQL} 3.23.38, the Windows distribution includes +Starting with MySQL 3.23.38, the Windows distribution includes both the normal and the @strong{MySQL-Max} binaries. The main benefit of using the normal @code{mysqld.exe} binary is that it's a little faster and uses less resources. -Here is a list of the different @strong{MySQL} servers you can use: +Here is a list of the different MySQL servers you can use: @multitable @columnfractions .25 .75 @item @code{mysqld} @tab @@ -6253,14 +6253,14 @@ options that must be specified in your @file{my.ini} file! @xref{InnoDB start}. @cindex mirror sites @cindex URLS for downloading MySQL -Check the @uref{http://www.mysql.com/, @strong{MySQL} home page} for +Check the @uref{http://www.mysql.com/, MySQL home page} for information about the current version and for downloading instructions. Our main download mirror is located at: @uref{http://download.sourceforge.net/mirrors/mysql/} -If you are interested in becoming a @strong{MySQL} mirror site, you may +If you are interested in becoming a MySQL mirror site, you may anonymously rsync with: @code{rsync://download.sourceforge.net/mysql/}. Please send e-mail to @email{webmaster@@mysql.com} notifying us of your mirror to be added to the list below. @@ -7070,14 +7070,14 @@ Please report bad or out-of-date mirrors to @email{webmaster@@mysql.com}. @cindex process support @cindex support, for operating systems -We use GNU Autoconf, so it is possible to port @strong{MySQL} to all modern +We use GNU Autoconf, so it is possible to port MySQL to all modern systems with working Posix threads and a C++ compiler. (To compile only the client code, a C++ compiler is required but not threads.) We use and develop the software ourselves primarily on Sun Solaris (Versions 2.5 - 2.7) and SuSE Linux Version 7.x. Note that for many operating systems, the native thread support works only -in the latest versions. @strong{MySQL} has been reported to compile +in the latest versions. MySQL has been reported to compile successfully on the following operating system/thread package combinations: @itemize @bullet @@ -7127,16 +7127,16 @@ Win95, Win98, NT, and Win2000. @xref{Windows}. @end itemize Note that not all platforms are suited equally well for running -@strong{MySQL}. How well a certain platform is suited for a high-load -mission critical @strong{MySQL} server is determined by the following +MySQL. How well a certain platform is suited for a high-load +mission critical MySQL server is determined by the following factors: @itemize @item General stability of the thread library. A platform may have excellent reputation otherwise, but if the thread library is unstable in the code -that is called by @strong{MySQL}, even if -everything else is perfect, @strong{MySQL} will be only as stable as the +that is called by MySQL, even if +everything else is perfect, MySQL will be only as stable as the thread library. @item The ability of the kernel and/or thread library to take advantage of @@ -7149,8 +7149,8 @@ The ability of the kernel and/or the thread library to run many threads which acquire/release a mutex over a short critical region frequently without excessive context switches. In other words, if the implementation of @code{pthread_mutex_lock()} is too anxious to yield CPU, this will hurt -@strong{MySQL} tremendously. If this issue -is not taken care of, adding extra CPUs will actually make @strong{MySQL} +MySQL tremendously. If this issue +is not taken care of, adding extra CPUs will actually make MySQL slower. @item General file system stability/performance. @@ -7158,42 +7158,42 @@ General file system stability/performance. Ability of the file system to deal with large files at all and deal with them efficiently, if your tables are big. @item -Our level of expertise here at @strong{MySQL AB} with the platform. If we know +Our level of expertise here at MySQL AB with the platform. If we know a platform well, we introduce platform-specific optimizations/fixes enabled at compile time. We can also provide advice on configuring your system optimally -for @strong{MySQL}. +for MySQL. @item The amount of testing of similar configurations we have done internally. @item -The number of users that have successfully run @strong{MySQL} on that +The number of users that have successfully run MySQL on that platform in similar configurations. If this number is high, the chances of hitting some platform-specific surprise are much smaller. @end itemize Based on the above criteria, the best platforms for running -@strong{MySQL} at this point are x86 with SuSE Linux 7.1, 2.4 kernel and +MySQL at this point are x86 with SuSE Linux 7.1, 2.4 kernel and ReiserFS (or any similar Linux distribution) and Sparc with Solaris 2.7 or 2.8. FreeBSD comes third, but we really hope it will join the top club once the thread library is improved. We also hope that at some point we will be able to include all other platforms on which -@strong{MySQL} compiles, runs ok, but not quite with the same level of +MySQL compiles, runs ok, but not quite with the same level of stability and performance, into the top category. This will require some effort on our part in cooperation with the developers of the OS/library -components @strong{MySQL} depends upon. If you are interested in making +components MySQL depends upon. If you are interested in making one of those components better, are in a position to influence their -development, and need more detailed instructions on what @strong{MySQL} +development, and need more detailed instructions on what MySQL needs to run better, send an e-mail to @email{internals@@lists.mysql.com}. Please note that the comparison above is not to say that one OS is better or worse than the other in general. We are talking about choosing a particular OS -for a dedicated purpose - running @strong{MySQL}, and compare platforms in that +for a dedicated purpose - running MySQL, and compare platforms in that regard only. With this in mind, the result of this comparison would be different if we included more issues into it. And in some cases, the reason one OS is better than the other could simply be that we have put forth more effort into testing on and optimizing for that particular platform. We are just stating our observations to help you make a -decision on which platform to use @strong{MySQL} on in your setup. +decision on which platform to use MySQL on in your setup. @node Which version, Installation layouts, Which OS, General Installation Issues @@ -7210,11 +7210,11 @@ release or the last stable release: @itemize @bullet @item -Normally, if you are beginning to use @strong{MySQL} for the first time +Normally, if you are beginning to use MySQL for the first time or trying to port it to some system for which there is no binary distribution, we recommend going with the stable release (currently -Version @value{mysql_version}. Note that all @strong{MySQL} releases are -checked with the @strong{MySQL} benchmarks and an extensive test suite +Version @value{mysql_version}. Note that all MySQL releases are +checked with the MySQL benchmarks and an extensive test suite before each release. @item @@ -7235,7 +7235,7 @@ installation: @itemize @bullet @item -If you want to install @strong{MySQL} at some explicit location. (The standard +If you want to install MySQL at some explicit location. (The standard binary distributions are ``ready to run'' at any place, but you may want to get even more flexibility). @@ -7245,9 +7245,9 @@ different binary versions; One compiled with the non-transactional table handlers, (a small, fast binary), and one configured with the most important extended options like transaction-safe tables. Both versions are compiled from the same source distribution. All native @code{MySQL} -clients can connect to both @strong{MySQL} versions. +clients can connect to both MySQL versions. -The extended @strong{MySQL} binary distribution is marked with the +The extended MySQL binary distribution is marked with the @code{-max} suffix and is configured with the same options as @code{mysqld-max}. @xref{mysqld-max, , @code{mysqld-max}}. @@ -7273,19 +7273,19 @@ The default binary distribution is normally compiled with support for all characters sets and should work on a variety of processors from the same processor family. -If you want a faster @strong{MySQL} server you may want to recompile it +If you want a faster MySQL server you may want to recompile it with support for only the character sets you need, use a better compiler (like @code{pgcc}) or use compiler options that are better optimized for your processor. @item -If you have found a bug and reported it to the @strong{MySQL} +If you have found a bug and reported it to the MySQL development team you will probably receive a patch that you need to apply to the source distribution to get the bug fixed. @item If you want to read (and/or modify) the C and C++ code that makes up -@strong{MySQL}, you should get a source distribution. The source code is +MySQL, you should get a source distribution. The source code is always the ultimate manual. Source distributions also contain more tests and examples than binary distributions. @end itemize @@ -7293,7 +7293,7 @@ tests and examples than binary distributions. @cindex naming, releases of MySQL @cindex releases, naming scheme -The @strong{MySQL} naming scheme uses release numbers that consist of three +The MySQL naming scheme uses release numbers that consist of three numbers and a suffix. For example, a release name like @code{mysql-3.21.17-beta} is interpreted like this: @@ -7326,7 +7326,7 @@ should be documented in the News section. @xref{News}. There are also new commands and extensions in most alpha releases. Active development that may involve major code changes can occur on an alpha release, but everything will be tested before doing a release. There should be no known bugs in any -@strong{MySQL} release. +MySQL release. @item @code{beta} means that all new code has been tested. No major new @@ -7348,7 +7348,7 @@ release. This is what we call a stable release. @end itemize @end itemize -All versions of @strong{MySQL} are run through our standard tests and +All versions of MySQL are run through our standard tests and benchmarks to ensure that they are relatively safe to use. Because the standard tests are extended over time to check for all previously found bugs, the test suite keeps getting better. @@ -7363,7 +7363,7 @@ Note that all releases have been tested at least with: This is part of a production system for a customer. It has many tables with hundreds of megabytes of data. -@item The @strong{MySQL} benchmark suite +@item The MySQL benchmark suite This runs a range of common queries. It is also a test to see whether the latest batch of optimizations actually made the code faster. @xref{MySQL Benchmarks}. @@ -7373,7 +7373,7 @@ This tries to determine what features the database supports and what its capabilities and limitations are. @xref{MySQL Benchmarks}. @end table -Another test is that we use the newest @strong{MySQL} version in our internal +Another test is that we use the newest MySQL version in our internal production environment, on at least one machine. We have more than 100 gigabytes of data to work with. @@ -7450,8 +7450,8 @@ distribution by executing the script @file{scripts/make_binary_distribution}. @cindex releases, updating @cindex updating, releases of MySQL -@strong{MySQL} is evolving quite rapidly here at @strong{MySQL AB} and we -want to share this with other @strong{MySQL} users. We try to make a release +MySQL is evolving quite rapidly here at MySQL AB and we +want to share this with other MySQL users. We try to make a release when we have very useful features that others seem to have a need for. We also try to help out users who request features that are easy to @@ -7462,7 +7462,7 @@ want and try to help them out. No one has to download a new release. The News section will tell you if the new release has something you really want. @xref{News}. -We use the following policy when updating @strong{MySQL}: +We use the following policy when updating MySQL: @itemize @bullet @item @@ -7511,8 +7511,8 @@ already working.'' @cindex binary distributions -As a service, we at @strong{MySQL AB} provide a set of binary distributions -of @strong{MySQL} that are compiled at our site or at sites where customers +As a service, we at MySQL AB provide a set of binary distributions +of MySQL that are compiled at our site or at sites where customers kindly have given us access to their machines. These distributions are generated with @code{scripts/make_binary_distribution} @@ -7557,11 +7557,11 @@ Anyone who has more optimal options for any of the configurations listed above can always mail them to the developer's mailing list at @email{internals@@lists.mysql.com}. -RPM distributions prior to @strong{MySQL} Version 3.22 are user-contributed. +RPM distributions prior to MySQL Version 3.22 are user-contributed. Beginning with Version 3.22, the RPMs are generated by us at -@strong{MySQL AB}. +MySQL AB. -If you want to compile a debug version of @strong{MySQL}, you should add +If you want to compile a debug version of MySQL, you should add @code{--with-debug} or @code{--with-debug=full} to the above configure lines and remove any @code{-fomit-frame-pointer} options. @@ -7578,7 +7578,7 @@ binary is available for your platform and if it will work for you. We put in a lot of effort into making sure that our binaries are built with the best possible options. -You need the following tools to build and install @strong{MySQL} from source: +You need the following tools to build and install MySQL from source: @itemize @bullet @item @@ -7595,11 +7595,11 @@ compilers that are known to work. @code{libg++} is not needed when using @code{gcc}. @code{gcc} 2.7.x has a bug that makes it impossible to compile some perfectly legal C++ files, such as @file{sql/sql_base.cc}. If you only have @code{gcc} 2.7.x, you must -upgrade your @code{gcc} to be able to compile @strong{MySQL}. @code{gcc} +upgrade your @code{gcc} to be able to compile MySQL. @code{gcc} 2.8.1 is also known to have problems on some platforms so it should be avoided if there exists a new compiler for the platform.. -@code{gcc} >= 2.95.2 is recommended when compiling @strong{MySQL} +@code{gcc} >= 2.95.2 is recommended when compiling MySQL Version 3.23.x. @item @@ -7644,7 +7644,7 @@ of getting a solution to your problem! You will find @code{mysqlbug} in the @node Quick install, Applying patches, Installing source, Installing source @subsection Quick Installation Overview -The basic commands you must execute to install a @strong{MySQL} source +The basic commands you must execute to install a MySQL source distribution are: @example @@ -7691,7 +7691,7 @@ into it. @item Obtain a distribution file from one of the sites listed in -@ref{Getting MySQL, , Getting @strong{MySQL}}. +@ref{Getting MySQL, , Getting MySQL}. @item If you are interested in using Berkeley DB tables with MySQL, you @@ -7699,7 +7699,7 @@ will need to obtain a patched version of the Berkeley DB source code. Please read the chapter on Berkeley DB tables before proceeding. @xref{BDB}. -@strong{MySQL} source distributions are provided as compressed @code{tar} +MySQL source distributions are provided as compressed @code{tar} archives and have names like @file{mysql-VERSION.tar.gz}, where @code{VERSION} is a number like @value{mysql_version}. @@ -7731,7 +7731,7 @@ Change into the top-level directory of the unpacked distribution: shell> cd mysql-VERSION @end example -Note that currently you must configure and build @strong{MySQL} from +Note that currently you must configure and build MySQL from this top-level directory. You can not build it in a different directory. @@ -7768,15 +7768,15 @@ shell> make install You might need to run this command as @code{root}. @item -Create the @strong{MySQL} grant tables (necessary only if you haven't -installed @strong{MySQL} before): +Create the MySQL grant tables (necessary only if you haven't +installed MySQL before): @example shell> scripts/mysql_install_db @end example -Note that @strong{MySQL} versions older than Version 3.22.10 started the -@strong{MySQL} server when you run @code{mysql_install_db}. This is no +Note that MySQL versions older than Version 3.22.10 started the +MySQL server when you run @code{mysql_install_db}. This is no longer true! @item @@ -7799,7 +7799,7 @@ If you want to install support for the Perl @code{DBI}/@code{DBD} interface, see @ref{Perl support}. @item -If you would like @strong{MySQL} to start automatically when you boot your +If you would like MySQL to start automatically when you boot your machine, you can copy @code{support-files/mysql.server} to the location where your system has its startup files. More information can be found in the @code{support-files/mysql.server} script itself and in @@ -7829,10 +7829,10 @@ running. @xref{Multiple servers}. Sometimes patches appear on the mailing list or are placed in the @uref{http://www.mysql.com/Downloads/Patches, patches area} of the -@strong{MySQL} Web site. +MySQL Web site. To apply a patch from the mailing list, save the message in which the patch -appears in a file, change into the top-level directory of your @strong{MySQL} +appears in a file, change into the top-level directory of your MySQL source tree, and run these commands: @example @@ -7844,7 +7844,7 @@ shell> make clean Patches from the FTP site are distributed as plain text files or as files compressed with @code{gzip}. Apply a plain patch as shown above for mailing list patches. To apply a compressed patch, change into the -top-level directory of your @strong{MySQL} source tree and run these +top-level directory of your MySQL source tree and run these commands: @example @@ -7855,7 +7855,7 @@ shell> make clean After applying a patch, follow the instructions for a normal source install, beginning with the @code{./configure} step. After running the @code{make -install} step, restart your @strong{MySQL} server. +install} step, restart your MySQL server. You may need to bring down any currently running server before you run @code{make install}. (Use @code{mysqladmin shutdown} to do this.) Some @@ -7874,7 +7874,7 @@ the version that is currently executing. @cindex files, log The @code{configure} script gives you a great deal of control over how -you configure your @strong{MySQL} distribution. Typically you do this +you configure your MySQL distribution. Typically you do this using options on the @code{configure} command line. You can also affect @code{configure} using certain environment variables. @xref{Environment variables}. For a list of options supported by @code{configure}, run @@ -7888,7 +7888,7 @@ Some of the more commonly-used @code{configure} options are described below: @itemize @bullet @item -To compile just the @strong{MySQL} client libraries and client programs and +To compile just the MySQL client libraries and client programs and not the server, use the @code{--without-server} option: @example @@ -7927,7 +7927,7 @@ prefix, but overrides the default location for database directories @cindex socket location, changing @cindex mysql.sock, changing location of @item -If you are using Unix and you want the @strong{MySQL} socket located somewhere +If you are using Unix and you want the MySQL socket located somewhere other than the default location (normally in the directory @file{/tmp} or @file{/var/run}) use a @code{configure} command like this: @@ -7984,7 +7984,7 @@ CFLAGS="-O3 -mpentiumpro" CXX=gcc CXXFLAGS="-O3 -mpentiumpro -felide-constructor CFLAGS="-O3 -mpentiumpro -mstack-align-double" CXX=gcc CXXFLAGS="-O3 -mpentiumpro -mstack-align-double -felide-constructors -fno-exceptions -fno-rtti" @end multitable -In most cases you can get a reasonably optimal @strong{MySQL} binary by +In most cases you can get a reasonably optimal MySQL binary by using the options from the above and adding the following options to the configure line: @@ -7999,7 +7999,7 @@ following for all recent gcc versions: CFLAGS="-O3 -mpentiumpro" CXX=gcc CXXFLAGS="-O3 -mpentiumpro -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --enable-assembler --with-mysqld-ldflags=-all-static @end example -The binaries we provide on the @strong{MySQL} Web site at +The binaries we provide on the MySQL Web site at @uref{http://www.mysql.com} are all compiled with full optimization and should be perfect for most users. @xref{MySQL binaries}. There are some things you can tweak to make an even faster binary, but this is only for @@ -8014,7 +8014,7 @@ is a version number), you can work around this problem by giving the @cindex default values, suppression @cindex suppression, default values @item -You can configure @strong{MySQL} not to use @code{DEFAULT} column values for +You can configure MySQL not to use @code{DEFAULT} column values for non-@code{NULL} columns (that is, columns that are not allowed to be @code{NULL}). This causes @code{INSERT} statements to generate an error unless you explicitly specify values for all columns that require a @@ -8031,7 +8031,7 @@ shell> CXXFLAGS=-DDONT_USE_DEFAULT_FIELDS ./configure @findex configure option, --with-charset @findex configure option, --with-extra-charset @item -By default, @strong{MySQL} uses the ISO-8859-1 (Latin1) character set. To +By default, MySQL uses the ISO-8859-1 (Latin1) character set. To change the default set, use the @code{--with-charset} option: @example shell> ./configure --with-charset=CHARSET @@ -8052,8 +8052,8 @@ you should take a look at the @code{SET OPTION CHARACTER SET} command. @strong{Warning:} If you change character sets after having created any tables, you will have to run @code{myisamchk -r -q} on every table. Your indexes may be sorted incorrectly otherwise. (This can happen if you -install @strong{MySQL}, create some tables, then reconfigure -@strong{MySQL} to use a different character set and reinstall it.) +install MySQL, create some tables, then reconfigure +MySQL to use a different character set and reinstall it.) With the option @code{--with-extra-charset=LIST} you can define which additional character sets should be incompiled in the server. @@ -8063,7 +8063,7 @@ Here @code{LIST} is either a list of character set separated with space, or @code{all} to include all character sets into the binaries. @item -To configure @strong{MySQL} with debugging code, use the @code{--with-debug} +To configure MySQL with debugging code, use the @code{--with-debug} option: @example shell> ./configure --with-debug @@ -8074,7 +8074,7 @@ and that provides output about what is happening. @item If your client programs are using threads, you need to also compile a -thread-safe version of the @strong{MySQL} client library with the +thread-safe version of the MySQL client library with the @code{--with-thread-safe-client} configure options. This will create a @code{libmysqlclient_r} library with which you should link your threaded applications. @xref{Thread-safe clients}. @@ -8094,7 +8094,7 @@ system-specific section of this manual. @cindex cvs tree @strong{CAUTION:} You should read this section only if you are interested -in helping us test our new code. If you just want to get @strong{MySQL} up +in helping us test our new code. If you just want to get MySQL up and running on your system, you should use a standard release distribution (either a source or binary distribution will do). @@ -8111,7 +8111,7 @@ Follow the instructions to install it. @item After @strong{BitKeeper} is installed, use this command if you want to clone -the @strong{MySQL} 3.23 branch: +the MySQL 3.23 branch: @example shell> bk clone bk://work.mysql.com:7000 mysql @@ -8148,7 +8148,7 @@ modify the script removing flags that are Pentium-specific. @item When the build is done, run @code{make install}. Be careful with this on a production machine; the command may overwrite your live release -installation. If you have another installation of @strong{MySQL}, we +installation. If you have another installation of MySQL, we recommand that you run @code{./configure} with different values for the @code{prefix}, @code{tcp-port}, and @code{unix-socket-path} options than those used for your production server. @@ -8197,7 +8197,7 @@ a description. @cindex @code{config.cache} file @cindex files, @code{config.cache} -All @strong{MySQL} programs compile cleanly for us with no warnings on +All MySQL programs compile cleanly for us with no warnings on Solaris using @code{gcc}. On other systems, warnings may occur due to differences in system include files. See @ref{MIT-pthreads} for warnings that may occur when using MIT-pthreads. For other problems, check the list @@ -8235,7 +8235,7 @@ shell> make clean Alternatively, you can run @code{make distclean}. -The list below describes some of the problems compiling @strong{MySQL} +The list below describes some of the problems compiling MySQL that have been found to occur most often: @itemize @bullet @@ -8392,7 +8392,7 @@ operating system. (Note that you will have to do this each time you run @item The @file{sql_yacc.cc} file is generated from @file{sql_yacc.yy}. Normally the build process doesn't need to create @file{sql_yacc.cc}, because -@strong{MySQL} comes with an already-generated copy. However, if you do need +MySQL comes with an already-generated copy. However, if you do need to re-create it, you might encounter this error: @example @@ -8404,7 +8404,7 @@ You probably need to install @code{bison} (the GNU version of @code{yacc}) and use that instead. @item -If you need to debug @code{mysqld} or a @strong{MySQL} client, run +If you need to debug @code{mysqld} or a MySQL client, run @code{configure} with the @code{--with-debug} option, then recompile and link your clients with the new client library. @xref{Debugging client}. @end itemize @@ -8422,7 +8422,7 @@ Note that on Linux you should NOT use MIT-pthreads but install LinuxThreads! @xref{Linux}. If your system does not provide native thread support, you will need to -build @strong{MySQL} using the MIT-pthreads package. This includes +build MySQL using the MIT-pthreads package. This includes older FreeBSD systems, SunOS 4.x, Solaris 2.4 and earlier, and some others. @xref{Which OS}. @@ -8448,7 +8448,7 @@ Because Unix sockets do not work under MIT-pthreads, this means you will need to use @code{-h} or @code{--host} when you run client programs. @item -When @strong{MySQL} is compiled using MIT-pthreads, system locking is +When MySQL is compiled using MIT-pthreads, system locking is disabled by default for performance reasons. You can tell the server to use system locking with the @code{--use-locking} option. @@ -8511,11 +8511,11 @@ needed, but may be interesting for someone.) @menu * mysql_install_db:: Problems running @code{mysql_install_db} -* Starting server:: Problems starting the @strong{MySQL} server -* Automatic start:: Starting and stopping @strong{MySQL} automatically +* Starting server:: Problems starting the MySQL server +* Automatic start:: Starting and stopping MySQL automatically @end menu -Once you've installed @strong{MySQL} (from either a binary or source +Once you've installed MySQL (from either a binary or source distribution), you need to initialize the grant tables, start the server, and make sure that the server works okay. You may also wish to arrange for the server to be started and stopped automatically when your system @@ -8542,7 +8542,7 @@ shell> ./bin/safe_mysqld --user=mysql & This creates the @code{mysql} database which will hold all database privileges, the @code{test} database which you can use to test -@strong{MySQL} and also privilege entries for the user that run +MySQL and also privilege entries for the user that run @code{mysql_install_db} and a @code{root} user (without any passwords). This also starts the @code{mysqld} server. @@ -8551,10 +8551,10 @@ it should be safe to run in any circumstances. If you don't want to have the @code{test} database you can remove it with @code{mysqladmin -u root drop test}. -Testing is most easily done from the top-level directory of the @strong{MySQL} +Testing is most easily done from the top-level directory of the MySQL distribution. For a binary distribution, this is your installation directory (typically something like @file{/usr/local/mysql}). For a source -distribution, this is the main directory of your @strong{MySQL} source tree. +distribution, this is the main directory of your MySQL source tree. @cindex testing, the server In the commands shown below in this section and in the following @@ -8575,7 +8575,7 @@ Testing is described in detail below: @enumerate @item If necessary, start the @code{mysqld} server and set up the initial -@strong{MySQL} grant tables containing the privileges that determine how +MySQL grant tables containing the privileges that determine how users are allowed to connect to the server. This is normally done with the @code{mysql_install_db} script: @@ -8584,7 +8584,7 @@ shell> scripts/mysql_install_db @end example Typically, @code{mysql_install_db} needs to be run only the first time you -install @strong{MySQL}. Therefore, if you are upgrading an existing +install MySQL. Therefore, if you are upgrading an existing installation, you can skip this step. (However, @code{mysql_install_db} is quite safe to use and will not update any tables that already exist, so if you are unsure of what to do, you can always run @code{mysql_install_db}.) @@ -8592,7 +8592,7 @@ you are unsure of what to do, you can always run @code{mysql_install_db}.) @code{mysql_install_db} creates six tables (@code{user}, @code{db}, @code{host}, @code{tables_priv}, @code{columns_priv}, and @code{func}) in the @code{mysql} database. A description of the initial privileges is given in -@ref{Default privileges}. Briefly, these privileges allow the @strong{MySQL} +@ref{Default privileges}. Briefly, these privileges allow the MySQL @code{root} user to do anything, and allow anybody to create or use databases with a name of @code{'test'} or starting with @code{'test_'}. @@ -8604,28 +8604,28 @@ log file when you start the server: mysqld: Can't find file: 'host.frm' @end example -The above may also happen with a binary @strong{MySQL} distribution if you -don't start @strong{MySQL} by executing exactly @code{./bin/safe_mysqld}! +The above may also happen with a binary MySQL distribution if you +don't start MySQL by executing exactly @code{./bin/safe_mysqld}! @xref{safe_mysqld, , @code{safe_mysqld}}. You might need to run @code{mysql_install_db} as @code{root}. However, -if you prefer, you can run the @strong{MySQL} server as an unprivileged +if you prefer, you can run the MySQL server as an unprivileged (non-@code{root}) user, provided that user can read and write files in -the database directory. Instructions for running @strong{MySQL} as an +the database directory. Instructions for running MySQL as an unprivileged user are given in @ref{Changing MySQL user, , Changing -@strong{MySQL} user}. +MySQL user}. If you have problems with @code{mysql_install_db}, see @ref{mysql_install_db, , @code{mysql_install_db}}. There are some alternatives to running the @code{mysql_install_db} -script as it is provided in the @strong{MySQL} distribution: +script as it is provided in the MySQL distribution: @itemize @bullet @item You may want to edit @code{mysql_install_db} before running it, to change the initial privileges that are installed into the grant tables. This is -useful if you want to install @strong{MySQL} on a lot of machines with the +useful if you want to install MySQL on a lot of machines with the same privileges. In this case you probably should need only to add a few extra @code{INSERT} statements to the @code{mysql.user} and @code{mysql.db} tables! @@ -8633,7 +8633,7 @@ tables! @item If you want to change things in the grant tables after installing them, you can run @code{mysql_install_db}, then use @code{mysql -u root mysql} to -connect to the grant tables as the @strong{MySQL} @code{root} user and issue +connect to the grant tables as the MySQL @code{root} user and issue SQL statements to modify the grant tables directly. @item @@ -8646,7 +8646,7 @@ the tables but then want to re-create them after editing For more information about these alternatives, see @ref{Default privileges}. @item -Start the @strong{MySQL} server like this: +Start the MySQL server like this: @example shell> cd mysql_installation_directory @@ -8666,7 +8666,7 @@ shell> BINDIR/mysqladmin variables @end example The output from @code{mysqladmin version} varies slightly depending on your -platform and version of @strong{MySQL}, but should be similar to that shown +platform and version of MySQL, but should be similar to that shown below: @example @@ -8709,7 +8709,7 @@ by invoking @code{mysqld} directly. For example: shell> BINDIR/safe_mysqld --log & @end example -If @code{safe_mysqld} fails, try running it from the @strong{MySQL} +If @code{safe_mysqld} fails, try running it from the MySQL installation directory (if you are not already there). If that doesn't work, see @ref{Starting server}. @@ -8748,8 +8748,8 @@ shell> BINDIR/mysql -e "select host,db,user from db" mysql @end example There is also a benchmark suite in the @file{sql-bench} directory (under the -@strong{MySQL} installation directory) that you can use to compare how -@strong{MySQL} performs on different platforms. The @file{sql-bench/Results} +MySQL installation directory) that you can use to compare how +MySQL performs on different platforms. The @file{sql-bench/Results} directory contains the results from many runs against different databases and platforms. To run all tests, execute these commands: @@ -8761,7 +8761,7 @@ shell> run-all-tests If you don't have the @file{sql-bench} directory, you are probably using an RPM for a binary distribution. (Source distribution RPMs include the benchmark directory.) In this case, you must first install the benchmark -suite before you can use it. Beginning with @strong{MySQL} Version 3.22, +suite before you can use it. Beginning with MySQL Version 3.22, there are benchmark RPM files named @file{mysql-bench-VERSION-i386.rpm} that contain benchmark code and data. @@ -8783,8 +8783,8 @@ The expected results are shown in the @file{./tests/auto_increment.res} file. @cindex scripts, @code{mysql_install_db} The purpose of the @code{mysql_install_db} script is to generate new -@strong{MySQL} privilege tables. It will not affect any other data! -It will also not do anything if you already have @strong{MySQL} privilege +MySQL privilege tables. It will not affect any other data! +It will also not do anything if you already have MySQL privilege tables installed! If you want to re-create your privilege tables, you should take down @@ -8820,11 +8820,11 @@ what happened, include the log when you post a bug report using In this case, you probably don't have to run @code{mysql_install_db} at all. You have to run @code{mysql_install_db} only once, when you install -@strong{MySQL} the first time. +MySQL the first time. @item Installing a second @code{mysqld} daemon doesn't work when one daemon is running -This can happen when you already have an existing @strong{MySQL} +This can happen when you already have an existing MySQL installation, but want to put a new installation in a different place (for example, for testing, or perhaps you simply want to run two installations at the same time). Generally the problem that occurs when you try to run the @@ -8870,7 +8870,7 @@ shell> BINDIR/safe_mysqld & If you are running RedHat Version 5.0 with a version of @code{glibc} older than 2.0.7-5, you should make sure you have installed all @code{glibc} patches! -There is a lot of information about this in the @strong{MySQL} mail +There is a lot of information about this in the MySQL mail archives. Links to the mail archives are available online at @uref{http://www.mysql.com/documentation/}. Also, see @ref{Linux}. @@ -8949,7 +8949,7 @@ defaults by specifying the correct pathnames as command-line arguments to @code{mysqld}. (These options can be used with @code{safe_mysqld} as well.) Normally you should need to tell @code{mysqld} only the base directory under -which @strong{MySQL} is installed. You can do this with the @code{--basedir} +which MySQL is installed. You can do this with the @code{--basedir} option. You can also use @code{--help} to check the effect of changing path options (note that @code{--help} @emph{must} be the final option of the @code{mysqld} command). For example: @@ -9037,7 +9037,7 @@ this: @end example This problem occurs only on systems that don't have a working thread -library and for which @strong{MySQL} must be configured to use MIT-pthreads. +library and for which MySQL must be configured to use MIT-pthreads. If you can't get @code{mysqld} to start you can try to make a trace file to find the problem. @xref{Making trace files}. @@ -9069,11 +9069,11 @@ shell> mysql.server stop @end example @code{mysql.server} can be found in the @file{share/mysql} directory -under the @strong{MySQL} installation directory or in the @file{support-files} -directory of the @strong{MySQL} source tree. +under the MySQL installation directory or in the @file{support-files} +directory of the MySQL source tree. Before @code{mysql.server} starts the server, it changes directory to -the @strong{MySQL} installation directory, then invokes @code{safe_mysqld}. +the MySQL installation directory, then invokes @code{safe_mysqld}. You might need to edit @code{mysql.server} if you have a binary distribution that you've installed in a non-standard location. Modify it to @code{cd} into the proper directory before it runs @code{safe_mysqld}. If you want the @@ -9084,9 +9084,9 @@ to the @file{/etc/my.cnf} file, as shown later in this section. You can take down the server manually by executing @code{mysqladmin shutdown}. You might want to add these start and stop commands to the appropriate places -in your @file{/etc/rc*} files when you start using @strong{MySQL} for +in your @file{/etc/rc*} files when you start using MySQL for production applications. Note that if you modify @code{mysql.server}, then -upgrade @strong{MySQL} sometime, your modified version will be overwritten, +upgrade MySQL sometime, your modified version will be overwritten, so you should make a copy of your edited version that you can reinstall. If your system uses @file{/etc/rc.local} to start external scripts, you @@ -9132,10 +9132,10 @@ read from option files: @cindex upgrading @cindex downgrading -You can always move the @strong{MySQL} form and data files between +You can always move the MySQL form and data files between different versions on the same architecture as long as you have the same -base version of @strong{MySQL}. The current base version is -3. If you change the character set when running @strong{MySQL} (which may +base version of MySQL. The current base version is +3. If you change the character set when running MySQL (which may also change the sort order), you must run @code{myisamchk -r -q} on all tables. Otherwise your indexes may not be ordered correctly. @@ -9151,7 +9151,7 @@ like @code{Commands out of sync} or unexpected core dumps, you probably have used an old header or library file when compiling your programs. In this case you should check the date for your @file{mysql.h} file and @file{libmysqlclient.a} library to verify that they are from the new -@strong{MySQL} distribution. If not, please recompile your programs! +MySQL distribution. If not, please recompile your programs! If you get some problems that the new @code{mysqld} server doesn't want to start or that you can't connect without a password, check that you don't @@ -9161,9 +9161,9 @@ anything other than the program name, you have an active @code{my.cnf} file that will affect things! It is a good idea to rebuild and reinstall the @code{Msql-Mysql-modules} -distribution whenever you install a new release of @strong{MySQL}, +distribution whenever you install a new release of MySQL, particularly if you notice symptoms such as all your @code{DBI} scripts -dumping core after you upgrade @strong{MySQL}. +dumping core after you upgrade MySQL. @menu * Upgrading-from-3.22:: Upgrading from a 3.22 version to 3.23 @@ -9179,7 +9179,7 @@ dumping core after you upgrade @strong{MySQL}. @cindex compatibility, between MySQL versions @cindex upgrading, 3.22 to 3.23 -@strong{MySQL} Version 3.23 supports tables of the new @code{MyISAM} type and +MySQL Version 3.23 supports tables of the new @code{MyISAM} type and the old @code{ISAM} type. You don't have to convert your old tables to use these with Version 3.23. By default, all new tables will be created with type @code{MyISAM} (unless you start @code{mysqld} with the @@ -9209,7 +9209,7 @@ For other table types, you can use @code{ALTER TABLE} to optimize the table. During @code{OPTIMIZE TABLE} the table is now locked from other threads. @item -The @strong{MySQL} client @code{mysql} is now by default started with the +The MySQL client @code{mysql} is now by default started with the option @code{--no-named-commands (-g)}. This option can be disabled with @code{--enable-named-commands (-G)}. This may cause incompatibility problems in some cases, for example in SQL scripts that use named commands without a @@ -9251,7 +9251,7 @@ A @code{TIME} string must now be of one of the following formats: @item @code{LIKE} now compares strings using the same character comparison rules as @code{'='}. If you require the old behavior, you can compile -@strong{MySQL} with the @code{CXXFLAGS=-DLIKE_CMP_TOUPPER} flag. +MySQL with the @code{CXXFLAGS=-DLIKE_CMP_TOUPPER} flag. @item @code{REGEXP} is now case insensitive for normal (not binary) strings. @@ -9263,12 +9263,12 @@ or @code{myisamchk} for @code{MyISAM} tables (@code{.MYI}) and @item If you want your @code{mysqldump} files to be compatible between -@strong{MySQL} Version 3.22 and Version 3.23, you should not use the +MySQL Version 3.22 and Version 3.23, you should not use the @code{--opt} or @code{--full} option to @code{mysqldump}. @item Check all your calls to @code{DATE_FORMAT()} to make sure there is a -@samp{%} before each format character. (Later @strong{MySQL} Version 3.22 +@samp{%} before each format character. (Later MySQL Version 3.22 did allow this syntax.) @item @@ -9282,7 +9282,7 @@ now a function that takes @code{MYSQL_RES*} as an argument. You should now use @code{mysql_field_count()} instead. @item -In @strong{MySQL} Version 3.22, the output of @code{SELECT DISTINCT ...} was +In MySQL Version 3.22, the output of @code{SELECT DISTINCT ...} was almost always sorted. In Version 3.23, you must use @code{GROUP BY} or @code{ORDER BY} to obtain sorted output. @@ -9310,11 +9310,11 @@ The only pitfall is that new tables that are created with @code{DATE} type columns will use the new way to store the date. You can't access these new fields from an old version of @code{mysqld}. -After installing @strong{MySQL} Version 3.22, you should start the new server +After installing MySQL Version 3.22, you should start the new server and then run the @code{mysql_fix_privilege_tables} script. This will add the new privileges that you need to use the @code{GRANT} command. If you forget this, you will get @code{Access denied} when you try to use @code{ALTER -TABLE}, @code{CREATE INDEX}, or @code{DROP INDEX}. If your @strong{MySQL} root +TABLE}, @code{CREATE INDEX}, or @code{DROP INDEX}. If your MySQL root user requires a password, you should give this as an argument to @code{mysql_fix_privilege_tables}. @@ -9363,8 +9363,8 @@ rather than 31-bit passwords). The table format hasn't changed, so you don't have to convert any tables. @end itemize -@strong{MySQL} Version 3.20.28 and above can handle the new @code{user} table -format without affecting clients. If you have a @strong{MySQL} version earlier +MySQL Version 3.20.28 and above can handle the new @code{user} table +format without affecting clients. If you have a MySQL version earlier than Version 3.20.28, passwords will no longer work with it if you convert the @code{user} table. So to be safe, you should first upgrade to at least Version 3.20.28 and then upgrade to Version 3.21. @@ -9407,12 +9407,12 @@ There are some new reserved words. The most notable are @code{DATE}, @cindex upgrading, different architecture -If you are using @strong{MySQL} Version 3.23, you can copy the @code{.frm}, +If you are using MySQL Version 3.23, you can copy the @code{.frm}, @code{.MYI}, and @code{.MYD} files between different architectures that -support the same floating-point format. (@strong{MySQL} takes care of any +support the same floating-point format. (MySQL takes care of any byte swapping issues.) -The @strong{MySQL} @code{ISAM} data and index files (@file{.ISD} and +The MySQL @code{ISAM} data and index files (@file{.ISD} and @file{*.ISM}, respectively) are architecture-dependent and in some cases OS-dependent. If you want to move your applications to another machine that has a different architecture or OS than your current machine, you @@ -9424,7 +9424,7 @@ You can then transfer the file to the other machine and feed it as input to the @code{mysql} client. Try @code{mysqldump --help} to see what options are available. -If you are moving the data to a newer version of @strong{MySQL}, you should use +If you are moving the data to a newer version of MySQL, you should use @code{mysqldump --opt} with the newer version to get a fast, compact dump. The easiest (although not the fastest) way to move a database between two @@ -9479,7 +9479,7 @@ shell> mysqldump --tab=DUMPDIR db_name @end example Then transfer the files in the @code{DUMPDIR} directory to some corresponding -directory on the target machine and load the files into @strong{MySQL} +directory on the target machine and load the files into MySQL there: @example @@ -9490,7 +9490,7 @@ shell> mysqlimport db_name DUMPDIR/*.txt # load data into tables Also, don't forget to copy the @code{mysql} database, because that's where the grant tables (@code{user}, @code{db}, @code{host}) are stored. You may have -to run commands as the @strong{MySQL} @code{root} user on the new machine +to run commands as the MySQL @code{root} user on the new machine until you have the @code{mysql} database in place. After you import the @code{mysql} database on the new machine, execute @@ -9528,7 +9528,7 @@ information. @end menu The notes below regarding @strong{glibc} apply only to the situation -when you build @strong{MySQL} +when you build MySQL yourself. If you are running Linux on an x86 machine, in most cases it is much better for you to just use our binary. We link our binaries against the best patched version of @strong{glibc} we can come up with and with the @@ -9541,13 +9541,13 @@ can build a better binary next time. For a typical user, even for setups with a lot of concurrent connections and/or tables exceeding 2GB limit, our binary in most cases is the best choice. -@strong{MySQL} uses LinuxThreads on Linux. If you are using an old +MySQL uses LinuxThreads on Linux. If you are using an old Linux version that doesn't have @code{glibc2}, you must install -LinuxThreads before trying to compile @strong{MySQL}. You can get +LinuxThreads before trying to compile MySQL. You can get LinuxThreads at @uref{http://www.mysql.com/Downloads/Linux}. @strong{NOTE:} We have seen some strange problems with Linux 2.2.14 and -@strong{MySQL} on SMP systems; If you have a SMP system, we recommend +MySQL on SMP systems; If you have a SMP system, we recommend you to upgrade to Linux 2.4 ASAP! Your system will be faster and more stable by doing this! @@ -9557,15 +9557,15 @@ when you do @code{INSERT DELAYED}. We recommend you to not use @code{INSERT DELAYED} before upgrading glibc. If you plan to have 1000+ concurrent connections, you will need to make -some changes to LinuxThreads, recompile it, and relink @strong{MySQL} against +some changes to LinuxThreads, recompile it, and relink MySQL against the new @file{libpthread.a}. Increase @code{PTHREAD_THREADS_MAX} in @file{sysdeps/unix/sysv/linux/bits/local_lim.h} to 4096 and decrease @code{STACK_SIZE} in @file{linuxthreads/internals.h} to 256 KB. The paths are -relative to the root of @code{glibc} Note that @strong{MySQL} will not be +relative to the root of @code{glibc} Note that MySQL will not be stable with around 600-1000 connections if @code{STACK_SIZE} is the default of 2 MB. -If you have a problem with that @strong{MySQL} can't open enough files, +If you have a problem with that MySQL can't open enough files, or connections, it may be that you haven't configured Linux to handle enough files. @@ -9597,7 +9597,7 @@ You should also add /etc/my.cnf: open-files-limit=8192 @end example -The above should allow @strong{MySQL} to create up to 8192 connections + files. +The above should allow MySQL to create up to 8192 connections + files. The @code{STACK_SIZE} constant in LinuxThreads controls the spacing of thread stacks in the address space. It needs to be large enough so that there will @@ -9614,7 +9614,7 @@ thread stacks to stay away from the global heap. With @code{mysqld}, you should enforce this "gentleman" behavior by setting a reasonable value for the @code{max_connections} variable. -If you build @strong{MySQL} yourself and do not what to mess with patching +If you build MySQL yourself and do not what to mess with patching LinuxThreads, you should set @code{max_connections} to a value no higher than 500. It should be even less if you have a large key buffer, large heap tables, or some other things that make @strong{mysqld} allocate a lot @@ -9627,10 +9627,10 @@ the more threads you can safely create. We recommend the values between If you use a lot of concurrent connections, you may suffer from a "feature" in the 2.2 kernel that penalizes a process for forking or cloning a child -in an attempt to prevent a fork bomb attack. This will cause @strong{MySQL} +in an attempt to prevent a fork bomb attack. This will cause MySQL not to scale well as you increase the number of concurrent clients. On single CPU systems, we have seen this manifested in a very slow thread -creation, which means it may take a long time to connect to @strong{MySQL} +creation, which means it may take a long time to connect to MySQL (as long as 1 minute), and it may take just as long to shut it down. On multiple CPU systems, we have observed a gradual drop in query speed as the number of clients increases. In the process of trying to find a @@ -9647,10 +9647,10 @@ the current performance of your system, rather than patching your 2.2 kernel, it might be easier to just upgrade to 2.4, which will also give you a nice SMP boost in addition to fixing this fairness bug. -We have tested @strong{MySQL} on the 2.4 kernel on a 2 CPU machine and -found @strong{MySQL} scales MUCH better - there was virtually no slowdown +We have tested MySQL on the 2.4 kernel on a 2 CPU machine and +found MySQL scales MUCH better - there was virtually no slowdown on query throughput all the way up -to 1000 clients, and @strong{MySQL} scaling factor ( computed as the ratio of +to 1000 clients, and MySQL scaling factor ( computed as the ratio of maximum throughput to the throughput with one client) was 180%. We have observed similar results on a 4-CPU system - virtually no slowdown as the number of @@ -9669,22 +9669,22 @@ systems. If you have access such a system and have done some benchmarks, please send a mail to @email{docs@@mysql.com} with the results - we will include them in the manual. -There is another issue that greatly hurts @strong{MySQL} performance, +There is another issue that greatly hurts MySQL performance, especially on SMP systems. The implementation of mutex in LinuxThreads in @strong{glibc-2.1} is very bad for programs with many threads that only hold the mutex for a short time. On an SMP system, ironic as it is, if -you link @strong{MySQL} against unmodified @strong{LinuxThreads}, -removing processors from the machine improves @strong{MySQL} performance +you link MySQL against unmodified @strong{LinuxThreads}, +removing processors from the machine improves MySQL performance in many cases. We have made a patch available for @strong{glibc 2.1.3}, @uref{http://www.mysql.com/Downloads/Linux/linuxthreads-2.1-patch,linuxthreads-2.1-patch} to correct this behavior. With @strong{glibc-2.2.2} -@strong{MySQL} version 3.23.36 will use the adaptive mutex, which is much +MySQL version 3.23.36 will use the adaptive mutex, which is much better than even the patched one in @strong{glibc-2.1.3}. Be warned, however, that under some conditions, the current mutex code in @strong{glibc-2.2.2} -overspins, which hurts @strong{MySQL} performance. The chance of this +overspins, which hurts MySQL performance. The chance of this condition can be reduced by renicing @code{mysqld} process to the highest priority. We have also been able to correct the overspin behavior with a patch, available @uref{http://www.mysql.com/Downloads/Linux/linuxthreads-2.2.2.patch,here}. It combines the correction of overspin, maximum number of @@ -9696,7 +9696,7 @@ some form in to the future releases of @code{glibc-2.2}. In any case, if you link against @code{glibc-2.2.2} you still need to correct @code{STACK_SIZE} and @code{PTHREAD_THREADS_MAX}. We hope that the defaults will be corrected to some more acceptable values for high-load -@strong{MySQL} setup in the future, so that your own build can be reduced +MySQL setup in the future, so that your own build can be reduced to @code{./configure; make; make install}. We recommend that you use the above patches to build a special static @@ -9709,7 +9709,7 @@ install it on your system, you are doing it at your own risk with regard to other applications that depend on @code{LinuxThreads}. If you experience any strange problems during the installation of -@strong{MySQL}, or with some common utilties hanging, it is very likely that +MySQL, or with some common utilties hanging, it is very likely that they are either library or compiler related. If this is the case, using our binary will resolve them. @@ -9725,12 +9725,12 @@ to handle alarms and signals. Note that the Linux kernel and the LinuxThread library can by default only have 1024 threads. This means that you can only have up to 1021 -connections to @strong{MySQL} on an unpatched system. The page +connections to MySQL on an unpatched system. The page @uref{http://www.volano.com/linuxnotes.html} contains information how to go around this limit. If you see a dead @code{mysqld} daemon process with @code{ps}, this usually -means that you have found a bug in @strong{MySQL} or you have a corrupted +means that you have found a bug in MySQL or you have a corrupted table. @xref{Crashing}. To get a core dump on Linux if @code{mysqld} dies with a SIGSEGV @@ -9745,7 +9745,7 @@ need to raise the @code{core file size} by adding @code{ulimit -c 1000000} to @code{safe_mysqld} or starting @code{safe_mysqld} with @code{--core-file-sizes=1000000}. @xref{safe_mysqld, , @code{safe_mysqld}}. -If you are linking your own @strong{MySQL} client and get the error: +If you are linking your own MySQL client and get the error: @example ld.so.1: ./my: fatal: libmysqlclient.so.4: open failed: No such file or directory @@ -9770,7 +9770,7 @@ to the @code{LD_RUN_PATH} environment variable before running your client. @end itemize If you are using the Fujitsu compiler @code{(fcc / FCC)} you will have -some problems compiling @strong{MySQL} because the Linux header files are very +some problems compiling MySQL because the Linux header files are very @code{gcc} oriented. The following @code{configure} line should work with @code{fcc/FCC}: @@ -9786,7 +9786,7 @@ CC=fcc CFLAGS="-O -K fast -K lib -K omitfp -Kpreex -D_GNU_SOURCE -DCONST=const - @cindex binary distributions, on Linux @cindex Linux, binary distribution -@strong{MySQL} needs at least Linux Version 2.0. +MySQL needs at least Linux Version 2.0. The binary release is linked with @code{-static}, which means you do not normally need to worry about which version of the system libraries you @@ -9795,7 +9795,7 @@ have. You need not install LinuxThreads, either. A program linked with also slightly faster (3-5%). One problem, however, is that you can't use user-definable functions (UDFs) with a statically linked program. If you are going to write or use UDF functions (this is something only for -C or C++ programmers), you must compile @strong{MySQL} yourself, using +C or C++ programmers), you must compile MySQL yourself, using dynamic linking. If you are using a @code{libc}-based system (instead of a @code{glibc2} @@ -9821,24 +9821,24 @@ You can solve this problem in one of the following ways: @itemize @bullet @item -Get a @strong{MySQL} source distribution (an RPM or the @code{tar.gz} +Get a MySQL source distribution (an RPM or the @code{tar.gz} distribution) and install this instead. @item Execute @code{mysql_install_db --force}; This will not execute the @code{resolveip} test in @code{mysql_install_db}. The downside is that you can't use host names in the grant tables; you must use IP numbers -instead (except for @code{localhost}). If you are using an old @strong{MySQL} +instead (except for @code{localhost}). If you are using an old MySQL release that doesn't support @code{--force}, you have to remove the @code{resolveip} test in @code{mysql_install} with an editor. @item Start @code{mysqld} with @code{su} instead of using @code{--user}. @end itemize -The Linux-Intel binary and RPM releases of @strong{MySQL} are configured +The Linux-Intel binary and RPM releases of MySQL are configured for the highest possible speed. We are always trying to use the fastest stable compiler available. -@strong{MySQL} Perl support requires Version Perl 5.004_03 or newer. +MySQL Perl support requires Version Perl 5.004_03 or newer. On some Linux 2.2 versions, you may get the error @code{Resource temporarily unavailable} when you do a lot of new connections to a @@ -9848,7 +9848,7 @@ The problem is that Linux has a delay between when you close a TCP/IP socket and until this is actually freed by the system. As there is only room for a finite number of TCP/IP slots, you will get the above error if you try to do too many new TCP/IP connections during a small time, like -when you run the @strong{MySQL} @file{test-connect} benchmark over +when you run the MySQL @file{test-connect} benchmark over TCP/IP. We have mailed about this problem a couple of times to different Linux @@ -9863,7 +9863,7 @@ kernel will fix this problem in the future. @node Linux-x86, Linux-SPARC, Binary notes-Linux, Linux @subsubsection Linux x86 Notes -@strong{MySQL} requires @code{libc} Version 5.4.12 or newer. It's known to +MySQL requires @code{libc} Version 5.4.12 or newer. It's known to work with @code{libc} 5.4.46. @code{glibc} Version 2.0.6 and later should also work. There have been some problems with the @code{glibc} RPMs from RedHat, so if you have problems, check whether or not there are any updates! @@ -9890,7 +9890,7 @@ mysqld.cc: In function `void * signal_hand(void *)': mysqld.cc:346: warning: assignment of negative value `-1' to `long unsigned int' @end example -In Debian GNU/Linux, if you want @strong{MySQL} to start automatically when +In Debian GNU/Linux, if you want MySQL to start automatically when the system boots, do the following: @example @@ -9899,8 +9899,8 @@ shell> /usr/sbin/update-rc.d mysql.server defaults 99 @end example @code{mysql.server} can be found in the @file{share/mysql} directory -under the @strong{MySQL} installation directory or in the -@file{support-files} directory of the @strong{MySQL} source tree. +under the MySQL installation directory or in the +@file{support-files} directory of the MySQL source tree. If @code{mysqld} always core dumps when it starts up, the problem may be that you have an old @file{/lib/libc.a}. Try renaming it, then remove @@ -9942,21 +9942,21 @@ Version 0.6 or newer. @node Linux-Alpha, Linux-PowerPC, Linux-SPARC, Linux @subsubsection Linux Alpha Notes -@strong{MySQL} Version 3.23.12 is the first @strong{MySQL} version that is -tested on Linux-Alpha. If you plan to use @strong{MySQL} on Linux-Alpha, +MySQL Version 3.23.12 is the first MySQL version that is +tested on Linux-Alpha. If you plan to use MySQL on Linux-Alpha, you should ensure that you have this version or newer. -We have tested @strong{MySQL} on Alpha with our benchmarks and test suite, +We have tested MySQL on Alpha with our benchmarks and test suite, and it appears to work nicely. The main thing we haven't yet had time to test is how things works with many concurrent users. -When we compiled the standard @strong{MySQL} binary we are using SuSE 6.4, +When we compiled the standard MySQL binary we are using SuSE 6.4, kernel 2.2.13-SMP, Compaq C compiler (V6.2-504) and Compaq C++ compiler (V6.3-005) on a Comaq DS20 machine with an Alpha EV6 processor. You can find the above compilers at @uref{http://www.support.compaq.com/alpha-tools}). By using these compilers, -instead of gcc, we get about 9-14 % better performance with @strong{MySQL}. +instead of gcc, we get about 9-14 % better performance with MySQL. Note that the configure line optimized the binary for the current CPU; This means you can only use our binary if you have an Alpha EV6 processor. We also @@ -9972,11 +9972,11 @@ If you want to use egcs the following configure line worked for us: CFLAGS="-O3 -fomit-frame-pointer" CXX=gcc CXXFLAGS="-O3 -fomit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --disable-shared @end example -Some known problems when running @strong{MySQL} on Linux-Alpha: +Some known problems when running MySQL on Linux-Alpha: @itemize @bullet @item -Debugging threaded applications like @strong{MySQL} will not work with +Debugging threaded applications like MySQL will not work with @code{gdb 4.18}. You should download and use gdb 5.0 instead! @item @@ -9989,14 +9989,14 @@ use @code{--with-mysqld-ldflags=-all-static} with @code{gcc}. @node Linux-PowerPC, Linux-MIPS, Linux-Alpha, Linux @subsubsection Linux PowerPC Notes -@strong{MySQL} should work on MkLinux with the newest @code{glibc} package +MySQL should work on MkLinux with the newest @code{glibc} package (tested with @code{glibc} 2.0.7). @node Linux-MIPS, Linux-IA64, Linux-PowerPC, Linux @subsubsection Linux MIPS Notes -To get @strong{MySQL} to work on Qube2, (Linux Mips), you need the +To get MySQL to work on Qube2, (Linux Mips), you need the newest @code{glibc} libraries (@code{glibc-2.0.7-29C2} is known to work). You must also use the @code{egcs} C++ compiler (@code{egcs-1.0.2-9}, @code{gcc 2.95.2} or newer). @@ -10005,7 +10005,7 @@ work). You must also use the @code{egcs} C++ compiler @node Linux-IA64, , Linux-MIPS, Linux @subsubsection Linux IA64 Notes -To get @strong{MySQL} to compile on Linux Ia64, we had to do the following +To get MySQL to compile on Linux Ia64, we had to do the following (we assume that this will be easier when next gcc version for ia64 is released). @@ -10034,31 +10034,31 @@ and @strong{mysqld} should be ready to run. @node Windows, Solaris, Linux, Operating System Specific Notes @subsection Windows Notes -This section describes installation and use of @strong{MySQL} on Windows. +This section describes installation and use of MySQL on Windows. This information is also provided in the @file{README} file that comes -with the @strong{MySQL} Windows distribution. +with the MySQL Windows distribution. @menu -* Win95 start:: Starting @strong{MySQL} on Win95 / Win98 -* NT start:: Starting @strong{MySQL} on NT / Win2000 -* Windows running:: Running @strong{MySQL} on Windows -* Windows and SSH:: Connecting to a remote @strong{MySQL} from Windows with SSH +* Win95 start:: Starting MySQL on Win95 / Win98 +* NT start:: Starting MySQL on NT / Win2000 +* Windows running:: Running MySQL on Windows +* Windows and SSH:: Connecting to a remote MySQL from Windows with SSH * Windows symbolic links:: Splitting data across different disks under Win32 * Windows compiling:: Compiling MySQL clients on Windows. -* Windows vs Unix:: @strong{MySQL}-Windows compared to Unix @strong{MySQL} +* Windows vs Unix:: MySQL-Windows compared to Unix MySQL @end menu @node Win95 start, NT start, Windows, Windows @subsubsection Starting MySQL on Windows 95 or Windows 98 -@strong{MySQL} uses TCP/IP to connect a client to a server. (This will -allow any machine on your network to connect to your @strong{MySQL} +MySQL uses TCP/IP to connect a client to a server. (This will +allow any machine on your network to connect to your MySQL server.) Because of this, you must install TCP/IP on your machine before -starting @strong{MySQL}. You can find TCP/IP on your Windows CD-ROM. +starting MySQL. You can find TCP/IP on your Windows CD-ROM. Note that if you are using an old Win95 release (for example OSR2), it's -likely that you have an old Winsock package! @strong{MySQL} requires +likely that you have an old Winsock package! MySQL requires Winsock 2! You can get the newest Winsock from @uref{http://www.microsoft.com/}. Win98 has the new Winsock 2 library, so the above doesn't apply for Win98. @@ -10071,7 +10071,7 @@ C:\> C:\mysql\bin\mysqld This will start @code{mysqld} in the background without a window. -You can kill the @strong{MySQL} server by executing: +You can kill the MySQL server by executing: @example C:\> C:\mysql\bin\mysqladmin -u root shutdown @@ -10079,8 +10079,8 @@ C:\> C:\mysql\bin\mysqladmin -u root shutdown Note that Win95 and Win98 don't support creation of named pipes. On Win95 and Win98, you can only use named pipes to connect to a -remote @strong{MySQL} server running on a Windows NT server host. -(The @strong{MySQL} server must also support named pipes, of +remote MySQL server running on a Windows NT server host. +(The MySQL server must also support named pipes, of course. For example, using @code{mysqld-opt} under NT will not allow named pipe connections. You should use either @code{mysqld-nt} or @code{mysqld-max-nt}.) @@ -10100,17 +10100,17 @@ doesn't start. @xref{Making trace files}. @node NT start, Windows running, Win95 start, Windows @subsubsection Starting MySQL on Windows NT or Windows 2000 -The Win95/Win98 section also applies to @strong{MySQL} on NT/Win2000, with +The Win95/Win98 section also applies to MySQL on NT/Win2000, with the following differences: -To get @strong{MySQL} to work with TCP/IP on NT, you must install +To get MySQL to work with TCP/IP on NT, you must install service pack 3 (or newer)! Note that everything in the following that applies for NT also applies for Win2000! For NT/Win2000, the server name is @code{mysqld-nt}. Normally you -should install @strong{MySQL} as a service on NT/Win2000: +should install MySQL as a service on NT/Win2000: @example C:\> C:\mysql\bin\mysqld-nt --install @@ -10126,7 +10126,7 @@ C:\> C:\mysql\bin\mysqld-max-nt --install as a service, but only those having names that end with @code{-nt.exe} provide support for named pipes.) -You can start and stop the @strong{MySQL} service with these commands: +You can start and stop the MySQL service with these commands: @example C:\> NET START mysql @@ -10145,7 +10145,7 @@ The service is installed with the name @code{MySQL}. Once installed, it must be started using the Services Control Manager (SCM) Utility found in the Control Panel, or by using the @code{NET START MySQL} command. If any options are desired, they must be specified as ``Startup parameters'' in the SCM utility -before you start the @strong{MySQL} service. Once running, @code{mysqld-nt} +before you start the MySQL service. Once running, @code{mysqld-nt} can be stopped using @code{mysqladmin}, or from the SCM utility or by using the command @code{NET STOP MySQL}. If you use SCM to stop @code{mysqld-nt}, there is a strange message from SCM about @code{mysqld shutdown normally}. @@ -10193,7 +10193,7 @@ The last version gives you a debug trace in @file{C:\mysqld.trace}. @cindex TCP/IP @cindex named pipes -@strong{MySQL} supports TCP/IP on all Windows platforms and named pipes on NT. +MySQL supports TCP/IP on all Windows platforms and named pipes on NT. The default is to use named pipes for local connections on NT and TCP/IP for all other cases if the client has TCP/IP installed. The host name specifies which protocol is used: @@ -10206,11 +10206,11 @@ which protocol is used: @item hostname @tab TCP/IP @end multitable -You can force a @strong{MySQL} client to use named pipes by specifying the +You can force a MySQL client to use named pipes by specifying the @code{--pipe} option or by specifying @code{.} as the host name. Use the @code{--socket} option to specify the name of the pipe. -You can test whether or not @strong{MySQL} is working by executing the +You can test whether or not MySQL is working by executing the following commands: @example @@ -10223,12 +10223,12 @@ C:\> C:\mysql\bin\mysql test If @code{mysqld} is slow to answer to connections on Win95/Win98, there is probably a problem with your DNS. In this case, start @code{mysqld} with @code{--skip-name-resolve} and use only @code{localhost} and IP numbers in -the @strong{MySQL} grant tables. You can also avoid DNS when connecting to a -@code{mysqld-nt} @strong{MySQL} server running on NT by using the +the MySQL grant tables. You can also avoid DNS when connecting to a +@code{mysqld-nt} MySQL server running on NT by using the @code{--pipe} argument to specify use of named pipes. This works for most -@strong{MySQL} clients. +MySQL clients. -There are two versions of the @strong{MySQL} command-line tool: +There are two versions of the MySQL command-line tool: @multitable @columnfractions .25 .75 @item @code{mysql} @tab Compiled on native Windows, which offers very limited text editing capabilities. @item @code{mysqlc} @tab Compiled with the Cygnus GNU compiler and libraries, which offers @code{readline} editing. @@ -10239,7 +10239,7 @@ If you want to use @code{mysqlc.exe}, you must copy (@file{\windows\system} or similar place). The default privileges on Windows give all local users full privileges -to all databases without specifying a password. To make @strong{MySQL} +to all databases without specifying a password. To make MySQL more secure, you should set a password for all users and remove the row in the @code{mysql.user} table that has @code{Host='localhost'} and @code{User=''}. @@ -10263,12 +10263,12 @@ server, you can do so using this command: C:\> mysqladmin --user=root --password=your_password shutdown @end example -If you are using the old shareware version of @strong{MySQL} Version +If you are using the old shareware version of MySQL Version 3.21 under Windows, the above command will fail with an error: @code{parse error near 'SET OPTION password'}. The fix is in to upgrade -to the current @strong{MySQL} version, which is freely available. +to the current MySQL version, which is freely available. -With the current @strong{MySQL} versions you can easily add new users +With the current MySQL versions you can easily add new users and change privileges with @code{GRANT} and @code{REVOKE} commands. @xref{GRANT}. @@ -10282,7 +10282,7 @@ and change privileges with @code{GRANT} and @code{REVOKE} commands. @cindex connecting, remotely with SSH Here is a note about how to connect to get a secure connection to remote -@strong{MySQL} server with SSH (by David Carlson @email{dcarlson@@mplcomm.com}): +MySQL server with SSH (by David Carlson @email{dcarlson@@mplcomm.com}): @itemize @bullet @item @@ -10296,7 +10296,7 @@ can also find some free ones on @strong{Google} at Start your Windows SSH client. Set @code{Host_Name = yourmysqlserver_URL_or_IP}. Set @code{userid=your_userid} to log in to your server (probably not the same -as your @strong{MySQL} login/password. +as your MySQL login/password. @item Set up port forwarding. Either do a remote forward (Set @code{local_port: 3306}, @code{remote_host: yourmysqlservername_or_ip}, @code{remote_port: 3306} ) @@ -10312,12 +10312,12 @@ Log in to your server with SSH session you just created. On your Windows machine, start some ODBC application (such as Access). @item -Create a new file in Windows and link to @strong{MySQL} using the ODBC +Create a new file in Windows and link to MySQL using the ODBC driver the same way you normally do, EXCEPT type in @code{localhost} -for the @strong{MySQL} host server --- not @code{yourmysqlservername}. +for the MySQL host server --- not @code{yourmysqlservername}. @end itemize -You should now have an ODBC connection to @strong{MySQL}, encrypted using SSH. +You should now have an ODBC connection to MySQL, encrypted using SSH. @node Windows symbolic links, Windows compiling, Windows and SSH, Windows @@ -10327,8 +10327,8 @@ You should now have an ODBC connection to @strong{MySQL}, encrypted using SSH. @cindex using multiple disks to start data @cindex disks, splitting data across -Beginning with @strong{MySQL} Version 3.23.16, the @code{mysqld-max} -and @code{mysql-max-nt} servers in the @strong{MySQL} distribution are +Beginning with MySQL Version 3.23.16, the @code{mysqld-max} +and @code{mysql-max-nt} servers in the MySQL distribution are compiled with the @code{-DUSE_SYMDIR} option. This allows you to put a database on different disk by adding a symbolic link to it (in a manner similar to the way that symbolic links work on Unix). @@ -10339,7 +10339,7 @@ the @file{mysql_data} directory under the filename @file{database.sym}. Note that the symbolic link will be used only if the directory @file{mysql_data_dir\database} doesn't exist. -For example, if the @strong{MySQL} data directory is @file{C:\mysql\data} +For example, if the MySQL data directory is @file{C:\mysql\data} and you want to have database @code{foo} located at @file{D:\data\foo}, you should create the file @file{C:\mysql\data\foo.sym} that contains the text @code{D:\data\foo\}. After that, all tables created in the database @@ -10347,7 +10347,7 @@ text @code{D:\data\foo\}. After that, all tables created in the database Note that because of the speed penalty you get when opening every table, we have not enabled this by default even if you have compiled -@strong{MySQL} with support for this. To enable symlinks you should put +MySQL with support for this. To enable symlinks you should put in your @code{my.cnf} or @code{my.ini} file the following entry: @example @@ -10355,7 +10355,7 @@ in your @code{my.cnf} or @code{my.ini} file the following entry: use-symbolic-links @end example -In @strong{MySQL} 4.0 we will enable symlinks by default. Then you +In MySQL 4.0 we will enable symlinks by default. Then you should instead use the @code{skip-symlink} option if you want to disable this. @@ -10390,39 +10390,39 @@ you should also compile your code to be multi-threaded! @cindex Windows, versus Unix @cindex operating systems, Windows versus Unix -@strong{MySQL}-Windows has by now proven itself to be very stable. This version -of @strong{MySQL} has the same features as the corresponding Unix version +MySQL-Windows has by now proven itself to be very stable. This version +of MySQL has the same features as the corresponding Unix version with the following exceptions: @table @strong @item Win95 and threads Win95 leaks about 200 bytes of main memory for each thread creation. -Each connection in @strong{MySQL} creates a new thread, so you shouldn't +Each connection in MySQL creates a new thread, so you shouldn't run @code{mysqld} for an extended time on Win95 if your server handles many connections! WinNT and Win98 don't suffer from this bug. @item Concurrent reads -@strong{MySQL} depends on the @code{pread()} and @code{pwrite()} calls to be +MySQL depends on the @code{pread()} and @code{pwrite()} calls to be able to mix @code{INSERT} and @code{SELECT}. Currently we use mutexes to emulate @code{pread()}/@code{pwrite()}. We will, in the long run, replace the file level interface with a virtual interface so that we can use the @code{readfile()}/@code{writefile()} interface on NT to get more speed. -The current implementation limits the number of open files @strong{MySQL} +The current implementation limits the number of open files MySQL can use to 1024, which means that you will not be able to run as many concurrent threads on NT as on Unix. @item Blocking read -@strong{MySQL} uses a blocking read for each connection. +MySQL uses a blocking read for each connection. This means that: @itemize @bullet @item A connection will not be disconnected automatically after 8 hours, as happens -with the Unix version of @strong{MySQL}. +with the Unix version of MySQL. @item If a connection hangs, it's impossible to break it without killing -@strong{MySQL}. +MySQL. @item @code{mysqladmin kill} will not work on a sleeping connection. @@ -10436,25 +10436,25 @@ We plan to fix this problem when our Windows developers have figured out a nice workaround. @item UDF functions -For the moment, @strong{MySQL}-Windows does not support user-definable +For the moment, MySQL-Windows does not support user-definable functions. @item @code{DROP DATABASE} You can't drop a database that is in use by some thread. -@item Killing @strong{MySQL} from the task manager -You can't kill @strong{MySQL} from the task manager or with the shutdown +@item Killing MySQL from the task manager +You can't kill MySQL from the task manager or with the shutdown utility in Win95. You must take it down with @code{mysqladmin shutdown}. @item Case-insensitive names Filenames are case insensitive on Windows, so database and table names -are also case insensitive in @strong{MySQL} for Windows. The only +are also case insensitive in MySQL for Windows. The only restriction is that database and table names must be specified using the same case throughout a given statement. @xref{Name case sensitivity}. @item The @samp{\} directory character Pathname components in Win95 are separated by the @samp{\} character, which is -also the escape character in @strong{MySQL}. If you are using @code{LOAD +also the escape character in MySQL. If you are using @code{LOAD DATA INFILE} or @code{SELECT ... INTO OUTFILE}, you must double the @samp{\} character: @@ -10471,7 +10471,7 @@ mysql> SELECT * INTO OUTFILE 'C:/tmp/skr.txt' FROM skr; @end example @item @code{Can't open named pipe} error -If you use a @strong{MySQL} 3.22 version on NT with the newest mysql-clients +If you use a MySQL 3.22 version on NT with the newest mysql-clients you will get the following error: @example @@ -10479,9 +10479,9 @@ error 2017: can't open named pipe to host: . pipe... @end example @tindex .my.cnf file -This is because the release version of @strong{MySQL} uses named pipes on NT +This is because the release version of MySQL uses named pipes on NT by default. You can avoid this error by using the @code{--host=localhost} -option to the new @strong{MySQL} clients or create an option file +option to the new MySQL clients or create an option file @file{C:\my.cnf} that contains the following information: @example @@ -10491,8 +10491,8 @@ host = localhost @item @code{Access denied for user} error If you get the error @code{Access denied for user: 'some-user@@unknown' -to database 'mysql'} when accessing a @strong{MySQL} server on the same -machine, this means that @strong{MySQL} can't resolve your host name +to database 'mysql'} when accessing a MySQL server on the same +machine, this means that MySQL can't resolve your host name properly. To fix this, you should create a file @file{\windows\hosts} with the @@ -10509,7 +10509,7 @@ you can't delete a file that is in use by another threads. (In the future, we may find some way to work around this problem.) @item @code{DROP TABLE} on a table that is in use by a @code{MERGE} table will not work -The @code{MERGE} handler does its table mapping hidden from @strong{MySQL}. +The @code{MERGE} handler does its table mapping hidden from MySQL. Because Windows doesn't allow you to drop files that are open, you first must flush all @code{MERGE} tables (with @code{FLUSH TABLES}) or drop the @code{MERGE} table before dropping the table. We will fix this at the same @@ -10524,15 +10524,15 @@ release: @itemize @bullet @item Make a single-user @code{MYSQL.DLL} server. This should include everything in -a standard @strong{MySQL} server, except thread creation. This will make -@strong{MySQL} much easier to use in applications that don't need a true +a standard MySQL server, except thread creation. This will make +MySQL much easier to use in applications that don't need a true client/server and don't need to access the server from other hosts. @item -Add some nice start and shutdown icons to the @strong{MySQL} installation. +Add some nice start and shutdown icons to the MySQL installation. @item -Create a tool to manage registry entries for the @strong{MySQL} startup +Create a tool to manage registry entries for the MySQL startup options. The registry entry reading is already coded into @file{mysqld.cc}, but it should be recoded to be more parameter oriented. The tool should also be able to update the @file{C:\my.cnf} option file if the user prefers @@ -10552,7 +10552,7 @@ For the moment, you must use @code{mysqladmin shutdown}. Port @code{readline} to Windows for use in the @code{mysql} command line tool. @item -GUI versions of the standard @strong{MySQL} clients (@code{mysql}, +GUI versions of the standard MySQL clients (@code{mysql}, @code{mysqlshow}, @code{mysqladmin}, and @code{mysqldump}) would be nice. @item @@ -10574,7 +10574,7 @@ provided by Windows. @end itemize Other Windows-specific issues are described in the @file{README} file that -comes with the @strong{MySQL}-Windows distribution. +comes with the MySQL-Windows distribution. @node Solaris, BSD Notes, Windows, Operating System Specific Notes @@ -10586,9 +10586,9 @@ comes with the @strong{MySQL}-Windows distribution. @cindex errors, directory checksum @cindex checksum errors -On Solaris, you may run into trouble even before you get the @strong{MySQL} +On Solaris, you may run into trouble even before you get the MySQL distribution unpacked! Solaris @code{tar} can't handle long file names, so -you may see an error like this when you unpack @strong{MySQL}: +you may see an error like this when you unpack MySQL: @example x mysql-3.22.12-beta/bench/Results/ATIS-mysql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase, 0 bytes, 0 tape blocks @@ -10600,7 +10600,7 @@ distribution. You can find a precompiled copy for Solaris at @uref{http://www.mysql.com/Downloads/}. Sun native threads work only on Solaris 2.5 and higher. For Version 2.4 and -earlier, @strong{MySQL} will automatically use MIT-pthreads. +earlier, MySQL will automatically use MIT-pthreads. @xref{MIT-pthreads}. If you get the following error from configure: @@ -10661,7 +10661,7 @@ can't compile with the Solaris @file{pthread.h} header file. This is a Sun bug (broken compiler or broken include file). If @code{mysqld} issues the error message shown below when you run it, you have -tried to compile @strong{MySQL} with the Sun compiler without enabling the +tried to compile MySQL with the Sun compiler without enabling the multi-thread option (@code{-mt}): @example @@ -10670,7 +10670,7 @@ libc internal error: _rmutex_unlock: rmutex not held Add @code{-mt} to @code{CFLAGS} and @code{CXXFLAGS} and try again. -If you get the following error when compiling @strong{MySQL} with @code{gcc}, +If you get the following error when compiling MySQL with @code{gcc}, it means that your @code{gcc} is not configured for your version of Solaris: @example @@ -10686,7 +10686,7 @@ old, unusable include files that will break all programs that use threads (and possibly other programs)! Solaris doesn't provide static versions of all system libraries -(@code{libpthreads} and @code{libdl}), so you can't compile @strong{MySQL} +(@code{libpthreads} and @code{libdl}), so you can't compile MySQL with @code{--static}. If you try to do so, you will get the error: @example @@ -10698,7 +10698,7 @@ undefined reference to `dlopen' @end example If too many processes try to connect very rapidly to @code{mysqld}, you will -see this error in the @strong{MySQL} log: +see this error in the MySQL log: @example Error in accept: Protocol error @@ -10707,7 +10707,7 @@ Error in accept: Protocol error You might try starting the server with the @code{--set-variable back_log=50} option as a workaround for this. @xref{Command-line options}. -If you are linking your own @strong{MySQL} client, you might get the +If you are linking your own MySQL client, you might get the following error when you try to execute it: @example @@ -10751,10 +10751,10 @@ Configure with @code{--with-named-z-libs=no}. @end itemize If you are using gcc and have problems with loading @code{UDF} functions -into @strong{MySQL}, try adding @code{-lgcc} to the link line for the +into MySQL, try adding @code{-lgcc} to the link line for the @code{UDF} function. -If you would like @strong{MySQL} to start automatically, you can copy +If you would like MySQL to start automatically, you can copy @file{support-files/mysql.server} to @file{/etc/init.d} and create a symbolic link to it named @file{/etc/rc3.d/S99mysql.server}. @@ -10771,7 +10771,7 @@ symbolic link to it named @file{/etc/rc3.d/S99mysql.server}. You can normally use a Solaris 2.6 binary on Solaris 2.7 and 2.8. Most of the Solaris 2.6 issues also apply for Solaris 2.7 and 2.8. -Note that @strong{MySQL} Version 3.23.4 and above should be able to autodetect +Note that MySQL Version 3.23.4 and above should be able to autodetect new versions of Solaris and enable workarounds for the following problems! Solaris 2.7 / 2.8 has some bugs in the include files. You may see the @@ -10841,7 +10841,7 @@ If you are using Solaris 8, you can install the optional zlib from your Solaris 8 CD distribution. @item -Configure @strong{MySQL} with the @code{--with-named-z-libs=no} option. +Configure MySQL with the @code{--with-named-z-libs=no} option. @end itemize @@ -10888,7 +10888,7 @@ it with a trace file or under @code{gdb}. @xref{Using gdb on mysqld}. @node FreeBSD, NetBSD, BSD Notes, BSD Notes @subsubsection FreeBSD Notes -FreeBSD 3.x is recommended for running @strong{MySQL} since the thread package +FreeBSD 3.x is recommended for running MySQL since the thread package is much more integrated. The easiest and therefor the preferred way to install is to use the @@ -10897,7 +10897,7 @@ mysql-server and mysql-client ports available on @uref{http://www.freebsd.org}. Using these gives you: @itemize @bullet @item -A working @strong{MySQL} with all optimizations known to work on your version +A working MySQL with all optimizations known to work on your version of FreeBSD enabled. @item @@ -10908,7 +10908,7 @@ Startup scripts installed in /usr/local/etc/rc.d. @item Ability to see which files that are installed with pkg_info -L. And to -remove them all with pkg_delete if you no longer want @strong{MySQL} on that +remove them all with pkg_delete if you no longer want MySQL on that machine. @end itemize @@ -10951,7 +10951,7 @@ appropriate class for this user in the password file if you are not using the default (use: chpass mysqld-user-name). @xref{safe_mysqld, , @code{safe_mysqld}}. -If you get problems with the current date in @strong{MySQL}, setting the +If you get problems with the current date in MySQL, setting the @code{TZ} variable will probably help. @xref{Environment variables}. To get a secure and stable system you should only use FreeBSD kernels @@ -10977,7 +10977,7 @@ crash when @code{make} tries to run @code{lint} on C++ files. @node OpenBSD 2.5, OpenBSD 2.8, OpenBSD, BSD Notes @subsubsection OpenBSD 2.5 Notes -On OpenBSD Version 2.5, you can compile @strong{MySQL} with native threads +On OpenBSD Version 2.5, you can compile MySQL with native threads with the following options: @example @@ -10989,7 +10989,7 @@ CFLAGS=-pthread CXXFLAGS=-pthread ./configure --with-mit-threads=no @subsubsection OpenBSD 2.8 Notes Our users have reported that OpenBSD 2.8 has a threading bug which causes -problems with @strong{MySQL}. The OpenBSD Developers have fixed the problem, +problems with MySQL. The OpenBSD Developers have fixed the problem, but as of January 25th, 2001, it's only available in the ``-current'' branch. The symptoms of this threading bug are: slow response, high load, high CPU usage, and crashes. @@ -11008,7 +11008,7 @@ usage, and crashes. @node BSDI2, BSDI3, BSDI, BSD Notes @subsubsection BSD/OS Version 2.x Notes -If you get the following error when compiling @strong{MySQL}, your +If you get the following error when compiling MySQL, your @code{ulimit} value for virtual memory is too low: @example @@ -11026,7 +11026,7 @@ If you are using @code{gcc}, you may also use have to use the @code{--with-low-memory} flag for @code{configure} to be able to compile @file{sql_yacc.cc}. -If you get problems with the current date in @strong{MySQL}, setting the +If you get problems with the current date in MySQL, setting the @code{TZ} variable will probably help. @xref{Environment variables}. @@ -11036,7 +11036,7 @@ If you get problems with the current date in @strong{MySQL}, setting the Upgrade to BSD/OS Version 3.1. If that is not possible, install BSDIpatch M300-038. -Use the following command when configuring @strong{MySQL}: +Use the following command when configuring MySQL: @example shell> env CXX=shlicc++ CC=shlicc2 \ @@ -11075,7 +11075,7 @@ If this doesn't work and you are using @code{bash}, try switching to @subsubsection BSD/OS Version 4.x Notes BSDI Version 4.x has some thread-related bugs. If you want to use -@strong{MySQL} on this, you should install all thread-related patches. At +MySQL on this, you should install all thread-related patches. At least M400-023 should be installed. On some BSDI Version 4.x systems, you may get problems with shared libraries. @@ -11109,14 +11109,14 @@ on BSDI! (Making a symbolic link to another disk is ok). @node Mac OS X Public Beta, Mac OS X Server, Mac OS X, Mac OS X @subsubsection Mac OS X Public Beta -@strong{MySQL} should work without any problems on Mac OS X Public Beta +MySQL should work without any problems on Mac OS X Public Beta (Darwin). You don't need the pthread patches for this OS! @node Mac OS X Server, , Mac OS X Public Beta, Mac OS X @subsubsection Mac OS X Server -Before trying to configure @strong{MySQL} on Mac OS X server you must +Before trying to configure MySQL on Mac OS X server you must first install the pthread package from @uref{http://www.prnet.de/RegEx/mysql.html}. @@ -11159,14 +11159,14 @@ alias mysqladmin '/usr/local/mysql/bin/mysqladmin' @cindex HP-UX, binary distribution @cindex binary distributions, on HP-UX -Some of the binary distributions of @strong{MySQL} for HP-UX is +Some of the binary distributions of MySQL for HP-UX is distributed as an HP depot file and as a tar file. To use the depot file you must be running at least HP-UX 10.x to have access to HP's software depot tools. -The HP version of @strong{MySQL} was compiled on an HP 9000/8xx server +The HP version of MySQL was compiled on an HP 9000/8xx server under HP-UX 10.20, and uses MIT-pthreads. It is known to work well under -this configuration. @strong{MySQL} Version 3.22.26 and newer can also be +this configuration. MySQL Version 3.22.26 and newer can also be built with HP's native thread package. Other configurations that may work: @@ -11232,7 +11232,7 @@ To install the HP-UX tar.gz distribution, you must have a copy of GNU @node HP-UX 10.20, HP-UX 11.x, Binary notes-HP-UX, Other Unix Notes @subsubsection HP-UX Version 10.20 Notes -There are a couple of small problems when compiling @strong{MySQL} on +There are a couple of small problems when compiling MySQL on HP-UX. We recommend that you use @code{gcc} instead of the HP-UX native compiler, because @code{gcc} produces better code! @@ -11250,7 +11250,7 @@ CFLAGS="-DHPUX -I/opt/dce/include" CXXFLAGS="-DHPUX -I/opt/dce/include -felide-c If you are compiling @code{gcc} 2.95 yourself, you should NOT link it with the DCE libraries (@code{libdce.a} or @code{libcma.a}) if you want to compile -@strong{MySQL} with MIT-pthreads. If you mix the DCE and MIT-pthreads +MySQL with MIT-pthreads. If you mix the DCE and MIT-pthreads packages you will get a @code{mysqld} to which you cannot connect. Remove the DCE libraries while you compile @code{gcc} 2.95! @@ -11258,10 +11258,10 @@ the DCE libraries while you compile @code{gcc} 2.95! @node HP-UX 11.x, IBM-AIX, HP-UX 10.20, Other Unix Notes @subsubsection HP-UX Version 11.x Notes -For HP-UX Version 11.x we recommend @strong{MySQL} Version 3.23.15 or later. +For HP-UX Version 11.x we recommend MySQL Version 3.23.15 or later. Because of some critical bugs in the standard HP-UX libraries, you should -install the following patches before trying to run @strong{MySQL} on HP-UX 11.0: +install the following patches before trying to run MySQL on HP-UX 11.0: @example PHKL_22840 Streams cumulative @@ -11311,7 +11311,7 @@ CFLAGS="-fomit-frame-pointer -O3 -fpic" CXX=gcc CXXFLAGS="-felide-constructors - @end example Here is some information that a HP-UX Version 11.x user sent us about compiling -@strong{MySQL} with HP-UX:x compiler: +MySQL with HP-UX:x compiler: @example Environment: @@ -11353,7 +11353,7 @@ supplied the prototype for @code{localtime_r}. But I wanted to catch other bugs without needing to run into them. I wasn't sure where I needed it, so I added it to all flags. @item -The optimization flags used by @strong{MySQL} (-O3) are not recognized by HP's +The optimization flags used by MySQL (-O3) are not recognized by HP's compilers. I did not change the flags. @end itemize @@ -11375,7 +11375,7 @@ to the HP-UX C and C++ compiler. Automatic detection of @code{xlC} is missing from Autoconf, so a @code{configure} command something like this is needed when compiling -@strong{MySQL} (This example uses the IBM compiler): +MySQL (This example uses the IBM compiler): @example export CC="xlc_r -ma -O3 -qstrict -qoptimize=3 -qmaxmem=8192 " @@ -11394,14 +11394,14 @@ export CXXFLAGS=$CFLAGS --enable-large-files @end example -Above are the options used to compile the @strong{MySQL} distribution that +Above are the options used to compile the MySQL distribution that can be found at @uref{http://www-frec.bull.com/}. If you change the @code{-O3} to @code{-O2} in the above configure line, you must also remove the @code{-qstrict} option (this is a limitation in the IBM C compiler). -If you are using @code{gcc} or @code{egcs} to compile @strong{MySQL}, you +If you are using @code{gcc} or @code{egcs} to compile MySQL, you @strong{MUST} use the @code{-fno-exceptions} flag, as the exception handling in @code{gcc}/@code{egcs} is not thread safe! (This is tested with @code{egcs} 1.1.). There are also some known problems with IBM's assembler, @@ -11420,7 +11420,7 @@ CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti" \ The @code{-Wa,-many} is necessary for the compile to be successful. IBM is aware of this problem but is in to hurry to fix it because of the workaround available. We don't know if the @code{-fno-exceptions} is required with -@code{gcc 2.95}, but as @strong{MySQL} doesn't use exceptions and the above +@code{gcc 2.95}, but as MySQL doesn't use exceptions and the above option generates faster code, we recommend that you should always use this option with @code{egcs / gcc}. @@ -11439,9 +11439,9 @@ found at This will give you a machine type and a machine model you can use to determine what type of cpu you have. -If you have problems with signals (@strong{MySQL} dies unexpectedly +If you have problems with signals (MySQL dies unexpectedly under high load) you may have found an OS bug with threads and -signals. In this case you can tell @strong{MySQL} not to use signals by +signals. In this case you can tell MySQL not to use signals by configuring with: @example @@ -11450,7 +11450,7 @@ shell> CFLAGS=-DDONT_USE_THR_ALARM CXX=gcc \ ./configure --prefix=/usr/local/mysql --with-debug --with-low-memory @end example -This doesn't affect the performance of @strong{MySQL}, but has the side +This doesn't affect the performance of MySQL, but has the side effect that you can't kill clients that are ``sleeping'' on a connection with @code{mysqladmin kill} or @code{mysqladmin shutdown}. Instead, the client will die when it issues its next command. @@ -11486,7 +11486,7 @@ extern "C" int initgroups(const char *,int); @node SunOS, Alpha-DEC-UNIX, IBM-AIX, Other Unix Notes @subsubsection SunOS 4 Notes -On SunOS 4, MIT-pthreads is needed to compile @strong{MySQL}, which in turn +On SunOS 4, MIT-pthreads is needed to compile MySQL, which in turn means you will need GNU @code{make}. Some SunOS 4 systems have problems with dynamic libraries and @code{libtool}. @@ -11612,7 +11612,7 @@ On OSF1 V4.0D and compiler "DEC C V5.6-071 on Digital Unix V4.0 (Rev. 878)" the compiler had some strange behavior (undefined @code{asm} symbols). @code{/bin/ld} also appears to be broken (problems with @code{_exit undefined} errors occuring while linking @code{mysqld}). On this system, we -have managed to compile @strong{MySQL} with the following @code{configure} +have managed to compile MySQL with the following @code{configure} line, after replacing @code{/bin/ld} with the version from OSF 4.0C: @example @@ -11645,9 +11645,9 @@ When using @code{gcc}, you can also try running @code{configure} like this: shell> CFLAGS=-D_PTHREAD_USE_D4 CXX=gcc CXXFLAGS=-O3 ./configure .... @end example -If you have problems with signals (@strong{MySQL} dies unexpectedly +If you have problems with signals (MySQL dies unexpectedly under high load), you may have found an OS bug with threads and -signals. In this case you can tell @strong{MySQL} not to use signals by +signals. In this case you can tell MySQL not to use signals by configuring with: @example @@ -11656,7 +11656,7 @@ shell> CFLAGS=-DDONT_USE_THR_ALARM \ ./configure ... @end example -This doesn't affect the performance of @strong{MySQL}, but has the side +This doesn't affect the performance of MySQL, but has the side effect that you can't kill clients that are ``sleeping'' on a connection with @code{mysqladmin kill} or @code{mysqladmin shutdown}. Instead, the client will die when it issues its next command. @@ -11715,7 +11715,7 @@ If you get the something like the following error when compiling "/usr/include/curses.h", line 82: error(1084): invalid combination of type @end example -Type the following in the top-level directory of your @strong{MySQL} source +Type the following in the top-level directory of your MySQL source tree: @example @@ -11757,7 +11757,7 @@ The current port is tested only on a ``sco3.2v5.0.4'' and port to ``sco 3.2v4.2''. For the moment the recommended compiler on OpenServer is gcc 2.95.2. With this -you should be able to compile @strong{MySQL} with just: +you should be able to compile MySQL with just: @example CC=gcc CXX=gcc ./configure ... (options) @@ -11815,7 +11815,7 @@ install}. @end enumerate @item -Remember to use GNU @code{make} when making @strong{MySQL}. +Remember to use GNU @code{make} when making MySQL. @item If you don't start @code{safe_mysqld} as root, you probably will get only the @@ -11848,14 +11848,14 @@ You may get some problems with some include files. In this case, you can find new SCO-specific include files at @uref{http://www.mysql.com/Downloads/SCO/SCO-3.2v4.2-includes.tar.gz}. You should unpack this file in the @file{include} directory of your -@strong{MySQL} source tree. +MySQL source tree. @end enumerate SCO development notes: @itemize @bullet @item -@strong{MySQL} should automatically detect FSU Pthreads and link @code{mysqld} +MySQL should automatically detect FSU Pthreads and link @code{mysqld} with @code{-lgthreads -lsocket -lgthreads}. @item @@ -11910,10 +11910,10 @@ Perl works best when compiled with @code{cc}. @node SCO Unixware, , SCO, Other Unix Notes @subsubsection SCO Unixware Version 7.0 Notes -You must use a version of @strong{MySQL} at least as recent as Version 3.22.13 +You must use a version of MySQL at least as recent as Version 3.22.13 because that version fixes some portability problems under Unixware. -We have been able to compile @strong{MySQL} with the following @code{configure} +We have been able to compile MySQL with the following @code{configure} command on Unixware Version 7.0.1: @example @@ -11931,7 +11931,7 @@ If you want to use @code{gcc}, you must use @code{gcc} 2.95.2 or newer. @node OS/2, BeOS, Other Unix Notes, Operating System Specific Notes @subsection OS/2 Notes -@strong{MySQL} uses quite a few open files. Because of this, you should add +MySQL uses quite a few open files. Because of this, you should add something like the following to your @file{CONFIG.SYS} file: @example @@ -11944,9 +11944,9 @@ If you don't do this, you will probably run into the following error: File 'xxxx' not found (Errcode: 24) @end example -When using @strong{MySQL} with OS/2 Warp 3, FixPack 29 or above is +When using MySQL with OS/2 Warp 3, FixPack 29 or above is required. With OS/2 Warp 4, FixPack 4 or above is required. This is a -requirement of the Pthreads library. @strong{MySQL} must be installed +requirement of the Pthreads library. MySQL must be installed in a partition that supports long filenames such as HPFS, FAT32, etc. The @file{INSTALL.CMD} script must be run from OS/2's own @file{CMD.EXE} @@ -11954,8 +11954,8 @@ and may not work with replacement shells such as @file{4OS2.EXE}. The @file{scripts/mysql-install-db} script has been renamed. It is now called @file{install.cmd} and is a REXX script, which will set up the default -@strong{MySQL} security settings and create the WorkPlace Shell icons -for @strong{MySQL}. +MySQL security settings and create the WorkPlace Shell icons +for MySQL. Dynamic module support is compiled in but not fully tested. Dynamic modules should be compiled using the Pthreads run-time library. @@ -11989,7 +11989,7 @@ mysql> CREATE FUNCTION metaphon RETURNS STRING SONAME "example"; @node BeOS, Novell Netware, OS/2, Operating System Specific Notes @subsection BeOS Notes -We are really interested in getting @strong{MySQL} to work on BeOS, but +We are really interested in getting MySQL to work on BeOS, but unfortunately we don't have any person who knows BeOS or has time to do a port. @@ -11997,14 +11997,14 @@ We are interested in finding someone to do a port, and we will help them with any technical questions they may have while doing the port. We have previously talked with some BeOS developers that have said that -@strong{MySQL} is 80% ported to BeOS, but we haven't heard from them +MySQL is 80% ported to BeOS, but we haven't heard from them in a while. @node Novell Netware, , BeOS, Operating System Specific Notes @subsection Novell Netware Notes -We are really interested in getting @strong{MySQL} to work on Netware, but +We are really interested in getting MySQL to work on Netware, but unfortunately we don't have any person who knows Netware or has time to do a port. @@ -12033,11 +12033,11 @@ with any technical questions they may have while doing the port. * Apache:: @end menu -This chapter provides a tutorial introduction to @strong{MySQL} by showing +This chapter provides a tutorial introduction to MySQL by showing how to use the @code{mysql} client program to create and use a simple database. @code{mysql} (sometimes referred to as the ``terminal monitor'' or just ``monitor'') is an interactive program that allows you to connect to a -@strong{MySQL} server, run queries, and view the results. @code{mysql} may +MySQL server, run queries, and view the results. @code{mysql} may also be used in batch mode: you place your queries in a file beforehand, then tell @code{mysql} to execute the contents of the file. Both ways of using @code{mysql} are covered here. @@ -12050,8 +12050,8 @@ shell> mysql --help @end example This chapter assumes that @code{mysql} is installed on your machine and that -a @strong{MySQL} server is available to which you can connect. If this is -not true, contact your @strong{MySQL} administrator. (If @emph{you} are the +a MySQL server is available to which you can connect. If this is +not true, contact your MySQL administrator. (If @emph{you} are the administrator, you will need to consult other sections of this manual.) This chapter describes the entire process of setting up and using a @@ -12072,7 +12072,7 @@ information on the topics covered here. @cindex server, connecting @cindex server, disconnecting -To connect to the server, you'll usually need to provide a @strong{MySQL} +To connect to the server, you'll usually need to provide a MySQL user name when you invoke @code{mysql} and, most likely, a password. If the server runs on a machine other than the one where you log in, you'll also need to specify a hostname. Contact your administrator to find out what @@ -12105,7 +12105,7 @@ mysql> The prompt tells you that @code{mysql} is ready for you to enter commands. -Some @strong{MySQL} installations allow users to connect as the anonymous +Some MySQL installations allow users to connect as the anonymous (unnamed) user to the server running on the local host. If this is the case on your machine, you should be able to connect to that server by invoking @code{mysql} without any options: @@ -12310,7 +12310,7 @@ mysql> SELECT USER() @end example The @code{'>} and @code{">} prompts occur during string collection. -In @strong{MySQL}, you can write strings surrounded by either @samp{'} +In MySQL, you can write strings surrounded by either @samp{'} or @samp{"} characters (for example, @code{'hello'} or @code{"goodbye"}), and @code{mysql} lets you enter strings that span multiple lines. When you see a @code{'>} or @code{">} prompt, it means that you've entered a line @@ -12395,7 +12395,7 @@ to think of real-world situations in which a similar type of database might be used. For example, a database like this could be used by a farmer to keep track of livestock, or by a veterinarian to keep track of patient records. A menagerie distribution containing some of the queries and sample data used -in the following sections can be obtained from the @strong{MySQL} Web site. +in the following sections can be obtained from the MySQL Web site. It's available in either @uref{http://www.mysql.com/Downloads/Contrib/Examples/menagerie.tar.gz,compressed @code{tar} format} or @@ -12436,7 +12436,7 @@ a single line. You can use the @code{test} database (if you have access to it) for the examples that follow, but anything you create in that database can be removed by anyone else with access to it. For this reason, you should -probably ask your @strong{MySQL} administrator for permission to use a +probably ask your MySQL administrator for permission to use a database of your own. Suppose you want to call yours @code{menagerie}. The administrator needs to execute a command like this: @@ -12444,7 +12444,7 @@ administrator needs to execute a command like this: mysql> GRANT ALL ON menagerie.* TO your_mysql_name; @end example -where @code{your_mysql_name} is the @strong{MySQL} user name assigned to +where @code{your_mysql_name} is the MySQL user name assigned to you. @@ -12526,7 +12526,7 @@ How about age? That might be of interest, but it's not a good thing to store in a database. Age changes as time passes, which means you'd have to update your records often. Instead, it's better to store a fixed value such as date of birth. Then, whenever you need age, you can calculate it as the -difference between the current date and the birth date. @strong{MySQL} +difference between the current date and the birth date. MySQL provides functions for doing date arithmetic, so this is not difficult. Storing birth date rather than age has other advantages, too: @@ -12560,7 +12560,7 @@ mysql> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20), lengths of those columns need not all be the same, and need not be @code{20}. You can pick any length from @code{1} to @code{255}, whatever seems most reasonable to you. (If you make a poor choice and it turns -out later that you need a longer field, @strong{MySQL} provides an +out later that you need a longer field, MySQL provides an @code{ALTER TABLE} statement.) Animal sex can be represented in a variety of ways, for example, @code{"m"} @@ -12614,7 +12614,7 @@ After creating your table, you need to populate it. The @code{LOAD DATA} and @code{INSERT} statements are useful for this. Suppose your pet records can be described as shown below. -(Observe that @strong{MySQL} expects dates in @code{YYYY-MM-DD} format; +(Observe that MySQL expects dates in @code{YYYY-MM-DD} format; this may be different than what you are used to.) @multitable @columnfractions .16 .16 .16 .16 .16 .16 @@ -13022,7 +13022,7 @@ ascending order. @cindex extracting, dates @cindex age, calculating -@strong{MySQL} provides several functions that you can use to perform +MySQL provides several functions that you can use to perform calculations on dates, for example, to calculate ages or extract parts of dates. @@ -13119,7 +13119,7 @@ because @code{NULL} is a special value. This is explained later. What if you want to know which animals have birthdays next month? For this type of calculation, year and day are irrelevant; you simply want to extract -the month part of the @code{birth} column. @strong{MySQL} provides several +the month part of the @code{birth} column. MySQL provides several date-part extraction functions, such as @code{YEAR()}, @code{MONTH()}, and @code{DAYOFMONTH()}. @code{MONTH()} is the appropriate function here. To see how it works, run a simple query that displays the value of both @@ -13221,7 +13221,7 @@ mysql> SELECT 1 IS NULL, 1 IS NOT NULL; +-----------+---------------+ @end example -In @strong{MySQL}, 0 or @code{NULL} means false and anything else means true. +In MySQL, 0 or @code{NULL} means false and anything else means true. The default truth value from a boolean operation is 1. This special treatment of @code{NULL} is why, in the previous section, it @@ -13236,13 +13236,13 @@ was necessary to determine which animals are no longer alive using @cindex matching, patterns @cindex expressions, extended -@strong{MySQL} provides standard SQL pattern matching as well as a form of +MySQL provides standard SQL pattern matching as well as a form of pattern matching based on extended regular expressions similar to those used by Unix utilities such as @code{vi}, @code{grep}, and @code{sed}. SQL pattern matching allows you to use @samp{_} to match any single character and @samp{%} to match an arbitrary number of characters (including -zero characters). In @strong{MySQL}, SQL patterns are case insensitive by +zero characters). In MySQL, SQL patterns are case insensitive by default. Some examples are shown below. Note that you do not use @code{=} or @code{!=} when you use SQL patterns; use the @code{LIKE} or @code{NOT LIKE} comparison operators instead. @@ -13297,7 +13297,7 @@ mysql> SELECT * FROM pet WHERE name LIKE "_____"; +-------+--------+---------+------+------------+-------+ @end example -The other type of pattern matching provided by @strong{MySQL} uses extended +The other type of pattern matching provided by MySQL uses extended regular expressions. When you test for a match for this type of pattern, use the @code{REGEXP} and @code{NOT REGEXP} operators (or @code{RLIKE} and @code{NOT RLIKE}, which are synonyms). @@ -13352,7 +13352,7 @@ mysql> SELECT * FROM pet WHERE name REGEXP "^b"; +--------+--------+---------+------+------------+------------+ @end example -Prior to @strong{MySQL} Version 3.23.4, @code{REGEXP} is case sensitive, +Prior to MySQL Version 3.23.4, @code{REGEXP} is case sensitive, and the previous query will return no rows. To match either lowercase or uppercase @samp{b}, use this query instead: @@ -13360,7 +13360,7 @@ uppercase @samp{b}, use this query instead: mysql> SELECT * FROM pet WHERE name REGEXP "^[bB]"; @end example -From @strong{MySQL} 3.23.4 on, to force a @code{REGEXP} comparison to +From MySQL 3.23.4 on, to force a @code{REGEXP} comparison to be case sensitive, use the @code{BINARY} keyword to make one of the strings a binary string. This query will match only lowercase @samp{b} at the beginning of a name: @@ -13698,7 +13698,7 @@ each column reference is associated with. @findex DESCRIBE What if you forget the name of a database or table, or what the structure of -a given table is (for example, what its columns are called)? @strong{MySQL} +a given table is (for example, what its columns are called)? MySQL addresses this problem through several statements that provide information about the databases and tables it supports. @@ -13763,7 +13763,7 @@ If you have indexes on a table, @cindex examples, queries Here are examples of how to solve some common problems with -@strong{MySQL}. +MySQL. Some of the examples use the table @code{shop} to hold the price of each article (item number) for certain traders (dealers). Supposing that each @@ -13776,7 +13776,7 @@ Start the command line tool @code{mysql} and select a database: mysql your-database-name @end example -(In most @strong{MySQL} installations, you can use the database-name 'test'). +(In most MySQL installations, you can use the database-name 'test'). You can create the example table as: @@ -13851,7 +13851,7 @@ FROM shop WHERE price=(SELECT MAX(price) FROM shop) @end example -In @strong{MySQL} (which does not yet have sub-selects), just do it in +In MySQL (which does not yet have sub-selects), just do it in two steps: @enumerate @@ -13867,7 +13867,7 @@ WHERE price=19.95 @end enumerate Another solution is to sort all rows descending by price and only -get the first row using the @strong{MySQL} specific @code{LIMIT} clause: +get the first row using the MySQL specific @code{LIMIT} clause: @example SELECT article, dealer, price @@ -13916,7 +13916,7 @@ WHERE price=(SELECT MAX(s2.price) WHERE s1.article = s2.article); @end example -In @strong{MySQL} it's best do it in several steps: +In MySQL it's best do it in several steps: @enumerate @item @@ -13976,7 +13976,7 @@ splitting of the concatenated column in the client. @node example-user-variables, example-Foreign keys, example-Maximum-column-group-row, Examples @subsection Using user variables -You can use @strong{MySQL} user variables to remember results without +You can use MySQL user variables to remember results without having to store them in a temporary variables in the client. @xref{Variables}. @@ -14004,7 +14004,7 @@ select * from shop where price=@@min_price or price=@@max_price; You don't need foreign keys to join 2 tables. -The only thing @strong{MySQL} doesn't do is @code{CHECK} to make sure that +The only thing MySQL doesn't do is @code{CHECK} to make sure that the keys you use really exist in the table(s) you're referencing and it doesn't automatically delete rows from table with a foreign key definition. If you use your keys like normal, it'll work just fine: @@ -14087,7 +14087,7 @@ SELECT s.* FROM persons p, shirts s @cindex searching, two keys @cindex keys, searching on two -@strong{MySQL} doesn't yet optimize when you search on two different +MySQL doesn't yet optimize when you search on two different keys combined with @code{OR} (Searching on one key with different @code{OR} parts is optimized quite good): @@ -14279,9 +14279,9 @@ More information about Twin studies can be found at: @end example The latter part of the project is administered with a Web interface -written using Perl and @strong{MySQL}. +written using Perl and MySQL. -Each night all data from the interviews are moved into a @strong{MySQL} +Each night all data from the interviews are moved into a MySQL database. @menu @@ -14377,7 +14377,7 @@ Some explanations: @table @asis @item @code{concat(p1.id, p1.tvab) + 0 as tvid} We want to sort on the concatenated @code{id} and @code{tvab} in -numerical order. Adding @code{0} to the result causes @strong{MySQL} to +numerical order. Adding @code{0} to the result causes MySQL to treat the result as a number. @item column @code{id} This identifies a pair of twins. It is a key in all tables. @@ -14386,7 +14386,7 @@ This identifies a twin in a pair. It has a value of @code{1} or @code{2}. @item column @code{ptvab} This is an inverse of @code{tvab}. When @code{tvab} is @code{1} this is @code{2}, and vice versa. It exists to save typing and to make it easier for -@strong{MySQL} to optimize the query. +MySQL to optimize the query. @end table This query demonstrates, among other things, how to do lookups on a @@ -14452,11 +14452,11 @@ group by @cindex Apache The Contrib section includes programs that let you authenticate your -users from a @strong{MySQL} database and also let you log your log files -into a @strong{MySQL} table. @xref{Contrib}. +users from a MySQL database and also let you log your log files +into a MySQL table. @xref{Contrib}. You can change the Apache logging format to be easily readable by -@strong{MySQL} by putting the following into the Apache configuration file: +MySQL by putting the following into the Apache configuration file: @example LogFormat \ @@ -14464,7 +14464,7 @@ LogFormat \ \"%U\",\"%@{Referer@}i\",\"%@{User-Agent@}i\"" @end example -In @strong{MySQL} you can do something like this: +In MySQL you can do something like this: @example LOAD DATA INFILE '/local/access_log' INTO TABLE table_name @@ -14523,7 +14523,7 @@ this. @item --big-tables Allow big result sets by saving all temporary sets on file. It solves most 'table full' errors, but also slows down the queries where -in-memory tables would suffice. Since Version 3.23.2, @strong{MySQL} is +in-memory tables would suffice. Since Version 3.23.2, MySQL is able to solve it automatically by using memory for small temporary tables and switching to disk tables where necessary. @@ -14553,7 +14553,7 @@ Set the default character set. @xref{Character sets}. Set the default table type for tables. @xref{Table types}. @item --debug[...]= -If @strong{MySQL} is configured with @code{--with-debug}, you can use this +If MySQL is configured with @code{--with-debug}, you can use this option to get a trace file of what @code{mysqld} is doing. @xref{Making trace files}. @@ -14572,7 +14572,7 @@ mysqld server; One should not use this option if one doesn't know exactly what it does! @item --flush -Flush all changes to disk after each SQL command. Normally @strong{MySQL} +Flush all changes to disk after each SQL command. Normally MySQL only does a write of all changes to disk after each SQL command and lets the operating system handle the syncing to disk. @xref{Crashing}. @@ -14644,7 +14644,7 @@ The following options affects how the repair works. delete blocks. @end multitable -Before a table is automatically repaired, @strong{MySQL} will add a note +Before a table is automatically repaired, MySQL will add a note about this in the error log. If you want to be able to recover from most things without user intervention, you should use the options @code{BACKUP,FORCE}. This will force a repair of a table even if some rows @@ -14702,7 +14702,7 @@ on every connect instead. @xref{DNS}. @item --skip-locking Don't use system locking. To use @code{isamchk} or @code{myisamchk} you must -shut down the server. @xref{Stability}. Note that in @strong{MySQL} Version +shut down the server. @xref{Stability}. Note that in MySQL Version 3.23 you can use @code{REPAIR} and @code{CHECK} to repair/check @code{MyISAM} tables. @@ -14724,7 +14724,7 @@ Don't delete or rename files that a symlinked file in the data directory points to. @item --skip-safemalloc -If @strong{MySQL} is configured with @code{--with-debug=full}, all programs +If MySQL is configured with @code{--with-debug=full}, all programs will check the memory for overruns for every memory allocation and memory freeing. As this checking is very slow, you can avoid this, when you don't need memory checking, by using this option. @@ -14781,10 +14781,10 @@ Print out warnings like @code{Aborted connection...} to the @code{.err} file. @cindex creating, default startup options @cindex startup options, default -@strong{MySQL} can, since Version 3.22, read default startup options for the +MySQL can, since Version 3.22, read default startup options for the server and for clients from option files. -@strong{MySQL} reads default options from the following files on Unix: +MySQL reads default options from the following files on Unix: @tindex .my.cnf file @multitable @columnfractions .3 .7 @@ -14795,7 +14795,7 @@ server and for clients from option files. @item @code{~/.my.cnf} @tab User-specific options @end multitable -@code{DATADIR} is the @strong{MySQL} data directory (typically +@code{DATADIR} is the MySQL data directory (typically @file{/usr/local/mysql/data} for a binary installation or @file{/usr/local/var} for a source installation). Note that this is the directory that was specified at configuration time, not the one specified @@ -14803,7 +14803,7 @@ with @code{--datadir} when @code{mysqld} starts up! (@code{--datadir} has no effect on where the server looks for option files, because it looks for them before it processes any command-line arguments.) -@strong{MySQL} reads default options from the following files on Windows: +MySQL reads default options from the following files on Windows: @multitable @columnfractions .3 .7 @item @strong{Filename} @tab @strong{Purpose} @@ -14814,10 +14814,10 @@ before it processes any command-line arguments.) Note that on Windows, you should specify all paths with @code{/} instead of @code{\}. If you use @code{\}, you need to specify this twice, as -@code{\} is the escape character in @strong{MySQL}. +@code{\} is the escape character in MySQL. @cindex Environment variables -@strong{MySQL} tries to read option files in the order listed above. If +MySQL tries to read option files in the order listed above. If multiple option files exist, an option specified in a file read later takes precedence over the same option specified in a file read earlier. Options specified on the command line take precedence over options specified in any @@ -14856,7 +14856,7 @@ This syntax must be used to set a @code{mysqld} variable. @end table The @code{client} group allows you to specify options that apply to all -@strong{MySQL} clients (not @code{mysqld}). This is the perfect group to use +MySQL clients (not @code{mysqld}). This is the perfect group to use to specify the password you use to connect to the server. (But make sure the option file is readable and writable only by yourself.) @@ -14902,13 +14902,13 @@ interactive-timeout If you have a source distribution, you will find sample configuration files named @file{my-xxxx.cnf} in the @file{support-files} directory. If you have a binary distribution, look in the @file{DIR/support-files} -directory, where @code{DIR} is the pathname to the @strong{MySQL} +directory, where @code{DIR} is the pathname to the MySQL installation directory (typically @file{/usr/local/mysql}). Currently there are sample configuration files for small, medium, large, and very large systems. You can copy @file{my-xxxx.cnf} to your home directory (rename the copy to @file{.my.cnf}) to experiment with this. -All @strong{MySQL} clients that support option files support the +All MySQL clients that support option files support the following options: @multitable @columnfractions .40 .60 @@ -14928,7 +14928,7 @@ before any command-line arguments. This works nicely for programs that use the last instance of an option that is specified multiple times. If you have an old program that handles multiply-specified options this way but doesn't read option files, you need add only two lines to give it that capability. -Check the source code of any of the standard @strong{MySQL} clients to see +Check the source code of any of the standard MySQL clients to see how to do this. In shell scripts you can use the @file{my_print_defaults} command to parse the @@ -14954,7 +14954,7 @@ The above output contains all options for the groups 'client' and 'mysql'. In some cases you may want to have many different @code{mysqld} daemons (servers) running on the same machine. You may for example want to run -a new version of @strong{MySQL} for testing together with an old version +a new version of MySQL for testing together with an old version that is in production. Another case is when you want to give different users access to different @code{mysqld} servers that they manage themselves. @@ -15014,7 +15014,7 @@ If you want more performance, you can also specify the following differently: @xref{Command-line options}. -If you are installing binary @strong{MySQL} versions (.tar files) and +If you are installing binary MySQL versions (.tar files) and start them with @code{./bin/safe_mysqld} then in most cases the only option you need to add/change is the @code{socket} and @code{port} argument to @code{safe_mysqld}. @@ -15033,10 +15033,10 @@ argument to @code{safe_mysqld}. @cindex running, multiple servers There are circumstances when you might want to run multiple servers on the same -machine. For example, you might want to test a new @strong{MySQL} release +machine. For example, you might want to test a new MySQL release while leaving your existing production setup undisturbed. Or you might be an Internet service provider that wants to provide independent -@strong{MySQL} installations for different customers. +MySQL installations for different customers. If you want to run multiple servers, the easiest way is to compile the servers with different TCP/IP ports and socket files so they are not @@ -15056,9 +15056,9 @@ shell> ./configure --with-tcp-port=port_number \ Here @code{port_number} and @code{file_name} should be different than the default port number and socket file pathname, and the @code{--prefix} value should specify an installation directory different than the one under which -the existing @strong{MySQL} installation is located. +the existing MySQL installation is located. -You can check the socket used by any currently executing @strong{MySQL} server +You can check the socket used by any currently executing MySQL server with this command: @example @@ -15068,11 +15068,11 @@ shell> mysqladmin -h hostname --port=port_number variables Note that if you specify ``@code{localhost}'' as a hostname, @code{mysqladmin} will default to using Unix sockets instead of TCP/IP. -If you have a @strong{MySQL} server running on the port you used, you will +If you have a MySQL server running on the port you used, you will get a list of some of the most important configurable variables in -@strong{MySQL}, including the socket name. +MySQL, including the socket name. -You don't have to recompile a new @strong{MySQL} server just to start with +You don't have to recompile a new MySQL server just to start with a different port and socket. You can change the port and socket to be used by specifying them at run time as options to @code{safe_mysqld}: @@ -15097,7 +15097,7 @@ locking, this may lead to unpleasant surprises! If you want to use another database directory for the second server, you can use the @code{--datadir=path} option to @code{safe_mysqld}. -@strong{NOTE} also that starting several @strong{MySQL} servers +@strong{NOTE} also that starting several MySQL servers (@code{mysqlds}) in different machines and letting them access one data directory over @code{NFS} is generally a @strong{BAD IDEA}! The problem is that the @code{NFS} will become the bottleneck with the speed. It is @@ -15112,7 +15112,7 @@ about the idea. The working solution is to have one computer with an operating system that efficiently handles threads and have several CPUs in it. -When you want to connect to a @strong{MySQL} server that is running with +When you want to connect to a MySQL server that is running with a different port than the port that is compiled into your client, you can use one of the following methods: @@ -15124,11 +15124,11 @@ a Unix socket. @item In your C or Perl programs, you can give the port or socket arguments -when connecting to the @strong{MySQL} server. +when connecting to the MySQL server. @item If your are using the Perl @code{DBD::mysql} module you can read the options -from the @strong{MySQL} option files. @xref{Option files}. +from the MySQL option files. @xref{Option files}. @example $dsn = "DBI:mysql:test;mysql_read_default_group=client;mysql_read_default_file=/usr/local/mysql/data/my.cnf" @@ -15162,17 +15162,17 @@ home directory. @xref{Option files}. @cindex security system @cindex ACLs -@strong{MySQL} has an advanced but non-standard security/privilege +MySQL has an advanced but non-standard security/privilege system. This section describes how it works. @menu * General security:: General security -* Security:: How to make @strong{MySQL} secure against crackers +* Security:: How to make MySQL secure against crackers * Privileges options:: * What Privileges:: What the privilege system does * Privileges:: How the privilege system works -* Privileges provided:: Privileges provided by @strong{MySQL} -* Connecting:: Connecting to the @strong{MySQL} server +* Privileges provided:: Privileges provided by MySQL +* Connecting:: Connecting to the MySQL server * Connection access:: Access control, stage 1: Connection verification * Request access:: Access control, stage 2: Request verification * Access denied:: Causes of @code{Access denied} errors @@ -15182,35 +15182,35 @@ system. This section describes how it works. @node General security, Security, Privilege system, Privilege system @subsection General Security Guidelines -Anyone using @strong{MySQL} on a computer connected to the Internet +Anyone using MySQL on a computer connected to the Internet should read this section to avoid the most common security mistakes. In discussing security, we emphasize the necessity of fully protecting the -entire server host (not simply the @strong{MySQL} server) against all types +entire server host (not simply the MySQL server) against all types of applicable attacks: eavesdropping, altering, playback, and denial of service. We do not cover all aspects of availability and fault tolerance here. -@strong{MySQL} uses security based on Access Control Lists (ACLs) for all +MySQL uses security based on Access Control Lists (ACLs) for all connections, queries, and other operations that a user may attempt to perform. There is also some support for SSL-encrypted connections -between @strong{MySQL} clients and servers. Many of the concepts -discussed here are not specific to @strong{MySQL} at all; the same +between MySQL clients and servers. Many of the concepts +discussed here are not specific to MySQL at all; the same general ideas apply to almost all applications. -When running @strong{MySQL}, follow these guidelines whenever possible: +When running MySQL, follow these guidelines whenever possible: @itemize @bullet @item -DON'T EVER GIVE ANYONE (EXCEPT THE @strong{MySQL} ROOT USER) ACCESS TO THE +DON'T EVER GIVE ANYONE (EXCEPT THE MySQL ROOT USER) ACCESS TO THE @code{user} TABLE IN THE @code{mysql} DATABASE! The encrypted password -is the real password in @strong{MySQL}. If you know the password listed in +is the real password in MySQL. If you know the password listed in the @code{user} table for a given user, you can easily log in as that user if you have access to the host listed for that account. @item -Learn the @strong{MySQL} access privilege system. The @code{GRANT} and -@code{REVOKE} commands are used for controlling access to @strong{MySQL}. Do +Learn the MySQL access privilege system. The @code{GRANT} and +@code{REVOKE} commands are used for controlling access to MySQL. Do not grant any more privileges than necessary. Never grant privileges to all hosts. @@ -15219,9 +15219,9 @@ Checklist: @item Try @code{mysql -u root}. If you are able to connect successfully to the server without being asked for a password, you have problems. Anyone -can connect to your @strong{MySQL} server as the @strong{MySQL} +can connect to your MySQL server as the MySQL @code{root} user with full privileges! -Review the @strong{MySQL} installation instructions, paying particular +Review the MySQL installation instructions, paying particular attention to the item about setting a @code{root} password. @item Use the command @code{SHOW GRANTS} and check to see who has access to @@ -15244,18 +15244,18 @@ a little lamb.'' This is easy to remember and type, but difficult to guess for someone who does not know it. @item Invest in a firewall. This protects you from at least 50% of all types of -exploits in any software. Put @strong{MySQL} behind the firewall or in +exploits in any software. Put MySQL behind the firewall or in a demilitarized zone (DMZ). Checklist: @itemize @minus @item Try to scan your ports from the Internet using a tool such as -@code{nmap}. @strong{MySQL} uses port 3306 by default. This port should +@code{nmap}. MySQL uses port 3306 by default. This port should be inaccessible from untrusted hosts. Another simple way to check whether -or not your @strong{MySQL} port is open is to try the following command +or not your MySQL port is open is to try the following command from some remote machine, where @code{server_host} is the hostname of -your @strong{MySQL} server: +your MySQL server: @example shell> telnet server_host 3306 @@ -15283,7 +15283,7 @@ denial-of-service type attacks can be performed on such databases. The simplest way to protect from this type of attack is to use apostrophes around the numeric constants: @code{SELECT * FROM table WHERE ID='234'} rather than @code{SELECT * FROM table WHERE ID=234}. -@strong{MySQL} automatically converts this string to a number and +MySQL automatically converts this string to a number and strips all non-numeric symbols from it. Checklist: @@ -15293,7 +15293,7 @@ All Web applications: @itemize @bullet @item Try to enter @samp{'} and @samp{"} in all your Web forms. If you get any kind -of @strong{MySQL} error, investigate the problem right away. +of MySQL error, investigate the problem right away. @item Try to modify any dynamic URLs by adding @code{%22} (@samp{"}), @code{%23} (@samp{#}), and @code{%27} (@samp{'}) in the URL. @@ -15304,10 +15304,10 @@ should be safe against this and similar attacks. @item Try to enter characters, spaces, and special symbols instead of numbers in numeric fields. Your application should remove them before passing them to -@strong{MySQL} or your application should generate an error. Passing -unchecked values to @strong{MySQL} is very dangerous! +MySQL or your application should generate an error. Passing +unchecked values to MySQL is very dangerous! @item -Check data sizes before passing them to @strong{MySQL}. +Check data sizes before passing them to MySQL. @item Consider having your application connect to the database using a different user name than the one you use for administrative purposes. Do @@ -15318,15 +15318,15 @@ Users of PHP: @itemize @bullet @item Check out the @code{addslashes()} function. As of PHP 4.0.3, a @code{mysql_escape_string()} function is available -that is based on the function of the same name in the @strong{MySQL} C API. +that is based on the function of the same name in the MySQL C API. @end itemize @item -Users of @strong{MySQL} C API: +Users of MySQL C API: @itemize @bullet @item Check out the @code{mysql_escape_string()} API call. @end itemize @item -Users of @strong{MySQL}++: +Users of MySQL++: @itemize @bullet @item Check out the @code{escape} and @code{quote} modifiers for query streams. @end itemize @@ -15346,12 +15346,12 @@ Users of Java JDBC: Do not transmit plain (unencrypted) data over the Internet. These data are accessible to everyone who has the time and ability to intercept it and use it for their own purposes. Instead, use an encrypted protocol such as SSL or -SSH. @strong{MySQL} supports internal SSL connections as of Version 3.23.9. +SSH. MySQL supports internal SSL connections as of Version 3.23.9. SSH port-forwarding can be used to create an encrypted (and compressed) tunnel for the communication. @item Learn to use the @code{tcpdump} and @code{strings} utilities. For most cases, -you can check whether or not @strong{MySQL} data streams are unencrypted +you can check whether or not MySQL data streams are unencrypted by issuing a command like the following: @example @@ -15371,7 +15371,7 @@ consult with a security expert. @cindex crackers, security against @cindex security, against crackers -When you connect to a @strong{MySQL} server, you normally should use a +When you connect to a MySQL server, you normally should use a password. The password is not transmitted in clear text over the connection, however the encryption algorithm is not very strong, and with some effort a clever attacker can crack the password if he is able @@ -15382,24 +15382,24 @@ communication. All other information is transferred as text that can be read by anyone who is able to watch the connection. If you are concerned about this, -you can use the compressed protocol (in @strong{MySQL} Version 3.22 and above) +you can use the compressed protocol (in MySQL Version 3.22 and above) to make things much harder. To make things even more secure you should use @code{ssh}. You can find an open source @code{ssh} client at @uref{http://www.openssh.org}, and a commercial @code{ssh} client at @uref{http://www.ssh.com}. With this, you can get an encrypted TCP/IP -connection between a @strong{MySQL} server and a @strong{MySQL} client. +connection between a MySQL server and a MySQL client. -To make a @strong{MySQL} system secure, you should strongly consider the +To make a MySQL system secure, you should strongly consider the following suggestions: @itemize @bullet @item -Use passwords for all @strong{MySQL} users. Remember that anyone can log in +Use passwords for all MySQL users. Remember that anyone can log in as any other person as simply as @code{mysql -u other_user db_name} if @code{other_user} has no password. It is common behavior with client/server applications that the client may specify any user name. You can change the password of all users by editing the @code{mysql_install_db} script before -you run it, or only the password for the @strong{MySQL} @code{root} user like +you run it, or only the password for the MySQL @code{root} user like this: @example @@ -15410,7 +15410,7 @@ mysql> FLUSH PRIVILEGES; @end example @item -Don't run the @strong{MySQL} daemon as the Unix @code{root} user. This is +Don't run the MySQL daemon as the Unix @code{root} user. This is very dangerous, because any user with @code{FILE} privileges will be able to create files as @code{root} (for example, @code{~root/.bashrc}). To prevent this, @code{mysqld} will refuse to run as @code{root} unless it @@ -15420,7 +15420,7 @@ is specified directly using a @code{--user=root} option. You can also create a new Unix user @code{mysql} to make everything even more secure. If you run @code{mysqld} as another Unix user, you don't need to change the @code{root} user name in the @code{user} -table, because @strong{MySQL} user names have nothing to do with Unix +table, because MySQL user names have nothing to do with Unix user names. To start @code{mysqld} as another Unix user, add a @code{user} line that specifies the user name to the @code{[mysqld]} group of the @file{/etc/my.cnf} option file or the @file{my.cnf} option file in the @@ -15433,7 +15433,7 @@ user=mysql This will cause the server to start as the designated user whether you start it manually or by using @code{safe_mysqld} or @code{mysql.server}. -For more details, see @ref{Changing MySQL user, , Changing @strong{MySQL} +For more details, see @ref{Changing MySQL user, , Changing MySQL user}. @item @@ -15455,7 +15455,7 @@ see if another user issues an @code{UPDATE user SET password=PASSWORD('not_secure')} query. @code{mysqld} reserves an extra connection for users who have the -@strong{process} privilege, so that a @strong{MySQL} @code{root} user can log +@strong{process} privilege, so that a MySQL @code{root} user can log in and check things even if all normal connections are in use. @item @@ -15540,13 +15540,13 @@ With this option, the @cindex privilege system @cindex passwords, security -The primary function of the @strong{MySQL} privilege system is to +The primary function of the MySQL privilege system is to authenticate a user connecting from a given host, and to associate that user with privileges on a database such as @strong{select}, @strong{insert}, @strong{update} and @strong{delete}. Additional functionality includes the ability to have an anonymous user and -to grant privileges for @strong{MySQL}-specific functions such as @code{LOAD +to grant privileges for MySQL-specific functions such as @code{LOAD DATA INFILE} and administrative operations. @@ -15555,23 +15555,23 @@ DATA INFILE} and administrative operations. @cindex privilege system, described -The @strong{MySQL} privilege system ensures that all users may do exactly the +The MySQL privilege system ensures that all users may do exactly the things that they are supposed to be allowed to do. When you connect to a -@strong{MySQL} server, your identity is determined by @strong{the host from +MySQL server, your identity is determined by @strong{the host from which you connect} and @strong{the user name you specify}. The system grants privileges according to your identity and @strong{what you want to do}. -@strong{MySQL} considers both your hostname and user name in identifying you +MySQL considers both your hostname and user name in identifying you because there is little reason to assume that a given user name belongs to the same person everywhere on the Internet. For example, the user @code{bill} who connects from @code{whitehouse.gov} need not be the same person as the user @code{bill} who connects from @code{microsoft.com}. -@strong{MySQL} handles this by allowing you to distinguish users on different +MySQL handles this by allowing you to distinguish users on different hosts that happen to have the same name: you can grant @code{bill} one set of privileges for connections from @code{whitehouse.gov}, and a different set of privileges for connections from @code{microsoft.com}. -@strong{MySQL} access control involves two stages: +MySQL access control involves two stages: @itemize @bullet @item @@ -15651,7 +15651,7 @@ to which each entry applies. For access-checking purposes, comparisons of @code{Host} values are case insensitive. @code{User}, @code{Password}, @code{Db}, and @code{Table_name} values are case sensitive. -@code{Column_name} values are case insensitive in @strong{MySQL} Version +@code{Column_name} values are case insensitive in MySQL Version 3.22.12 or later. Privilege fields indicate the privileges granted by a table entry, that is, @@ -15747,7 +15747,7 @@ diagnosing problems, see @ref{Access denied}. For advice on security issues, A useful diagnostic tool is the @code{mysqlaccess} script, which Yves Carlier has -provided for the @strong{MySQL} distribution. Invoke @code{mysqlaccess} with +provided for the MySQL distribution. Invoke @code{mysqlaccess} with the @code{--help} option to find out how it works. Note that @code{mysqlaccess} checks access using only the @code{user}, @code{db} and @code{host} tables. It does not check table- or column-level @@ -15762,11 +15762,11 @@ privileges. Information about user privileges is stored in the @code{user}, @code{db}, @code{host}, @code{tables_priv}, and @code{columns_priv} tables in the @code{mysql} database (that is, in the database named @code{mysql}). The -@strong{MySQL} server reads the contents of these tables when it starts up +MySQL server reads the contents of these tables when it starts up and under the circumstances indicated in @ref{Privilege changes}. The names used in this manual to refer to the privileges provided by -@strong{MySQL} are shown below, along with the table column name associated +MySQL are shown below, along with the table column name associated with each privilege in the grant tables and the context in which the privilege applies: @@ -15812,7 +15812,7 @@ databases and tables, or to drop (remove) existing databases and tables. Note that if you grant the @strong{drop} privilege for the @code{mysql} database to a user, that user can drop the database in which the -@strong{MySQL} access privileges are stored! +MySQL access privileges are stored! The @strong{grant} privilege allows you to give to other users those privileges you yourself possess. @@ -15820,7 +15820,7 @@ privileges you yourself possess. The @strong{file} privilege gives you permission to read and write files on the server using the @code{LOAD DATA INFILE} and @code{SELECT ... INTO OUTFILE} statements. Any user to whom this privilege is granted can read or -write any file that the @strong{MySQL} server can read or write. +write any file that the MySQL server can read or write. The remaining privileges are used for administrative operations, which are performed using the @code{mysqladmin} program. The table below shows which @@ -15885,12 +15885,12 @@ Privileges on the @code{mysql} database can be used to change passwords and other access privilege information. (Passwords are stored encrypted, so a malicious user cannot simply read them to know the plain text password). If they can access the @code{mysql.user} password -column, they can use it to log into the @strong{MySQL} server +column, they can use it to log into the MySQL server for the given user. (With sufficient privileges, the same user can replace a password with a different one.) @end itemize -There are some things that you cannot do with the @strong{MySQL} +There are some things that you cannot do with the MySQL privilege system: @itemize @bullet @@ -15912,8 +15912,8 @@ in a database but not to create or drop the database itself. @cindex hostname, default @cindex server, connecting -@strong{MySQL} client programs generally require that you specify connection -parameters when you want to access a @strong{MySQL} server: the host you want +MySQL client programs generally require that you specify connection +parameters when you want to access a MySQL server: the host you want to connect to, your user name, and your password. For example, the @code{mysql} client can be started like this (optional arguments are enclosed between @samp{[} and @samp{]}): @@ -15954,7 +15954,7 @@ shell> mysql -u joe shell> mysql @end example -Other @strong{MySQL} clients behave similarly. +Other MySQL clients behave similarly. On Unix systems, you can specify different default values to be used when you make a connection, so that you need not enter them on the command line each @@ -15985,7 +15985,7 @@ password=your_pass @tindex Environment variable, USER You can specify connection parameters using environment variables. The host can be specified for @code{mysql} using @code{MYSQL_HOST}. The -@strong{MySQL} user name can be specified using @code{USER} (this is for +MySQL user name can be specified using @code{USER} (this is for Windows only). The password can be specified using @code{MYSQL_PWD} (but this is insecure; see the next section). @xref{Environment variables}. @end itemize @@ -15999,7 +15999,7 @@ Windows only). The password can be specified using @code{MYSQL_PWD} @cindex connecting, verification @cindex testing, connection to the server -When you attempt to connect to a @strong{MySQL} server, the server accepts or +When you attempt to connect to a MySQL server, the server accepts or rejects the connection based on your identity and whether or not you can verify your identity by supplying the correct password. If not, the server denies access to you completely. Otherwise, the server accepts the @@ -16012,7 +16012,7 @@ Your identity is based on two pieces of information: The host from which you connect @item -Your @strong{MySQL} user name +Your MySQL user name @end itemize Identity checking is performed using the three @code{user} table scope fields @@ -16042,7 +16042,7 @@ You can find more information about this in the next chapter. @cindex netmask notation, in @code{mysql.user} table @item -As of @strong{MySQL} Version 3.23, for @code{Host} values specified as +As of MySQL Version 3.23, for @code{Host} values specified as IP numbers, you can specify a netmask indicating how many address bits to use for the network number. For example: @@ -16057,7 +16057,7 @@ user_ip & netmask = host_ip. @end example In the above example all IP:s in the interval 192.58.197.0 - -192.58.197.255 can connect to the @strong{MySQL} server. +192.58.197.255 can connect to the MySQL server. @item @cindex anonymous user @@ -16076,12 +16076,12 @@ matches, it means the user must connect without specifying a password. @findex PASSWORD() Non-blank @code{Password} values represent encrypted passwords. -@strong{MySQL} does not store passwords in plaintext form for anyone to +MySQL does not store passwords in plaintext form for anyone to see. Rather, the password supplied by a user who is attempting to connect is encrypted (using the @code{PASSWORD()} function). The encrypted password is then used when the client/server is checking if the password is correct (This is done without the encrypted password -ever traveling over the connection.) Note that from @strong{MySQL}'s +ever traveling over the connection.) Note that from MySQL's point of view the encrypted password is the REAL password, so you should not give anyone access to it! In particular, don't give normal users read access to the tables in the @code{mysql} database! @@ -16106,7 +16106,7 @@ connections: Because you can use IP wild-card values in the @code{Host} field (for example, @code{'144.155.166.%'} to match every host on a subnet), there is the possibility that someone might try to exploit this capability by naming a -host @code{144.155.166.somewhere.com}. To foil such attempts, @strong{MySQL} +host @code{144.155.166.somewhere.com}. To foil such attempts, MySQL disallows matching on hostnames that start with digits and a dot. Thus, if you have a host named something like @code{1.2.foo.com}, its name will never match the @code{Host} column of the grant tables. Only an IP number can @@ -16313,7 +16313,7 @@ by checking the @code{db} and @code{host} tables: @item The server looks in the @code{db} table for a match on the @code{Host}, @code{Db}, and @code{User} fields. The @code{Host} and @code{User} fields are -matched to the connecting user's hostname and @strong{MySQL} user name. The +matched to the connecting user's hostname and MySQL user name. The @code{Db} field is matched to the database the user wants to access. If there is no entry for the @code{Host} and @code{User}, access is denied. @@ -16403,12 +16403,12 @@ actually set up the way you think they are. @subsection Causes of @code{Access denied} Errors If you encounter @code{Access denied} errors when you try to connect to the -@strong{MySQL} server, the list below indicates some courses of +MySQL server, the list below indicates some courses of action you can take to correct the problem: @itemize @bullet @item -After installing @strong{MySQL}, did you run the @code{mysql_install_db} +After installing MySQL, did you run the @code{mysql_install_db} script to set up the initial grant table contents? If not, do so. @xref{Default privileges}. Test the initial privileges by executing this command: @@ -16418,9 +16418,9 @@ shell> mysql -u root test @end example The server should let you connect without error. You should also make sure -you have a file @file{user.MYD} in the @strong{MySQL} database directory. +you have a file @file{user.MYD} in the MySQL database directory. Ordinarily, this is @file{PATH/var/mysql/user.MYD}, where @code{PATH} is the -pathname to the @strong{MySQL} installation root. +pathname to the MySQL installation root. @item After a fresh installation, you should connect to the server and set up @@ -16430,10 +16430,10 @@ your users and their access permissions: shell> mysql -u root mysql @end example -The server should let you connect because the @strong{MySQL} @code{root} user +The server should let you connect because the MySQL @code{root} user has no password initially. That is also a security risk, so setting the @code{root} password is something you should do while you're setting up -your other @strong{MySQL} users. +your other MySQL users. If you try to connect as @code{root} and get this error: @@ -16472,10 +16472,10 @@ shell> mysqladmin --no-defaults -u root ver @item @cindex @code{mysql_fix_privilege_tables} -If you updated an existing @strong{MySQL} installation from a version earlier +If you updated an existing MySQL installation from a version earlier than Version 3.22.11 to Version 3.22.11 or later, did you run the @code{mysql_fix_privilege_tables} script? If not, do so. The structure of -the grant tables changed with @strong{MySQL} Version 3.22.11 when the +the grant tables changed with MySQL Version 3.22.11 when the @code{GRANT} statement became functional. @item @@ -16516,7 +16516,7 @@ mysql> SELECT * FROM user; @end example The result should include an entry with the @code{Host} and @code{User} -columns matching your computer's hostname and your @strong{MySQL} user name. +columns matching your computer's hostname and your MySQL user name. @item The @code{Access denied} error message will tell you who you are trying @@ -16529,7 +16529,7 @@ tried to login without an password. @item If you get the following error when you try to connect from a different host -than the one on which the @strong{MySQL} server is running, then there is no +than the one on which the MySQL server is running, then there is no row in the @code{user} table that matches that host: @example @@ -16540,20 +16540,20 @@ You can fix this by using the command-line tool @code{mysql} (on the server host!) to add a row to the @code{user}, @code{db}, or @code{host} table for the user/hostname combination from which you are trying to connect and then execute @code{mysqladmin flush-privileges}. If you are -not running @strong{MySQL} Version 3.22 and you don't know the IP number or +not running MySQL Version 3.22 and you don't know the IP number or hostname of the machine from which you are connecting, you should put an entry with @code{'%'} as the @code{Host} column value in the @code{user} table and restart @code{mysqld} with the @code{--log} option on the server machine. After trying to connect from the client machine, the -information in the @strong{MySQL} log will indicate how you really did +information in the MySQL log will indicate how you really did connect. (Then replace the @code{'%'} in the @code{user} table entry with the actual hostname that shows up in the log. Otherwise, you'll have a system that is insecure.) Another reason for this error on Linux is that you are using a binary -@strong{MySQL} version that is compiled with a different glibc version +MySQL version that is compiled with a different glibc version than the one you are using. In this case you should either upgrade your -OS/glibc or download the source @strong{MySQL} version and compile this +OS/glibc or download the source MySQL version and compile this yourself. A source RPM is normally trivial to compile and install, so this isn't a big problem. @@ -16566,7 +16566,7 @@ shell> mysqladmin -u root -pxxxx -h some-hostname ver Access denied for user: 'root@' (Using password: YES) @end example -This means that @strong{MySQL} got some error when trying to resolve the +This means that MySQL got some error when trying to resolve the IP to a hostname. In this case you can execute @code{mysqladmin flush-hosts} to reset the internal DNS cache. @xref{DNS}. @@ -16577,7 +16577,7 @@ Some permanent solutions are: Try to find out what is wrong with your DNS server and fix this. @item -Specify IPs instead of hostnames in the @strong{MySQL} privilege tables. +Specify IPs instead of hostnames in the MySQL privilege tables. @item Start @code{mysqld} with @code{--skip-name-resolve}. @@ -16600,7 +16600,7 @@ for your host in the @code{user} table. A common problem here is that the @code{Host} value in the user table entry specifies an unqualified hostname, but your system's name resolution routines return a fully qualified domain name (or vice-versa). For example, if you have an entry with host -@code{'tcx'} in the @code{user} table, but your DNS tells @strong{MySQL} that +@code{'tcx'} in the @code{user} table, but your DNS tells MySQL that your hostname is @code{'tcx.subnet.se'}, the entry will not work. Try adding an entry to the @code{user} table that contains the IP number of your host as the @code{Host} column value. (Alternatively, you could add an entry to the @@ -16661,7 +16661,7 @@ in configuration files or environment variables. @xref{Environment variables}. If a client seems to be sending the wrong default connection parameters when you don't specify them on the command line, check your environment and the @file{.my.cnf} file in your home -directory. You might also check the system-wide @strong{MySQL} +directory. You might also check the system-wide MySQL configuration files, though it is far less likely that client connection parameters will be specified there. @xref{Option files}. If you get @code{Access denied} when you run a client without any options, make @@ -16686,12 +16686,12 @@ connect to the server with @code{mysql -u user_name db_name} or @code{mysql @code{mysql} client, there is a problem with your program and not with the access privileges. (Note that there is no space between @code{-p} and the password; you can also use the @code{--password=your_pass} syntax to specify -the password. If you use the @code{-p} option alone, @strong{MySQL} will +the password. If you use the @code{-p} option alone, MySQL will prompt you for the password.) @item For testing, start the @code{mysqld} daemon with the -@code{--skip-grant-tables} option. Then you can change the @strong{MySQL} +@code{--skip-grant-tables} option. Then you can change the MySQL grant tables and use the @code{mysqlaccess} script to check whether or not your modifications have the desired effect. When you are satisfied with your changes, execute @code{mysqladmin flush-privileges} to tell the @code{mysqld} @@ -16707,9 +16707,9 @@ user information about attempted connections, as well as information about each command issued. @xref{Making trace files}. @item -If you have any other problems with the @strong{MySQL} grant tables and +If you have any other problems with the MySQL grant tables and feel you must post the problem to the mailing list, always provide a -dump of the @strong{MySQL} grant tables. You can dump the tables with +dump of the MySQL grant tables. You can dump the tables with the @code{mysqldump mysql} command. As always, post your problem using the @code{mysqlbug} script. @xref{Bug reports}. In some cases you may need to restart @code{mysqld} with @code{--skip-grant-tables} to run @@ -16755,11 +16755,11 @@ REVOKE priv_type [(column_list)] [, priv_type [(column_list)] ...] FROM user_name [, user_name ...] @end example -@code{GRANT} is implemented in @strong{MySQL} Version 3.22.11 or later. For -earlier @strong{MySQL} versions, the @code{GRANT} statement does nothing. +@code{GRANT} is implemented in MySQL Version 3.22.11 or later. For +earlier MySQL versions, the @code{GRANT} statement does nothing. The @code{GRANT} and @code{REVOKE} commands allow system administrators -to create users and grant and revoke rights to @strong{MySQL} users at +to create users and grant and revoke rights to MySQL users at four privilege levels: @table @strong @@ -16820,7 +16820,7 @@ that database. (@strong{WARNING:} If you specify @code{ON *} and you @emph{don't} have a current database, you will affect the global privileges!) In order to accommodate granting rights to users from arbitrary hosts, -@strong{MySQL} supports specifying the @code{user_name} value in the form +MySQL supports specifying the @code{user_name} value in the form @code{user@@host}. If you want to specify a @code{user} string containing special characters (such as @samp{-}), or a @code{host} string containing special characters or wild-card characters (such as @samp{%}), you @@ -16832,11 +16832,11 @@ You can specify wild cards in the hostname. For example, for any host in the @code{144.155.166} class C subnet. The simple form @code{user} is a synonym for @code{user@@"%"}. -@strong{NOTE:} If you allow anonymous users to connect to the @strong{MySQL} +@strong{NOTE:} If you allow anonymous users to connect to the MySQL server (which is the default), you should also add all local users as @code{user@@localhost} because otherwise the anonymous user entry for the local host in the @code{mysql.user} table will be used when the user tries to -log into the @strong{MySQL} server from the local machine! Anonymous users +log into the MySQL server from the local machine! Anonymous users are defined by inserting entries with @code{User=''} into the @code{mysql.user} table. You can verify if this applies to you by executing this query: @@ -16876,7 +16876,7 @@ create @code{user} table entries, but @code{REVOKE} will not remove them; you must do that explicitly using @code{DELETE}. @cindex passwords, setting -In @strong{MySQL} Version 3.22.12 or later, +In MySQL Version 3.22.12 or later, if a new user is created or if you have global grant privileges, the user's password will be set to the password specified by the @code{IDENTIFIED BY} clause, if one is given. If the user already had a password, it is replaced @@ -16921,7 +16921,7 @@ tables! Note that if you are using table or column privileges for even one user, the server examines table and column privileges for all users and this will slow -down @strong{MySQL} a bit. +down MySQL a bit. When @code{mysqld} starts, all privileges are read into memory. Database, table, and column privileges take effect at once, and @@ -16935,28 +16935,28 @@ tables. @xref{Privilege changes}. @cindex ANSI SQL, differences from -The biggest differences between the ANSI SQL and @strong{MySQL} versions of +The biggest differences between the ANSI SQL and MySQL versions of @code{GRANT} are: @itemize @bullet @item -In @strong{MySQL} privileges are given for an username + hostname combination +In MySQL privileges are given for an username + hostname combination and not only for an username. @item ANSI SQL doesn't have global or database-level privileges, and ANSI SQL -doesn't support all privilege types that @strong{MySQL} supports. -@strong{MySQL} doesn't support the ANSI SQL @code{TRIGGER}, @code{EXECUTE} or +doesn't support all privilege types that MySQL supports. +MySQL doesn't support the ANSI SQL @code{TRIGGER}, @code{EXECUTE} or @code{UNDER} privileges. @item ANSI SQL privileges are structured in a hierarchal manner. If you remove an user, all privileges the user has granted are revoked. In -@strong{MySQL} the granted privileges are not automatically revoked, but +MySQL the granted privileges are not automatically revoked, but you have to revoke these yourself if needed. @item -If you in @strong{MySQL} have the @code{INSERT} grant on only part of the +If you in MySQL have the @code{INSERT} grant on only part of the columns in a table, you can execute @code{INSERT} statements on the table; The columns for which you don't have the @code{INSERT} privilege will set to their default values. ANSI SQL requires you to have the @@ -16965,9 +16965,9 @@ will set to their default values. ANSI SQL requires you to have the @item When you drop a table in ANSI SQL, all privileges for the table are revoked. If you revoke a privilege in ANSI SQL, all privileges that were granted based -on this privilege are also revoked. In @strong{MySQL}, privileges can be +on this privilege are also revoked. In MySQL, privileges can be dropped only with explicit @code{REVOKE} commands or by manipulating the -@strong{MySQL} grant tables. +MySQL grant tables. @end itemize @@ -16978,42 +16978,42 @@ dropped only with explicit @code{REVOKE} commands or by manipulating the @cindex passwords, for users There are several distinctions between the way user names and passwords are -used by @strong{MySQL} and the way they are used by Unix or Windows: +used by MySQL and the way they are used by Unix or Windows: @itemize @bullet @item -User names, as used by @strong{MySQL} for authentication purposes, have +User names, as used by MySQL for authentication purposes, have nothing to do with Unix user names (login names) or Windows user names. Most -@strong{MySQL} clients by default try to log in using the current Unix user -name as the @strong{MySQL} user name, but that is for convenience only. +MySQL clients by default try to log in using the current Unix user +name as the MySQL user name, but that is for convenience only. Client programs allow a different name to be specified with the @code{-u} or @code{--user} options. This means that you can't make a database secure in -any way unless all @strong{MySQL} user names have passwords. Anyone may +any way unless all MySQL user names have passwords. Anyone may attempt to connect to the server using any name, and they will succeed if they specify any name that doesn't have a password. @item -@strong{MySQL} user names can be up to 16 characters long; Unix user names +MySQL user names can be up to 16 characters long; Unix user names typically are limited to 8 characters. @item -@strong{MySQL} passwords have nothing to do with Unix passwords. There is no +MySQL passwords have nothing to do with Unix passwords. There is no necessary connection between the password you use to log in to a Unix machine and the password you use to access a database on that machine. @item -@strong{MySQL} encrypts passwords using a different algorithm than the +MySQL encrypts passwords using a different algorithm than the one used during the Unix login process. See the descriptions of the @code{PASSWORD()} and @code{ENCRYPT()} functions in @ref{Miscellaneous functions}. Note that even if the password is stored 'scrambled', and knowing your 'scrambled' password is enough to be able to connect to -the @strong{MySQL} server! +the MySQL server! @end itemize -@strong{MySQL} users and they privileges are normally created with the +MySQL users and they privileges are normally created with the @code{GRANT} command. @xref{GRANT}. -When you login to a @strong{MySQL} server with a command line client you +When you login to a MySQL server with a command line client you should specify the password with @code{--password=your-password}. @xref{Connecting}. @@ -17042,9 +17042,9 @@ If you want to use the @code{-p} option to supply a password you should do like mysql -u monty -pguess database_name @end example -On some system the library call that @strong{MySQL} uses to prompt for a +On some system the library call that MySQL uses to prompt for a password will automatically cut the password to 8 characters. Internally -@strong{MySQL} doesn't have any limit for the length of the password. +MySQL doesn't have any limit for the length of the password. @node Privilege changes, Default privileges, User names, User Account Management @@ -17092,7 +17092,7 @@ client connects. @cindex anonymous user @cindex password, root user -After installing @strong{MySQL}, you set up the initial access privileges by +After installing MySQL, you set up the initial access privileges by running @code{scripts/mysql_install_db}. @xref{Quick install}. The @code{mysql_install_db} script starts up the @code{mysqld} @@ -17101,7 +17101,7 @@ of privileges: @itemize @bullet @item -The @strong{MySQL} @code{root} user is created as a superuser who can do +The MySQL @code{root} user is created as a superuser who can do anything. Connections must be made from the local host. @strong{NOTE:} @@ -17124,7 +17124,7 @@ Other privileges are denied. For example, normal users can't use @xref{Windows running}. Because your installation is initially wide open, one of the first things you -should do is specify a password for the @strong{MySQL} +should do is specify a password for the MySQL @code{root} user. You can do this as follows (note that you specify the password using the @code{PASSWORD()} function): @@ -17135,7 +17135,7 @@ mysql> UPDATE user SET Password=PASSWORD('new_password') mysql> FLUSH PRIVILEGES; @end example -You can, in @strong{MySQL} Version 3.22 and above, use the @code{SET PASSWORD} +You can, in MySQL Version 3.22 and above, use the @code{SET PASSWORD} statement: @example @@ -17181,9 +17181,9 @@ the database directory, which is listed when you run @code{mysqld --help}.) Then run the @code{mysql_install_db} script, possibly after editing it first to have the privileges you want. -@strong{NOTE:} For @strong{MySQL} versions older than Version 3.22.10, +@strong{NOTE:} For MySQL versions older than Version 3.22.10, you should NOT delete the @file{.frm} files. If you accidentally do this, -you should copy them back from your @strong{MySQL} distribution before +you should copy them back from your MySQL distribution before running @code{mysql_install_db}. @@ -17198,7 +17198,7 @@ running @code{mysql_install_db}. @cindex user privileges, adding You can add users two different ways: by using @code{GRANT} statements -or by manipulating the @strong{MySQL} grant tables directly. The +or by manipulating the MySQL grant tables directly. The preferred method is to use @code{GRANT} statements, because they are more concise and less error-prone. @xref{GRANT}. @@ -17209,7 +17209,7 @@ The examples below show how to use the @code{mysql} client to set up new users. These examples assume that privileges are set up according to the defaults described in the previous section. This means that to make changes, you must be on the same machine where @code{mysqld} is running, you must -connect as the @strong{MySQL} @code{root} user, and the @code{root} user must +connect as the MySQL @code{root} user, and the @code{root} user must have the @strong{insert} privilege for the @code{mysql} database and the @strong{reload} administrative privilege. Also, if you have changed the @code{root} user password, you must specify it for the @code{mysql} commands @@ -17274,7 +17274,7 @@ mysql> INSERT INTO user (Host,User,Password) mysql> FLUSH PRIVILEGES; @end example -Depending on your @strong{MySQL} version, you may have to use a different +Depending on your MySQL version, you may have to use a different number of @code{'Y'} values above (versions prior to Version 3.22.11 had fewer privilege columns). For the @code{admin} user, the more readable extended @code{INSERT} syntax that is available starting with Version 3.22.11 is used. @@ -17315,7 +17315,7 @@ mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP @end example The reason that we do to grant statements for the user 'custom' is that -we want the give the user access to @strong{MySQL} both from the local +we want the give the user access to MySQL both from the local machine with Unix sockets and from the remote machine 'whitehouse.gov' over TCP/IP. @@ -17378,7 +17378,7 @@ mysql> FLUSH PRIVILEGES; You can also use @code{xmysqladmin}, @code{mysql_webadmin}, and even @code{xmysql} to insert, change, and update values in the grant tables. You can find these utilities in the -@uref{http://www.mysql.com/Downloads/Contrib/,Contrib directory of the @strong{MySQL} +@uref{http://www.mysql.com/Downloads/Contrib/,Contrib directory of the MySQL Website}. @@ -17458,7 +17458,7 @@ shell> mysqladmin -u jeffrey password biscuit @strong{NOTE:} @code{PASSWORD()} does not perform password encryption in the same way that Unix passwords are encrypted. You should not assume that if -your Unix password and your @strong{MySQL} password are the same, that +your Unix password and your MySQL password are the same, that @code{PASSWORD()} will result in the same encrypted value as is stored in the Unix password file. @xref{User names}. @@ -17483,7 +17483,7 @@ with your other applications). Use a @code{-pyour_pass} or @code{--password=your_pass} option on the command line. This is convenient but insecure, because your password becomes visible to system status programs (such as @code{ps}) that may be invoked by other -users to display command lines. (@strong{MySQL} clients typically overwrite +users to display command lines. (MySQL clients typically overwrite the command-line argument with zeroes during their initialization sequence, but there is still a brief interval during which the value is visible.) @@ -17561,7 +17561,7 @@ file. @cindex databases, backups @cindex backups -Because @strong{MySQL} tables are stored as files, it is easy to do a +Because MySQL tables are stored as files, it is easy to do a backup. To get a consistent backup, do a @code{LOCK TABLES} on the relevant tables followed by @code{FLUSH TABLES} for the tables. @xref{LOCK TABLES, , @code{LOCK TABLES}}. @@ -17607,7 +17607,7 @@ you executed @code{mysqldump}. If you have to restore something, try to recover your tables using @code{REPAIR TABLE} or @code{myisamchk -r} first. That should work in 99.9% of all cases. If @code{myisamchk} fails, try the following -procedure: (This will only work if you have started @strong{MySQL} with +procedure: (This will only work if you have started MySQL with @code{--log-update}. @xref{Update log}.): @enumerate @@ -17693,7 +17693,7 @@ The command returns a table with the following columns: @item Msg_text @tab The message. @end multitable -Note that @code{BACKUP TABLE} is only available in @strong{MySQL} +Note that @code{BACKUP TABLE} is only available in MySQL version 3.23.25 and later. @@ -17758,7 +17758,7 @@ table. The last row will be of @code{Msg_type status} and should normally be @code{OK}. If you don't get @code{OK}, or @code{Not checked} you should normally run a repair of the table. @xref{Table maintenance}. @code{Not checked} means that the table the given @code{TYPE} -told @strong{MySQL} that there wasn't any need to check the table. +told MySQL that there wasn't any need to check the table. The different check types stand for the following: @@ -17796,7 +17796,7 @@ If you just want to check a table that you assume is ok, you should use no check options or the @code{QUICK} option. The later should be used when you are in a hurry and can take the very small risk that @code{QUICK} didn't find an error in the data file (In most cases -@strong{MySQL} should find, under normal usage, any error in the data +MySQL should find, under normal usage, any error in the data file. If this happens then the table will be marked as 'corrupted', in which case the table can't be used until it's repaired). @@ -17807,7 +17807,7 @@ over @code{CHANGED}. (The only case when it isn't is when you suspect a bug you have found a bug in the @code{MyISAM} code.). @code{EXTENDED} is only to be used after you have run a normal check but -still get strange errors from a table when @strong{MySQL} tries to +still get strange errors from a table when MySQL tries to update a row or find a row by key (this is VERY unlikely to happen if a normal check has succeeded!). @@ -17868,10 +17868,10 @@ repairing the table with @code{myisamchk -o}, as @code{REPAIR TABLE} does not yet implement all the options of @code{myisamchk}. In the near future, we will make it more flexible. -If @code{QUICK} is given then @strong{MySQL} will try to do a +If @code{QUICK} is given then MySQL will try to do a @code{REPAIR} of only the index tree. -If you use @code{EXTENDED} then @strong{MySQL} will create the index row +If you use @code{EXTENDED} then MySQL will create the index row by row instead of creating one index at a time with sorting; This may be better than sorting on fixed-length keys if you have long @code{char()} keys that compress very good. @@ -17880,7 +17880,7 @@ keys that compress very good. @node Table maintenance, Maintenance regimen, REPAIR TABLE, Disaster Prevention @subsection Using @code{myisamchk} for Table Maintenance and Crash Recovery -Starting with @strong{MySQL} Version 3.23.13, you can check MyISAM +Starting with MySQL Version 3.23.13, you can check MyISAM tables with the @code{CHECK TABLE} command. @xref{CHECK TABLE}. You can repair tables with the @code{REPAIR TABLE} command. @xref{REPAIR TABLE}. @@ -17965,7 +17965,7 @@ shell> myisamchk /path/to/database_dir/*.MYI @end example You can even check all tables in all databases by specifying a wild card -with the path to the @strong{MySQL} data directory: +with the path to the MySQL data directory: @example shell> myisamchk /path/to/datadir/*/*.MYI @@ -18000,7 +18000,7 @@ the file or that has died without closing the file properly. If you @code{mysqld} is running, you must force a sync/close of all tables with @code{FLUSH TABLES} and ensure that no one is using the -tables while you are running @code{myisamchk}. In @strong{MySQL} Version 3.23 +tables while you are running @code{myisamchk}. In MySQL Version 3.23 the easiest way to avoid this problem is to use @code{CHECK TABLE} instead of @code{myisamchk} to check tables. @@ -18207,7 +18207,7 @@ Analyze the distribution of keys. This improves join performance by enabling the join optimizer to better choose in which order it should join the tables and which keys it should use: @code{myisamchk --describe --verbose table_name'} or using @code{SHOW KEYS} in -@strong{MySQL}. +MySQL. @item -d or --description Prints some information about table. @item -A or --set-auto-increment[=value] @@ -18308,7 +18308,7 @@ If you don't take down @code{mysqld} you should at least do a @code{mysqladmin flush-tables} before you run @code{myisamchk}. This chapter describes how to check for and deal with data corruption -in @strong{MySQL} databases. If your tables get corrupted a lot you should +in MySQL databases. If your tables get corrupted a lot you should try to find the reason for this! @xref{Crashing}. The @code{MyISAM} table section contains reason for why a table could be @@ -18393,7 +18393,7 @@ In the following section we only talk about using @code{myisamchk} on are using @code{ISAM} tables (extensions @code{.ISM} and @code{.ISD}), you should use @code{isamchk} instead. -Starting with @strong{MySQL} Version 3.23.14, you can repair MyISAM +Starting with MySQL Version 3.23.14, you can repair MyISAM tables with the @code{REPAIR TABLE} command. @xref{REPAIR TABLE}. The symptoms of a corrupted table include queries that abort unexpectedly @@ -18446,7 +18446,7 @@ that @code{mysqld} runs as (and to you, because you need to access the files you are checking). If it turns out you need to modify files, they must also be writable by you. -If you are using @strong{MySQL} Version 3.23.16 and above, you can (and +If you are using MySQL Version 3.23.16 and above, you can (and should) use the @code{CHECK} and @code{REPAIR} commands to check and repair @code{MyISAM} tables. @xref{CHECK TABLE}. @xref{REPAIR TABLE}. @@ -18605,7 +18605,7 @@ For a full description of the option. @xref{myisamchk syntax}. @cindex maintaining, tables @cindex tables, maintenance regimen -Starting with @strong{MySQL} Version 3.23.13, you can check MyISAM +Starting with MySQL Version 3.23.13, you can check MyISAM tables with the @code{CHECK TABLE} command. @xref{CHECK TABLE}. You can repair tables with the @code{REPAIR TABLE} command. @xref{REPAIR TABLE}. @@ -18631,7 +18631,7 @@ An even better test would be to check any table whose last-modified time is more recent than that of the @file{.pid} file. You should also check your tables regularly during normal system -operation. At @strong{MySQL AB}, we run a @code{cron} job to check all +operation. At MySQL AB, we run a @code{cron} job to check all our important tables once a week, using a line like this in a @file{crontab} file: @@ -18649,10 +18649,10 @@ more than enough for us. We recommend that to start with, you execute @code{myisamchk -s} each night on all tables that have been updated during the last 24 hours, -until you come to trust @strong{MySQL} as much as we do. +until you come to trust MySQL as much as we do. @cindex tables, defragment -Normally you don't need to maintain @strong{MySQL} tables that much. If +Normally you don't need to maintain MySQL tables that much. If you are changing tables with dynamic size rows (tables with @code{VARCHAR}, @code{BLOB} or @code{TEXT} columns) or have tables with many deleted rows you may want to from time to time (once a month?) defragment/reclaim space @@ -18678,7 +18678,7 @@ below. We explain some of the information in more detail later: @table @code @item myisamchk -d tbl_name Runs @code{myisamchk} in ``describe mode'' to produce a description of -your table. If you start the @strong{MySQL} server using the +your table. If you start the MySQL server using the @code{--skip-locking} option, @code{myisamchk} may report an error for a table that is updated while it runs. However, because @code{myisamchk} doesn't change the table in describe mode, there isn't any risk of @@ -18874,13 +18874,13 @@ You can optimize your table to minimize this space. @item Datafile pointer The size of the data file pointer, in bytes. It is usually 2, 3, 4, or 5 bytes. Most tables manage with 2 bytes, but this cannot be controlled -from @strong{MySQL} yet. For fixed tables, this is a record address. For +from MySQL yet. For fixed tables, this is a record address. For dynamic tables, this is a byte address. @item Keyfile pointer The size of the index file pointer, in bytes. It is usually 1, 2, or 3 bytes. Most tables manage with 2 bytes, but this is calculated -automatically by @strong{MySQL}. It is always a block address. +automatically by MySQL. It is always a block address. @item Max datafile length How long the table's data file (@code{.MYD} file) can become, in bytes. @@ -18945,7 +18945,7 @@ examples had just been reorganized with @code{myisamchk}, the values are very high (very near the theoretical maximum). @item Packed -@strong{MySQL} tries to pack keys with a common suffix. This can only be used +MySQL tries to pack keys with a common suffix. This can only be used for @code{CHAR}/@code{VARCHAR}/@code{DECIMAL} keys. For long strings like names, this can significantly reduce the space used. In the third example above, the 4th key is 10 characters long and a 60% reduction in space is @@ -18963,7 +18963,7 @@ The average record length. For tables with fixed-length records, this is the exact record length. @item Packed -@strong{MySQL} strips spaces from the end of strings. The @code{Packed} +MySQL strips spaces from the end of strings. The @code{Packed} value indicates the percentage of savings achieved by doing this. @item Recordspace used @@ -19082,7 +19082,7 @@ analyze the table is locked with a read lock. This works on This is equivalent to running @code{myisamchk -a} on the table. -@strong{MySQL} uses the stored key distribution to decide in which order +MySQL uses the stored key distribution to decide in which order tables should be joined when one does a join on something else than a constant. @@ -19117,7 +19117,7 @@ FLUSH flush_option [,flush_option] @end example You should use the @code{FLUSH} command if you want to clear some of the -internal caches @strong{MySQL} uses. To execute @code{FLUSH}, you must have +internal caches MySQL uses. To execute @code{FLUSH}, you must have the @strong{RELOAD} privilege. @code{flush_option} can be any of the following: @@ -19127,7 +19127,7 @@ the @strong{RELOAD} privilege. host tables if some of your hosts change IP number or if you get the error message @code{Host ... is blocked}. When more than @code{max_connect_errors} errors occur in a row for a given host while -connection to the @strong{MySQL} server, @strong{MySQL} assumes +connection to the MySQL server, MySQL assumes something is wrong and blocks the host from further connection requests. Flushing the host tables allows the host to attempt to connect again. @xref{Blocked host}.) You can start @code{mysqld} with @@ -19137,7 +19137,7 @@ again. @xref{Blocked host}.) You can start @code{mysqld} with If you have specified the update log file or a binary log file without an extension, the extension number of the log file will be incremented by one relative to the previous file. If you have used an extension in -the file name, @strong{MySQL} will close and reopen the update log file. +the file name, MySQL will close and reopen the update log file. @xref{Update log}. This is the same thing as sending the @code{SIGHUP} signal to the @code{mysqld} server. @@ -19291,7 +19291,7 @@ mysql> SHOW INDEX FROM mytable FROM mydb; mysql> SHOW INDEX FROM mydb.mytable; @end example -@code{SHOW DATABASES} lists the databases on the @strong{MySQL} server +@code{SHOW DATABASES} lists the databases on the MySQL server host. You can also get this list using the @code{mysqlshow} command. @code{SHOW TABLES} lists the tables in a given database. You can also @@ -19308,7 +19308,7 @@ how many times the table is @code{cached} and @code{in_use}. @code{SHOW COLUMNS} lists the columns in a given table. If you specify the @code{FULL} option, you will also get the privileges you have for each column. If the column types are different than you expect them to -be based on a @code{CREATE TABLE} statement, note that @strong{MySQL} +be based on a @code{CREATE TABLE} statement, note that MySQL sometimes changes column types. @xref{Silent column changes}. The @code{DESCRIBE} statement provides information similar to @@ -19333,7 +19333,7 @@ are returned: starting with 1. @item @code{Column_name} @tab Column name. @item @code{Collation} @tab How the column is sorted in the index. - In @strong{MySQL}, this can have values + In MySQL, this can have values @samp{A} (Ascending) or @code{NULL} (Not sorted). @item @code{Cardinality} @tab Number of unique values in the index. @@ -19382,7 +19382,7 @@ The following columns are returned: @item @code{Update_time} @tab When the data file was last updated. @item @code{Check_time} @tab When the table was last checked. @item @code{Create_options} @tab Extra options used with @code{CREATE TABLE}. -@item @code{Comment} @tab The comment used when creating the table (or some information why @strong{MySQL} couldn't access the table information). +@item @code{Comment} @tab The comment used when creating the table (or some information why MySQL couldn't access the table information). @end multitable @code{InnoDB} tables will report the free space in the tablespace @@ -19464,10 +19464,10 @@ The status variables listed above have the following meaning: @multitable @columnfractions .35 .65 @item @strong{Variable} @tab @strong{Meaning} @item @code{Aborted_clients} @tab Number of connections aborted because the client died without closing the connection properly. @xref{Communication errors}. -@item @code{Aborted_connects} @tab Number of tries to connect to the @strong{MySQL} server that failed. @xref{Communication errors}. +@item @code{Aborted_connects} @tab Number of tries to connect to the MySQL server that failed. @xref{Communication errors}. @item @code{Bytes_received} @tab Number of bytes received from all clients. @item @code{Bytes_sent} @tab Number of bytes sent to all clients. -@item @code{Connections} @tab Number of connection attempts to the @strong{MySQL} server. +@item @code{Connections} @tab Number of connection attempts to the MySQL server. @item @code{Created_tmp_disk_tables} @tab Number of implicit temporary tables on disk created while executing statements. @item @code{Created_tmp_tables} @tab Number of implicit temporary tables in memory created while executing statements. @item @code{Created_tmp_files} @tab How many temporary files @code{mysqld} have created. @@ -19543,7 +19543,7 @@ small. The cache hit rate can be calculated with @code{key_reads}/@code{key_read_requests}. @item If @code{Handler_read_rnd} is big, then you probably have a lot of -queries that require @strong{MySQL} to scan whole tables or you have +queries that require MySQL to scan whole tables or you have joins that don't use keys properly. @item If @code{Threads_created} is big, you may want to increase the @@ -19558,7 +19558,7 @@ If @code{Threads_created} is big, you may want to increase the SHOW VARIABLES [LIKE wild] @end example -@code{SHOW VARIABLES} shows the values of some @strong{MySQL} system +@code{SHOW VARIABLES} shows the values of some MySQL system variables. You can also get this information using the @code{mysqladmin variables} command. If the default values are unsuitable, you can set most of these variables using command-line options when @code{mysqld} starts up. @@ -19662,12 +19662,12 @@ Is @code{ON} if @code{mysqld} was started with @code{--ansi}. @xref{ANSI mode}. @item @code{back_log} -The number of outstanding connection requests @strong{MySQL} can have. This -comes into play when the main @strong{MySQL} thread gets @strong{VERY} +The number of outstanding connection requests MySQL can have. This +comes into play when the main MySQL thread gets @strong{VERY} many connection requests in a very short time. It then takes some time (although very little) for the main thread to check the connection and start a new thread. The @code{back_log} value indicates how many requests can be -stacked during this short time before @strong{MySQL} momentarily stops +stacked during this short time before MySQL momentarily stops answering new requests. You need to increase this only if you expect a large number of connections in a short period of time. @@ -19724,7 +19724,7 @@ The default character set. The supported character sets. @item @code{concurrent_inserts} -If @code{ON} (the default), @strong{MySQL} will allow you to use @code{INSERT} +If @code{ON} (the default), MySQL will allow you to use @code{INSERT} on @code{MyISAM} tables at the same time as you run @code{SELECT} queries on them. You can turn this option off by starting @code{mysqld} with @code{--safe} or @code{--skip-new}. @@ -19738,7 +19738,7 @@ packet before responding with @code{Bad handshake}. The value of the @code{--datadir} option. @item @code{delay_key_write} -If enabled (is on by default), @strong{MySQL} will honor the +If enabled (is on by default), MySQL will honor the @code{delay_key_write} option @code{CREATE TABLE}. This means that the key buffer for tables with this option will not get flushed on every index update, but only when a table is closed. This will speed up @@ -19764,7 +19764,7 @@ DELAYED}. If the queue becomes full, any client that does @code{INSERT DELAYED} will wait until there is room in the queue again. @item @code{flush} -This is @code{ON} if you have started @strong{MySQL} with the @code{--flush} +This is @code{ON} if you have started MySQL with the @code{--flush} option. @item @code{flush_time} @@ -19812,9 +19812,9 @@ Index blocks are buffered and are shared by all threads. Increase this to get better index handling (for all reads and multiple writes) to as much as you can afford; 64M on a 256M machine that mainly -runs @strong{MySQL} is quite common. If you, however, make this too big +runs MySQL is quite common. If you, however, make this too big (more than 50% of your total memory?) your system may start to page and -become REALLY slow. Remember that because @strong{MySQL} does not cache +become REALLY slow. Remember that because MySQL does not cache data read, that you will have to leave some room for the OS filesystem cache. @@ -19935,7 +19935,7 @@ tables to use the slower key cache method to create the index. @strong{NOTE} that this parameter is given in megabytes! @item @code{myisam_max_sort_file_size} -The maximum size of the temporary file @strong{MySQL} is allowed to use +The maximum size of the temporary file MySQL is allowed to use while recreating the index (during @code{REPAIR}, @code{ALTER TABLE} or @code{LOAD DATA INFILE}. If the file size would be bigger than this, the index will be created through the key cache (which is slower). @@ -19977,7 +19977,7 @@ The value of the @code{--pid-file} option. The value of the @code{--port} option. @item @code{protocol_version} -The protocol version used by the @strong{MySQL} server. +The protocol version used by the MySQL server. @item @code{record_buffer} Each thread that does a sequential scan allocates a buffer of this @@ -20034,7 +20034,7 @@ operations. @item @code{table_cache} The number of open tables for all threads. Increasing this value increases the number of file descriptors that @code{mysqld} requires. -@strong{MySQL} needs two file descriptors for each unique open table. +MySQL needs two file descriptors for each unique open table. See below for comments on file descriptor limits. You can check if you need to increase the table cache by checking the @code{Opened_tables} variable. @xref{SHOW}. If this variable is big and you don't do @@ -20043,7 +20043,7 @@ reopenend), then you should increase the value of this variable. Make sure that your operating system can handle the number of open file descriptors implied by the @code{table_cache} setting. If @code{table_cache} -is set too high, @strong{MySQL} may run out of file descriptors and refuse +is set too high, MySQL may run out of file descriptors and refuse connections, fail to perform queries, and be very unreliable. For information about how the table cache works, see @ref{Table cache}. @@ -20078,7 +20078,7 @@ large enough for normal operation. @xref{MySQL Benchmarks}. The timezone for the server. @item @code{tmp_table_size} -If an in-memory temporary table exceeds this size, @strong{MySQL} +If an in-memory temporary table exceeds this size, MySQL will automatically convert it to an on-disk @code{MyISAM} table. Increase the value of @code{tmp_table_size} if you do many advanced @code{GROUP BY} queries and you have lots of memory. @@ -20094,7 +20094,7 @@ The number of seconds the server waits for activity on a connection before closing it. See also @code{interactive_timeout}. @end table -The manual section that describes tuning @strong{MySQL} contains some +The manual section that describes tuning MySQL contains some information of how to tune the above variables. @xref{Server parameters}. @@ -20132,7 +20132,7 @@ threads. Otherwise, you can see only your own threads. @xref{KILL, , the first 100 characters of each query will be shown. This command is very useful if you get the 'too many connections' error -message and want to find out what's going on. @strong{MySQL} reserves +message and want to find out what's going on. MySQL reserves one extra connection for a client with the @code{Process_priv} privilege to ensure that you should always be able to login and check the system (assuming you are not giving this privilege to all your users). @@ -20198,11 +20198,11 @@ Create Table: CREATE TABLE t ( @cindex data, character sets @cindex sorting, character sets -By default, @strong{MySQL} uses the ISO-8859-1 (Latin1) character set +By default, MySQL uses the ISO-8859-1 (Latin1) character set with sorting according to Swedish/Finnish. This is the character set suitable in the USA and western Europe. -All standard @strong{MySQL} binaries are compiled with +All standard MySQL binaries are compiled with @code{--with-extra-charsets=complex}. This will add code to all standard programs to be able to handle @code{latin1} and all multi-byte character sets within the binary. Other character sets will be @@ -20219,11 +20219,11 @@ list-of-charset | complex | all} options to @code{configure}, and the character set configuration files listed in @file{SHAREDIR/charsets/Index}. @xref{configure options}. -If you change the character set when running @strong{MySQL} (which may +If you change the character set when running MySQL (which may also change the sort order), you must run myisamchk -r -q on all tables. Otherwise your indexes may not be ordered correctly. -When a client connects to a @strong{MySQL} server, the server sends the +When a client connects to a MySQL server, the server sends the default character set in use to the client. The client will switch to use this character set for this connection. @@ -20233,19 +20233,19 @@ old @code{mysql_escape_string()} function, except that it takes the MYSQL connection handle as the first parameter. If the client is compiled with different paths than where the server is -installed and the user who configured @strong{MySQL} didn't included all -character sets in the @strong{MySQL} binary, one must specify for +installed and the user who configured MySQL didn't included all +character sets in the MySQL binary, one must specify for the client where it can find the additional character sets it will need if the server runs with a different character set than the client. -One can specify this by putting in a @strong{MySQL} option file: +One can specify this by putting in a MySQL option file: @example [client] character-sets-dir=/usr/local/mysql/share/mysql/charsets @end example -where the path points to where the dynamic @strong{MySQL} character sets +where the path points to where the dynamic MySQL character sets are stored. One can force the client to use specific character set by specifying: @@ -20296,7 +20296,7 @@ and execute the following command to generate the @file{errmsg.sys} file: shell> comp_err errmsg.txt errmsg.sys @end example -If you upgrade to a newer version of @strong{MySQL}, remember to repeat +If you upgrade to a newer version of MySQL, remember to repeat your changes with the new @file{errmsg.txt} file. @@ -20306,7 +20306,7 @@ your changes with the new @file{errmsg.txt} file. @cindex character sets, adding @cindex adding, character sets -To add another character set to @strong{MySQL}, use the following procedure. +To add another character set to MySQL, use the following procedure. Decide if the set is simple or complex. If the character set does not need to use special string collating routines for @@ -20361,7 +20361,7 @@ For a complex character set do the following: @enumerate @item -Create the file @file{strings/ctype-MYSET.c} in the @strong{MySQL} source +Create the file @file{strings/ctype-MYSET.c} in the MySQL source distribution. @item @@ -20391,7 +20391,7 @@ Near the top of the file, place a special comment like this: @end example The @code{configure} program uses this comment to include -the character set into the @strong{MySQL} library automatically. +the character set into the MySQL library automatically. The strxfrm_multiply and mbmaxlen lines will be explained in the following sections. Only include them if you the string @@ -20420,7 +20420,7 @@ Reconfigure, recompile, and test. The file @file{sql/share/charsets/README} includes some more instructions. -If you want to have the character set included in the @strong{MySQL} +If you want to have the character set included in the MySQL distribution, mail a patch to @email{internals@@lists.mysql.com}. @@ -20439,7 +20439,7 @@ to_upper['a'] should contain 'A' @code{sort_order[]} is a map indicating how characters should be ordered for comparison and sorting purposes. For many character sets, this is the same as @code{to_upper[]} (which means sorting will be case insensitive). -@strong{MySQL} will sort characters based on the value of +MySQL will sort characters based on the value of @code{sort_order[character]}. For more complicated sorting rules, see the discussion of string collating below. @xref{String collating}. @@ -20530,7 +20530,7 @@ size in bytes of the largest character in the set. @cindex environment variables @cindex programs, list of -All @strong{MySQL} clients that communicate with the server using the +All MySQL clients that communicate with the server using the @code{mysqlclient} library use the following environment variables: @tindex MYSQL_UNIX_PORT environment variable @@ -20565,33 +20565,33 @@ environment variable to save the command-line history. The default value for the history file is @file{$HOME/.mysql_history}, where @code{$HOME} is the value of the @code{HOME} environment variable. @xref{Environment variables}. -All @strong{MySQL} programs take many different options. However, every -@strong{MySQL} program provides a @code{--help} option that you can use +All MySQL programs take many different options. However, every +MySQL program provides a @code{--help} option that you can use to get a full description of the program's different options. For example, try @code{mysql --help}. You can override default options for all standard client programs with an option file. @ref{Option files}. -The list below briefly describes the @strong{MySQL} programs: +The list below briefly describes the MySQL programs: @table @code @cindex @code{myisamchk} @item myisamchk -Utility to describe, check, optimize, and repair @strong{MySQL} tables. +Utility to describe, check, optimize, and repair MySQL tables. Because @code{myisamchk} has many functions, it is described in its own chapter. @xref{MySQL Database Administration}. @cindex @code{make_binary_distribution} @item make_binary_distribution -Makes a binary release of a compiled @strong{MySQL}. This could be sent +Makes a binary release of a compiled MySQL. This could be sent by FTP to @file{/pub/mysql/Incoming} on @code{support.mysql.com} for the -convenience of other @strong{MySQL} users. +convenience of other MySQL users. @cindex @code{msql2mysql} @item msql2mysql -A shell script that converts @code{mSQL} programs to @strong{MySQL}. It doesn't +A shell script that converts @code{mSQL} programs to MySQL. It doesn't handle all cases, but it gives a good start when converting. @cindex @code{mysqlaccess} @@ -20609,8 +20609,8 @@ process, and status information from the server. @cindex @code{mysqlbug} @item mysqlbug -The @strong{MySQL} bug report script. This script should always be used when -filing a bug report to the @strong{MySQL} list. +The MySQL bug report script. This script should always be used when +filing a bug report to the MySQL list. @cindex @code{mysqld} @item mysqld @@ -20618,7 +20618,7 @@ The SQL daemon. This should always be running. @cindex @code{mysqldump} @item mysqldump -Dumps a @strong{MySQL} database into a file as SQL statements or +Dumps a MySQL database into a file as SQL statements or as tab-separated text files. Enhanced freeware originally by Igor Romanenko. @xref{mysqldump, , @code{mysqldump}}. @@ -20633,8 +20633,8 @@ Displays information about databases, tables, columns, and indexes. @cindex @code{mysql_install_db} @item mysql_install_db -Creates the @strong{MySQL} grant tables with default privileges. This is -usually executed only once, when first installing @strong{MySQL} +Creates the MySQL grant tables with default privileges. This is +usually executed only once, when first installing MySQL on a system. @cindex @code{replace} @@ -20717,7 +20717,7 @@ Set the timezone (the @code{TZ}) variable to the value of this parameter. The @code{safe_mysqld} script is written so that it normally is able to start a server that was installed from either a source or a binary version of -@strong{MySQL}, even if these install the server in slightly different +MySQL, even if these install the server in slightly different locations. @code{safe_mysqld} expects one of these conditions to be true: @itemize @bullet @@ -20727,7 +20727,7 @@ The server and databases can be found relative to the directory from which directory for @file{bin} and @file{data} directories (for binary distributions) or for @file{libexec} and @file{var} directories (for source distributions). This condition should be met if you execute -@code{safe_mysqld} from your @strong{MySQL} installation directory (for +@code{safe_mysqld} from your MySQL installation directory (for example, @file{/usr/local/mysql} for a binary distribution). @item @@ -20736,29 +20736,29 @@ If the server and databases cannot be found relative to the working directory, locations are @file{/usr/local/libexec} and @file{/usr/local/var}. The actual locations are determined when the distribution was built from which @code{safe_mysqld} comes. They should be correct if -@strong{MySQL} was installed in a standard location. +MySQL was installed in a standard location. @end itemize Because @code{safe_mysqld} will try to find the server and databases relative to its own working directory, you can install a binary distribution of -@strong{MySQL} anywhere, as long as you start @code{safe_mysqld} from the -@strong{MySQL} installation directory: +MySQL anywhere, as long as you start @code{safe_mysqld} from the +MySQL installation directory: @example shell> cd mysql_installation_directory shell> bin/safe_mysqld & @end example -If @code{safe_mysqld} fails, even when invoked from the @strong{MySQL} +If @code{safe_mysqld} fails, even when invoked from the MySQL installation directory, you can modify it to use the path to @code{mysqld} and the pathname options that are correct for your system. Note that if you -upgrade @strong{MySQL} in the future, your modified version of +upgrade MySQL in the future, your modified version of @code{safe_mysqld} will be overwritten, so you should make a copy of your edited version that you can reinstall. @node mysqld_multi, myisampack, safe_mysqld, Server-Side Scripts -@subsection mysqld_multi, program for managing multiple @strong{MySQL} servers +@subsection mysqld_multi, program for managing multiple MySQL servers @cindex tools, mysqld_multi @cindex scripts @@ -20771,7 +20771,7 @@ processes running in different UNIX sockets and TCP/IP ports. The program will search for group(s) named [mysqld#] from my.cnf (or the given --config-file=...), where # can be any positive number starting from 1. These groups should be the same as the usual @code{[mysqld]} -group (e.g. options to mysqld, see @strong{MySQL} manual for detailed +group (e.g. options to mysqld, see MySQL manual for detailed information about this group), but with those port, socket etc. options that are wanted for each separate @code{mysqld} processes. The number in the group name has another function; it can be used for starting, @@ -20828,13 +20828,13 @@ turned on. Password for user for @code{mysqladmin}. @cindex tcp-ip option @item --tcp-ip -Connect to the @strong{MySQL} server(s) via the TCP/IP port instead of +Connect to the MySQL server(s) via the TCP/IP port instead of the UNIX socket. This affects stopping and reporting. If a socket file is missing, the server may still be running, but can be accessed only via the TCP/IP port. By default connecting is done via the UNIX socket. @cindex user option @item --user=... -@strong{MySQL} user for @code{mysqladmin}. +MySQL user for @code{mysqladmin}. @cindex version option @item --version Print the version number and exit. @@ -20844,12 +20844,12 @@ Some notes about @code{mysqld_multi}: @itemize @bullet @item -Make sure that the @strong{MySQL} user, who is stopping the +Make sure that the MySQL user, who is stopping the @code{mysqld} services (e.g using the @code{mysqladmin}) have the same password and username for all the data directories accessed (to the 'mysql' database) And make sure that the user has the 'Shutdown_priv' privilege! If you have many data- directories and many different 'mysql' -databases with different passwords for the @strong{MySQL} 'root' user, +databases with different passwords for the MySQL 'root' user, you may want to create a common 'multi_admin' user for each using the same password (see below). Example how to do it: @example @@ -20866,7 +20866,7 @@ should have its own @code{pid-file}. The advantage using @code{safe_mysqld} instead of @code{mysqld} directly here is, that @code{safe_mysqld} 'guards' every @code{mysqld} process and will restart it, if a @code{mysqld} process fails due to signal kill -9, or -similar. (Like segmentation fault, which @strong{MySQL} should never do, +similar. (Like segmentation fault, which MySQL should never do, of course ;) Please note that @code{safe_mysqld} script may require that you start it from a certain place. This means that you may have to CD to a certain directory, before you start the @code{mysqld_multi}. If @@ -20985,7 +20985,7 @@ individual records, because you only have to uncompress exactly one record, not a much larger disk block as when using Stacker on MS-DOS. Usually, @code{myisampack} packs the data file 40%-70%. -@strong{MySQL} uses memory mapping (@code{mmap()}) on compressed tables and +MySQL uses memory mapping (@code{mmap()}) on compressed tables and falls back to normal read/write file usage if @code{mmap()} doesn't work. There are currently two limitations with @code{myisampack}: @@ -21333,14 +21333,14 @@ The number of bits used in the Huffman tree. After you have run @code{pack_isam}/@code{myisampack} you must run @code{isamchk}/@code{myisamchk} to re-create the index. At this time you can also sort the index blocks and create statistics needed for -the @strong{MySQL} optimizer to work more efficiently: +the MySQL optimizer to work more efficiently: @example myisamchk -rq --analyze --sort-index table_name.MYI isamchk -rq --analyze --sort-index table_name.ISM @end example -After you have installed the packed table into the @strong{MySQL} database +After you have installed the packed table into the MySQL database directory you should do @code{mysqladmin flush-tables} to force @code{mysqld} to start using the new table. @@ -21364,10 +21364,10 @@ the following configure options: @item CFLAGS=-DUSE_SYMDIR @tab Symbolic links support for Windows. @end multitable -You can find the @strong{MySQL}-max binaries at +You can find the MySQL-max binaries at @uref{http://www.mysql.com/downloads/mysql-max-3.23.html}. -The Windows @strong{MySQL} 3.23 binary distribution includes both the +The Windows MySQL 3.23 binary distribution includes both the standard @strong{mysqld.exe} binary and the @code{mysqld-max.exe} binary. @uref{http://www.mysql.com/downloads/mysql-3.23.html}. @xref{Windows installation}. @@ -21395,7 +21395,7 @@ The meaning of the values are: @multitable @columnfractions .3 .7 @item @strong{Value} @tab @strong{Meaning}. @item YES @tab The option is activated and usable. -@item NO @tab @strong{MySQL} is not compiled with support for this option. +@item NO @tab MySQL is not compiled with support for this option. @item DISABLED @tab The xxxx option is disabled because one started @code{mysqld} with @code{--skip-xxxx} or because one didn't start @code{mysqld} with all needed options to enable the option. In this case the @code{hostname.err} file should contain a reason for why the option is disabled. @end multitable @@ -21459,7 +21459,7 @@ binaries includes: @cindex environment variables @cindex programs, list of -All @strong{MySQL} clients that communicate with the server using the +All MySQL clients that communicate with the server using the @code{mysqlclient} library use the following environment variables: @tindex MYSQL_UNIX_PORT environment variable @@ -21494,33 +21494,33 @@ environment variable to save the command-line history. The default value for the history file is @file{$HOME/.mysql_history}, where @code{$HOME} is the value of the @code{HOME} environment variable. @xref{Environment variables}. -All @strong{MySQL} programs take many different options. However, every -@strong{MySQL} program provides a @code{--help} option that you can use +All MySQL programs take many different options. However, every +MySQL program provides a @code{--help} option that you can use to get a full description of the program's different options. For example, try @code{mysql --help}. You can override default options for all standard client programs with an option file. @ref{Option files}. -The list below briefly describes the @strong{MySQL} programs: +The list below briefly describes the MySQL programs: @table @code @cindex @code{myisamchk} @item myisamchk -Utility to describe, check, optimize, and repair @strong{MySQL} tables. +Utility to describe, check, optimize, and repair MySQL tables. Because @code{myisamchk} has many functions, it is described in its own chapter. @xref{MySQL Database Administration}. @cindex @code{make_binary_distribution} @item make_binary_distribution -Makes a binary release of a compiled @strong{MySQL}. This could be sent +Makes a binary release of a compiled MySQL. This could be sent by FTP to @file{/pub/mysql/Incoming} on @code{support.mysql.com} for the -convenience of other @strong{MySQL} users. +convenience of other MySQL users. @cindex @code{msql2mysql} @item msql2mysql -A shell script that converts @code{mSQL} programs to @strong{MySQL}. It doesn't +A shell script that converts @code{mSQL} programs to MySQL. It doesn't handle all cases, but it gives a good start when converting. @cindex @code{mysqlaccess} @@ -21538,8 +21538,8 @@ process, and status information from the server. @cindex @code{mysqlbug} @item mysqlbug -The @strong{MySQL} bug report script. This script should always be used when -filing a bug report to the @strong{MySQL} list. +The MySQL bug report script. This script should always be used when +filing a bug report to the MySQL list. @cindex @code{mysqld} @item mysqld @@ -21547,7 +21547,7 @@ The SQL daemon. This should always be running. @cindex @code{mysqldump} @item mysqldump -Dumps a @strong{MySQL} database into a file as SQL statements or +Dumps a MySQL database into a file as SQL statements or as tab-separated text files. Enhanced freeware originally by Igor Romanenko. @xref{mysqldump, , @code{mysqldump}}. @@ -21562,8 +21562,8 @@ Displays information about databases, tables, columns, and indexes. @cindex @code{mysql_install_db} @item mysql_install_db -Creates the @strong{MySQL} grant tables with default privileges. This is -usually executed only once, when first installing @strong{MySQL} +Creates the MySQL grant tables with default privileges. This is +usually executed only once, when first installing MySQL on a system. @cindex @code{replace} @@ -21796,11 +21796,11 @@ connection and the server you are using. If you are running in the the @code{mysql} variables that affect your queries. @cindex @code{safe-mode} command -A useful startup option for beginners (introduced in @strong{MySQL} +A useful startup option for beginners (introduced in MySQL Version 3.23.11) is @code{--safe-updates} (or @code{--i-am-a-dummy} for users that has at some time done a @code{DELETE FROM table_name} but forgot the @code{WHERE} clause). When using this option, @code{mysql} -sends the following command to the @strong{MySQL} server when opening +sends the following command to the MySQL server when opening the connection: @example @@ -22027,7 +22027,7 @@ The @code{mysqladmin status} command result has the following columns: @cindex uptime @multitable @columnfractions .3 .7 -@item Uptime @tab Number of seconds the @strong{MySQL} server has been up. +@item Uptime @tab Number of seconds the MySQL server has been up. @cindex threads @item Threads @tab Number of active threads (clients). @cindex questions @@ -22042,28 +22042,28 @@ The @code{mysqladmin status} command result has the following columns: @cindex open tables @item Open tables @tab Number of tables that are open now. @cindex memory use -@item Memory in use @tab Memory allocated directly by the @code{mysqld} code (only available when @strong{MySQL} is compiled with --with-debug=full). +@item Memory in use @tab Memory allocated directly by the @code{mysqld} code (only available when MySQL is compiled with --with-debug=full). @cindex max memory used -@item Max memory used @tab Maximum memory allocated directly by the @code{mysqld} code (only available when @strong{MySQL} is compiled with --with-debug=full). +@item Max memory used @tab Maximum memory allocated directly by the @code{mysqld} code (only available when MySQL is compiled with --with-debug=full). @end multitable If you do @code{myslqadmin shutdown} on a socket (in other words, on a the computer where @code{mysqld} is running), @code{mysqladmin} will -wait until the @strong{MySQL} @code{pid-file} is removed to ensure that +wait until the MySQL @code{pid-file} is removed to ensure that the @code{mysqld} server has stopped properly. @node Using mysqlcheck, mysqldump, mysqladmin, Client-Side Scripts @subsection Using @code{mysqlcheck} for Table Maintenance and Crash Recovery -Since @strong{MySQL} version 3.23.38 you will be able to use a new +Since MySQL version 3.23.38 you will be able to use a new checking and repairing tool for @code{MyISAM} tables. The difference to @code{myisamchk} is that @code{mysqlcheck} should be used when the @code{mysqld} server is running, where as @code{myisamchk} should be used when it is not. The benefit is that you no longer have to take the server down for checking or repairing your tables. -@code{mysqlcheck} uses @strong{MySQL} server commands @code{CHECK}, +@code{mysqlcheck} uses MySQL server commands @code{CHECK}, @code{REPAIR}, @code{ANALYZE} and @code{OPTIMIZE} in a convenient way for the user. @@ -22187,7 +22187,7 @@ Output version information and exit. @cindex @code{mysqldump} Utility to dump a database or a collection of database for backup or for -transferring the data to another SQL server (not necessarily a @strong{MySQL} +transferring the data to another SQL server (not necessarily a MySQL server). The dump will contain SQL statements to create the table and/or populate the table. @@ -22212,7 +22212,7 @@ memory before dumping the result. This will probably be a problem if you are dumping a big database. Note that if you are using a new copy of the @code{mysqldump} program -and you are going to do a dump that will be read into a very old @strong{MySQL} +and you are going to do a dump that will be read into a very old MySQL server, you should not use the @code{--opt} or @code{-e} options. @code{mysqldump} supports the following options: @@ -22220,14 +22220,14 @@ server, you should not use the @code{--opt} or @code{-e} options. @table @code @item --add-locks Add @code{LOCK TABLES} before and @code{UNLOCK TABLE} after each table dump. -(To get faster inserts into @strong{MySQL}.) +(To get faster inserts into MySQL.) @item --add-drop-table Add a @code{drop table} before each create statement. @item -A, --all-databases Dump all the databases. This will be same as @code{--databases} with all databases selected. @item -a, --all -Include all @strong{MySQL}-specific create options. +Include all MySQL-specific create options. @item --allow-keywords Allow creation of column names that are keywords. This works by prefixing each column name with the table name. @@ -22258,11 +22258,11 @@ These options are used with the @code{-T} option and have the same meaning as the corresponding clauses for @code{LOAD DATA INFILE}. @xref{LOAD DATA, , @code{LOAD DATA}}. @item -F, --flush-logs -Flush log file in the @strong{MySQL} server before starting the dump. +Flush log file in the MySQL server before starting the dump. @item -f, --force, Continue even if we get a SQL error during a table dump. @item -h, --host=.. -Dump data from the @strong{MySQL} server on the named host. The default host +Dump data from the MySQL server on the named host. The default host is @code{localhost}. @item -l, --lock-tables. Lock all tables before starting the dump. The tables are locked with @@ -22280,7 +22280,7 @@ just want to get a dump of the structure for a table! @item --opt Same as @code{--quick --add-drop-table --add-locks --extended-insert --lock-tables}. Should give you the fastest possible dump for reading -into a @strong{MySQL} server. +into a MySQL server. @item -pyour_pass, --password[=your_pass] The password to use when connecting to the server. If you specify no @samp{=your_pass} part, @@ -22308,7 +22308,7 @@ and a @code{table_name.txt} file, that contains the data, for each give table. machine as the @code{mysqld} daemon. The format of the @code{.txt} file is made according to the @code{--fields-xxx} and @code{--lines--xxx} options. @item -u user_name, --user=user_name -The @strong{MySQL} user name to use when connecting to the server. The +The MySQL user name to use when connecting to the server. The default value is your Unix login name. @item -O var=option, --set-variable var=option Set the value of a variable. The possible variables are listed below. @@ -22327,7 +22327,7 @@ When creating multi-row-insert statements (as with option @code{--extended-insert} or @code{--opt}), @code{mysqldump} will create rows up to @code{net_buffer_length} length. If you increase this variable, you should also ensure that the @code{max_allowed_packet} -variable in the @strong{MySQL} server is bigger than the +variable in the MySQL server is bigger than the @code{net_buffer_length}. @end table @@ -22338,7 +22338,7 @@ whole databases. @xref{Backup}. mysqldump --opt database > backup-file.sql @end example -You can read this back into @strong{MySQL} with: +You can read this back into MySQL with: @example mysql database < backup-file.sql @@ -22350,7 +22350,7 @@ or mysql -e "source /patch-to-backup/backup-file.sql" database @end example -However, it's also very useful to populate another @strong{MySQL} server with +However, it's also very useful to populate another MySQL server with information from a database: @example @@ -22440,7 +22440,7 @@ from the option files. To be able to execute @code{mysqlhotcopy} you need write access to the backup directory, @code{SELECT} privilege to the tables you are about to -copy and the @strong{MySQL} @code{Reload} privilege (to be able to +copy and the MySQL @code{Reload} privilege (to be able to execute @code{FLUSH TABLES}). @@ -22476,7 +22476,7 @@ all be imported into a table named @code{patient}. @item -c, --columns=... This option takes a comma-separated list of field names as an argument. The field list is used to create a proper @code{LOAD DATA INFILE} command, -which is then passed to @strong{MySQL}. @xref{LOAD DATA, , @code{LOAD DATA}}. +which is then passed to MySQL. @xref{LOAD DATA, , @code{LOAD DATA}}. @item -C, --compress Compress all information between the client and the server if both support @@ -22505,7 +22505,7 @@ continue processing any remaining files. Without @code{--force}, Display a help message and exit. @item -h host_name, --host=host_name -Import data to the @strong{MySQL} server on the named host. The default host +Import data to the MySQL server on the named host. The default host is @code{localhost}. @item -i, --ignore @@ -22546,7 +22546,7 @@ The socket file to use when connecting to @code{localhost} (which is the default host). @item -u user_name, --user=user_name -The @strong{MySQL} user name to use when connecting to the server. The +The MySQL user name to use when connecting to the server. The default value is your Unix login name. @item -v, --verbose @@ -22619,7 +22619,7 @@ If no column is given, all matching columns and column types in the table are shown. @end itemize -Note that in newer @strong{MySQL} versions, you only see those +Note that in newer MySQL versions, you only see those database/tables/columns for which you have some privileges. If the last argument contains a shell or SQL wild-card (@code{*}, @code{?}, @@ -22691,7 +22691,7 @@ shell> mysql < text_file @cindex Log files -@strong{MySQL} has several different log files that can help you find +MySQL has several different log files that can help you find out what's going on inside @code{mysqld}: @multitable @columnfractions .3 .7 @@ -22749,9 +22749,9 @@ to the log file (by default named @file{'hostname'.log}). This log can be very useful when you suspect an error in a client and want to know exactly what @code{mysqld} thought the client sent to it. -By default, the @code{mysql.server} script starts the @strong{MySQL} +By default, the @code{mysql.server} script starts the MySQL server with the @code{-l} option. If you need better performance when -you start using @strong{MySQL} in a production environment, you can +you start using MySQL in a production environment, you can remove the @code{-l} option from @code{mysql.server} or change it to @code{--log-binary}. @@ -22875,7 +22875,7 @@ One way to do this is to do @code{mysqladmin flush-logs} once a day and then remove any logs that are more than 3 days old. You can examine the binary log file with the @code{mysqlbinlog} command. -For example, you can update a @strong{MySQL} server from the binary log +For example, you can update a MySQL server from the binary log as follows: @example @@ -22883,13 +22883,13 @@ mysqlbinlog log-file | mysql -h server_name @end example You can also use the @code{mysqlbinlog} program to read the binary log -directly from a remote @strong{MySQL} server! +directly from a remote MySQL server! @code{mysqlbinlog --help} will give you more information of how to use this program! If you are using @code{BEGIN [WORK]} or @code{SET AUTOCOMMIT=0}, you must -use the @strong{MySQL} binary log for backups instead of the old update log. +use the MySQL binary log for backups instead of the old update log. The binary logging is done immediately after a query completes but before any locks are released or any commit is done. This ensures that the log @@ -22948,17 +22948,17 @@ using indexes are printed. @xref{Command-line options}. @cindex maintaining, log files @cindex log files, maintaining -@strong{MySQL} has a lot of log files which make it easy to see what is +MySQL has a lot of log files which make it easy to see what is going. @xref{Log Files}. One must however from time to time clean up after @code{MysQL} to ensure that the logs don't take up too much disk space. -When using @strong{MySQL} with log files, you will, from time to time, -want to remove/backup old log files and tell @strong{MySQL} to start +When using MySQL with log files, you will, from time to time, +want to remove/backup old log files and tell MySQL to start logging on new files. @xref{Backup}. On a Linux (@code{Redhat}) installation, you can use the -@code{mysql-log-rotate} script for this. If you installed @strong{MySQL} +@code{mysql-log-rotate} script for this. If you installed MySQL from an RPM distribution, the script should have been installed automatically. Note that you should be careful with this if you are using the log for replication! @@ -22966,9 +22966,9 @@ the log for replication! On other systems you must install a short script yourself that you start from @code{cron} to handle log files. -You can force @strong{MySQL} to start using new log files by using +You can force MySQL to start using new log files by using @code{mysqladmin flush-logs} or by using the SQL command @code{FLUSH LOGS}. -If you are using @strong{MySQL} Version 3.21 you must use @code{mysqladmin refresh}. +If you are using MySQL Version 3.21 you must use @code{mysqladmin refresh}. The above command does the following: @@ -23014,7 +23014,7 @@ and then take a backup and remove @file{mysql.old}. * Replication Problems:: @end menu -This chapter describes the various replication features in @strong{MySQL}. +This chapter describes the various replication features in MySQL. It serves as a reference to the options available with replication. You will be introduced to replication and learn how to implement it. Towards the end, there are some frequently asked questions and descriptions @@ -23031,7 +23031,7 @@ sending a part of the non-updating queries to the replica server. Of course this only works if non-updating queries dominate, but that is the normal case. -Starting in Version 3.23.15, @strong{MySQL} supports one-way replication +Starting in Version 3.23.15, MySQL supports one-way replication internally. One server acts as the master, while the other acts as the slave. Note that one server could play the roles of master in one pair and slave in the other. The master server keeps a binary log of updates @@ -23054,7 +23054,7 @@ master. @xref{Backup}. @cindex master-slave setup -@strong{MySQL} replication is based on the server keeping track of all +MySQL replication is based on the server keeping track of all changes to your database (updates, deletes, etc) in the binary log. (@xref{Binary log}.) and the slave server(s) reading the saved queries from the master server's binary log so that the slave can @@ -23068,7 +23068,7 @@ logging on the master. If you start your slaves with data that doesn't agree with what was on the master @strong{when the binary log was started}, your slaves may fail. -A future version (4.0) of @strong{MySQL} will remove the need to keep a +A future version (4.0) of MySQL will remove the need to keep a (possibly large) snapshot of data for new slaves that you might wish to set up through the live backup functionality with no locking required. However, at this time, it is necessary to block all writes either with a @@ -23091,14 +23091,14 @@ The next section explains the master/slave setup process in more detail. @subsection How To Set Up Replication Below is a quick description of how to set up complete replication on -your current @strong{MySQL} server. It assumes you want to replicate all +your current MySQL server. It assumes you want to replicate all your databases and have not configured replication before. You will need to shutdown your master server briefly to complete the steps outlined below. @enumerate @item -Make sure you have a recent version of @strong{MySQL} installed on the master +Make sure you have a recent version of MySQL installed on the master and slave(s). Use Version 3.23.29 or higher. Previous releases used a different binary @@ -23120,7 +23120,7 @@ GRANT FILE ON *.* TO repl@@"%" IDENTIFIED BY '<password>'; @end example @item -Shut down @strong{MySQL} on the master. +Shut down MySQL on the master. @example mysqladmin -u root -p<password> shutdown @@ -23155,7 +23155,7 @@ server-id=1 @end example @item -Restart @strong{MySQL} on the master. +Restart MySQL on the master. @item Add the following to @code{my.cnf} on the slave(s): @@ -23182,7 +23182,7 @@ binary log. @item Copy the snapshot data into your data directory on your slave(s). Make sure that the privileges on the files and directories are correct. The -user which @strong{MySQL} runs as needs to be able to read and write to +user which MySQL runs as needs to be able to read and write to them, just as on the master. @item Restart the slave(s). @@ -23274,7 +23274,7 @@ In earlier versions temporary tables are not being replicated properly - we recommend that you either upgrade, or execute @code{SET SQL_LOG_BIN=0} on your clients before all queries with temp tables. @item -@strong{MySQL} only supports one master and many slaves. We will in 4.x +MySQL only supports one master and many slaves. We will in 4.x add a voting algorithm to automatically change master if something goes wrong with the current master. We will also introduce 'agent' processes to help doing load balancing by sending select queries to different @@ -23367,7 +23367,7 @@ to get rid of old logs while the slave is running. @node Replication Options, Replication SQL, Replication Features, Replication @subsection Replication Options in my.cnf -If you are using replication, we recommend you to use @strong{MySQL} Version +If you are using replication, we recommend you to use MySQL Version 3.23.30 or later. Older versions work, but they do have some bugs and are missing some features. @@ -23686,14 +23686,14 @@ can connect. After 3.23.26, we have locked the replication protocol for modifications, so you can upgrade masters and slave on the fly to a newer 3.23 version and you -can have different versions of @strong{MySQL} running on the slave and the +can have different versions of MySQL running on the slave and the master, as long as they are both newer than 3.23.26. @cindex replication, two-way @strong{Q}: What issues should I be aware of when setting up two-way replication? -@strong{A}: @strong{MySQL} replication currently does not support any +@strong{A}: MySQL replication currently does not support any locking protocol between master and slave to guarantee the atomicity of a distributed (cross-server) update. In in other words, it is possible for client A to make an update to co-master 1, and in the meantime, @@ -23768,7 +23768,7 @@ functions, for example, to log how long each query took, or which query, among your many thousands, gave you an error. If you have written a lot of code already, you may want to automate the conversion task by using Monty's @code{replace} utility, which comes with the standard distribution of -@strong{MySQL}, or just write your own Perl script. Hopefully, your +MySQL, or just write your own Perl script. Hopefully, your code follows some recognizable pattern. If not, then you are probably better off re-writing it anyway, or at least going through and manually beating it into a pattern. @@ -23778,10 +23778,10 @@ functions. What is important is having unified interface for connecting for reads, connecting for writes, doing a read, and doing a write. -@strong{Q}: When and how much can @strong{MySQL} replication improve the performance +@strong{Q}: When and how much can MySQL replication improve the performance of my system? -@strong{A}: @strong{MySQL} replication is most beneficial for a system +@strong{A}: MySQL replication is most beneficial for a system with frequent reads and not so frequent writes. In theory, by using a one master/many slaves setup you can scale by adding more slaves until you either run out of network bandwidth, or your update @@ -23877,7 +23877,7 @@ directly). @end itemize We are currently working on integrating an automatic master election -system into @strong{MySQL}, but until it is ready, you will have to +system into MySQL, but until it is ready, you will have to create your own monitoring tools. @@ -24030,7 +24030,7 @@ the more optimal you want your system to become the more you will have to know about it. This chapter will try to explain and give some examples of different -ways to optimize @strong{MySQL}. Remember, however, that there are +ways to optimize MySQL. Remember, however, that there are always some (increasingly harder) additional ways to make the system even faster. @@ -24085,7 +24085,7 @@ for most systems, but one should be aware of it. @cindex design, limitations @cindex limitations, design -Because @strong{MySQL} uses extremely fast table locking (multiple readers / +Because MySQL uses extremely fast table locking (multiple readers / single writers) the biggest remaining problem is a mix of a steady stream of inserts and slow selects on the same table. @@ -24113,7 +24113,7 @@ application that is fast with many databases it becomes even harder! To make a complex application portable you need to choose a number of SQL servers that it should work with. -You can use the @strong{MySQL} crash-me program/web-page +You can use the MySQL crash-me program/web-page @uref{http://www.mysql.com/information/crash-me.php} to find functions, types, and limits you can use with a selection of database servers. Crash-me now tests far from everything possible, but it @@ -24122,11 +24122,11 @@ is still comprehensive with about 450 things tested. For example, you shouldn't have column names longer than 18 characters if you want to be able to use Informix or DB2. -Both the @strong{MySQL} benchmarks and crash-me programs are very +Both the MySQL benchmarks and crash-me programs are very database-independent. By taking a look at how we have handled this, you can get a feeling for what you have to do to write your application database-independent. The benchmarks themselves can be found in the -@file{sql-bench} directory in the @strong{MySQL} source +@file{sql-bench} directory in the MySQL source distribution. They are written in Perl with DBI database interface (which solves the access part of the problem). @@ -24138,7 +24138,7 @@ is, they have different design compromises that lead to different behavior. If you strive for database independence, you need to get a good feeling -for each SQL server's bottlenecks. @strong{MySQL} is VERY fast in +for each SQL server's bottlenecks. MySQL is VERY fast in retrieving and updating things, but will have a problem in mixing slow readers/writers on the same table. Oracle, on the other hand, has a big problem when you try to access rows that you have recently updated @@ -24152,10 +24152,10 @@ C++ is available on most systems, it makes sense to use a C++ classes interface to the databases. If you use some specific feature for some database (like the -@code{REPLACE} command in @strong{MySQL}), you should code a method for +@code{REPLACE} command in MySQL), you should code a method for the other SQL servers to implement the same feature (but slower). With -@strong{MySQL} you can use the @code{/*! */} syntax to add -@strong{MySQL}-specific keywords to a query. The code inside +MySQL you can use the @code{/*! */} syntax to add +MySQL-specific keywords to a query. The code inside @code{/**/} will be treated as a comment (ignored) by most other SQL servers. @@ -24178,7 +24178,7 @@ be refreshed. @cindex uses, of MySQL @cindex customers, of MySQL -During @strong{MySQL} initial development, the features of @strong{MySQL} +During MySQL initial development, the features of MySQL were made to fit our largest customer. They handle data warehousing for a couple of the biggest retailers in Sweden. @@ -24243,11 +24243,11 @@ going. Hopefully this will be better handled in future Linux Kernels. @cindex benchmark suite @cindex crash-me program -This should contain a technical description of the @strong{MySQL} +This should contain a technical description of the MySQL benchmark suite (and @code{crash-me}), but that description is not written yet. Currently, you can get a good idea of the benchmark by looking at the code and results in the @file{sql-bench} directory in any -@strong{MySQL} source distributions. +MySQL source distributions. This benchmark suite is meant to be a benchmark that will tell any user what things a given SQL implementation performs well or poorly at. @@ -24282,7 +24282,7 @@ For example, (run on the same NT 4.0 machine): @item sybase_odbc @tab 4802 @end multitable -In the above test @strong{MySQL} was run with a 8M index cache. +In the above test MySQL was run with a 8M index cache. We have gather some more benchmark results at @uref{http://www.mysql.com/information/benchmarks.html}. @@ -24293,7 +24293,7 @@ Oracle benchmarks @strong{VERY} biased because the above benchmarks are supposed to show what a standard installation can do for a single client. -To run the benchmark suite, you have to download a @strong{MySQL} source +To run the benchmark suite, you have to download a MySQL source distribution, install the perl DBI driver, the perl DBD driver for the database you want to test and then do: @@ -24341,8 +24341,8 @@ application is sufficient, you should at least make a plan for each bottleneck, and decide how to solve it if someday you really need the extra performance. -For an example of portable benchmark programs, look at the @strong{MySQL} -benchmark suite. @xref{MySQL Benchmarks, , @strong{MySQL} Benchmarks}. You +For an example of portable benchmark programs, look at the MySQL +benchmark suite. @xref{MySQL Benchmarks, , MySQL Benchmarks}. You can take any program from this suite and modify it for your needs. By doing this, you can try different solutions to your problem and test which is really the fastest solution for you. @@ -24373,13 +24373,13 @@ so make sure to use it only on your development systems. First, one thing that affects all queries: The more complex permission system setup you have, the more overhead you get. -If you do not have any @code{GRANT} statements done, @strong{MySQL} will +If you do not have any @code{GRANT} statements done, MySQL will optimize the permission checking somewhat. So if you have a very high volume it may be worth the time to avoid grants. Otherwise more permission check results in a larger overhead. -If your problem is with some explicit @strong{MySQL} function, you can -always time this in the @strong{MySQL} client: +If your problem is with some explicit MySQL function, you can +always time this in the MySQL client: @example mysql> select benchmark(1000000,1+1); @@ -24391,10 +24391,10 @@ mysql> select benchmark(1000000,1+1); 1 row in set (0.32 sec) @end example -The above shows that @strong{MySQL} can execute 1,000,000 @code{+} +The above shows that MySQL can execute 1,000,000 @code{+} expressions in 0.32 seconds on a @code{PentiumII 400MHz}. -All @strong{MySQL} functions should be very optimized, but there may be +All MySQL functions should be very optimized, but there may be some exceptions, and the @code{benchmark(loop_count,expression)} is a great tool to find out if this is a problem with your query. @@ -24428,7 +24428,7 @@ or EXPLAIN SELECT select_options @code{SHOW COLUMNS FROM tbl_name}. When you precede a @code{SELECT} statement with the keyword @code{EXPLAIN}, -@strong{MySQL} explains how it would process the @code{SELECT}, providing +MySQL explains how it would process the @code{SELECT}, providing information about how tables are joined and in which order. With the help of @code{EXPLAIN}, you can see when you must add indexes @@ -24439,8 +24439,8 @@ order. To force the optimizer to use a specific join order for a For non-simple joins, @code{EXPLAIN} returns a row of information for each table used in the @code{SELECT} statement. The tables are listed in the order -they would be read. @strong{MySQL} resolves all joins using a single-sweep -multi-join method. This means that @strong{MySQL} reads a row from the first +they would be read. MySQL resolves all joins using a single-sweep +multi-join method. This means that MySQL reads a row from the first table, then finds a matching row in the second table, then in the third table and so on. When all tables are processed, it outputs the selected columns and backtracks through the table list until a table is found for which there are @@ -24457,7 +24457,7 @@ The table to which the row of output refers. The join type. Information about the various types is given below. @item possible_keys -The @code{possible_keys} column indicates which indexes @strong{MySQL} +The @code{possible_keys} column indicates which indexes MySQL could use to find the rows in this table. Note that this column is totally independent of the order of the tables. That means that some of the keys in possible_keys may not be usable in practice with the @@ -24472,39 +24472,39 @@ and check the query with @code{EXPLAIN} again. @xref{ALTER TABLE}. To see what indexes a table has, use @code{SHOW INDEX FROM tbl_name}. @item key -The @code{key} column indicates the key that @strong{MySQL} actually +The @code{key} column indicates the key that MySQL actually decided to use. The key is @code{NULL} if no index was chosen. If -@strong{MySQL} chooses the wrong index, you can probably force -@strong{MySQL} to use another index by using @code{myisamchk --analyze}, +MySQL chooses the wrong index, you can probably force +MySQL to use another index by using @code{myisamchk --analyze}, @xref{myisamchk syntax}, or by using @code{USE INDEX/IGNORE INDEX}. @xref{JOIN}. @item key_len The @code{key_len} column indicates the length of the key that -@strong{MySQL} decided to use. The length is @code{NULL} if the +MySQL decided to use. The length is @code{NULL} if the @code{key} is @code{NULL}. Note that this tells us how many parts of a -multi-part key @strong{MySQL} will actually use. +multi-part key MySQL will actually use. @item ref The @code{ref} column shows which columns or constants are used with the @code{key} to select rows from the table. @item rows -The @code{rows} column indicates the number of rows @strong{MySQL} +The @code{rows} column indicates the number of rows MySQL believes it must examine to execute the query. @item Extra -This column contains additional information of how @strong{MySQL} will +This column contains additional information of how MySQL will resolve the query. Here is an explanation of the different text strings that can be found in this column: @table @code @item Distinct -@strong{MySQL} will not continue searching for more rows for the current row +MySQL will not continue searching for more rows for the current row combination after it has found the first matching row. @item Not exists -@strong{MySQL} was able to do a @code{LEFT JOIN} optimization on the +MySQL was able to do a @code{LEFT JOIN} optimization on the query and will not examine more rows in this table for the previous row combination after it finds one row that matches the @code{LEFT JOIN} criteria. @@ -24515,23 +24515,23 @@ SELECT * FROM t1 LEFT JOIN t2 ON t1.id=t2.id WHERE t2.id IS NULL; @end example Assume that @code{t2.id} is defined with @code{NOT NULL}. In this case -@strong{MySQL} will scan @code{t1} and look up the rows in @code{t2} -through @code{t1.id}. If @strong{MySQL} finds a matching row in +MySQL will scan @code{t1} and look up the rows in @code{t2} +through @code{t1.id}. If MySQL finds a matching row in @code{t2}, it knows that @code{t2.id} can never be @code{NULL}, and will not scan through the rest of the rows in @code{t2} that has the same -@code{id}. In other words, for each row in @code{t1}, @strong{MySQL} +@code{id}. In other words, for each row in @code{t1}, MySQL only needs to do a single lookup in @code{t2}, independent of how many matching rows there are in @code{t2}. @item @code{range checked for each record (index map: #)} -@strong{MySQL} didn't find a real good index to use. It will, instead, for +MySQL didn't find a real good index to use. It will, instead, for each row combination in the preceding tables, do a check on which index to use (if any), and use this index to retrieve the rows from the table. This isn't very fast but is faster than having to do a join without an index. @item Using filesort -@strong{MySQL} will need to do an extra pass to find out how to retrieve +MySQL will need to do an extra pass to find out how to retrieve the rows in sorted order. The sort is done by going through all rows according to the @code{join type} and storing the sort key + pointer to the row for all rows that match the @code{WHERE}. Then the keys are @@ -24544,7 +24544,7 @@ read the actual row. This can be done when all the used columns for the table are part of the same index. @item Using temporary -To resolve the query @strong{MySQL} will need to create a +To resolve the query MySQL will need to create a temporary table to hold the result. This typically happens if you do an @code{ORDER BY} on a different column set than you did a @code{GROUP BY} on. @@ -24614,7 +24614,7 @@ earlier tables. You can get a good indication of how good a join is by multiplying all values in the @code{rows} column of the @code{EXPLAIN} output. This should tell you -roughly how many rows @strong{MySQL} must examine to execute the query. This +roughly how many rows MySQL must examine to execute the query. This number is also used when you restrict queries with the @code{max_join_size} variable. @xref{Server parameters}. @@ -24684,13 +24684,13 @@ tt ALL AssignedPC,ClientID,ActualPC NULL NULL NULL 3872 @end example Because @code{type} is @code{ALL} for each table, this output indicates that -@strong{MySQL} is doing a full join for all tables! This will take quite a +MySQL is doing a full join for all tables! This will take quite a long time, as the product of the number of rows in each table must be examined! For the case at hand, this is @code{74 * 2135 * 74 * 3872 = 45,268,558,720} rows. If the tables were bigger, you can only imagine how long it would take. -One problem here is that @strong{MySQL} can't (yet) use indexes on columns +One problem here is that MySQL can't (yet) use indexes on columns efficiently if they are declared differently. In this context, @code{VARCHAR} and @code{CHAR} are the same unless they are declared as different lengths. Because @code{tt.ActualPC} is declared as @code{CHAR(10)} @@ -24742,9 +24742,9 @@ do eq_ref PRIMARY PRIMARY 15 tt.ClientID 1 This is almost as good as it can get. -The remaining problem is that, by default, @strong{MySQL} assumes that values +The remaining problem is that, by default, MySQL assumes that values in the @code{tt.ActualPC} column are evenly distributed, and that isn't the -case for the @code{tt} table. Fortunately, it is easy to tell @strong{MySQL} +case for the @code{tt} table. Fortunately, it is easy to tell MySQL about this: @example @@ -24763,7 +24763,7 @@ do eq_ref PRIMARY PRIMARY 15 tt.ClientID 1 @end example Note that the @code{rows} column in the output from @code{EXPLAIN} is an -educated guess from the @strong{MySQL} join optimizer. To optimize a +educated guess from the MySQL join optimizer. To optimize a query, you should check if the numbers are even close to the truth. If not, you may get better performance by using @code{STRAIGHT_JOIN} in your @code{SELECT} statement and trying to list the tables in a different order in @@ -24784,7 +24784,7 @@ index is probably cached). For bigger tables, you can estimate that log(index_block_length / 3 * 2 / (index_length + data_pointer_length)) + 1} seeks to find a row. -In @strong{MySQL} an index block is usually 1024 bytes and the data +In MySQL an index block is usually 1024 bytes and the data pointer is usually 4 bytes. A 500,000 row table with an index length of 3 (medium integer) gives you: @code{log(500,000)/log(1024/3*2/(3+4)) + 1} = 4 seeks. @@ -24816,7 +24816,7 @@ the data grows. @xref{Server parameters}. In general, when you want to make a slow @code{SELECT ... WHERE} faster, the first thing to check is whether or not you can add an index. @xref{MySQL -indexes, , @strong{MySQL} indexes}. All references between different tables +indexes, , MySQL indexes}. All references between different tables should usually be done with indexes. You can use the @code{EXPLAIN} command to determine which indexes are used for a @code{SELECT}. @xref{EXPLAIN, , @code{EXPLAIN}}. @@ -24825,11 +24825,11 @@ Some general tips: @itemize @bullet @item -To help @strong{MySQL} optimize queries better, run @code{myisamchk +To help MySQL optimize queries better, run @code{myisamchk --analyze} on a table after it has been loaded with relevant data. This updates a value for each index part that indicates the average number of rows that have the same value. (For unique indexes, this is always 1, -of course.). @strong{MySQL} will use this to decide which index to +of course.). MySQL will use this to decide which index to choose when you connect two tables with 'a non-constant expression'. You can check the result from the @code{analyze} run by doing @code{SHOW INDEX FROM table_name} and examining the @code{Cardinality} column. @@ -24855,10 +24855,10 @@ The @code{WHERE} optimizations are put in the @code{SELECT} part here because they are mostly used with @code{SELECT}, but the same optimizations apply for @code{WHERE} in @code{DELETE} and @code{UPDATE} statements. -Also note that this section is incomplete. @strong{MySQL} does many +Also note that this section is incomplete. MySQL does many optimizations, and we have not had time to document them all. -Some of the optimizations performed by @strong{MySQL} are listed below: +Some of the optimizations performed by MySQL are listed below: @itemize @bullet @item @@ -24886,7 +24886,7 @@ Constant expressions used by indexes are evaluated only once. directly from the table information. This is also done for any @code{NOT NULL} expression when used with only one table. @item -Early detection of invalid constant expressions. @strong{MySQL} quickly +Early detection of invalid constant expressions. MySQL quickly detects that some @code{SELECT} statements are impossible and returns no rows. @item @code{HAVING} is merged with @code{WHERE} if you don't use @code{GROUP BY} @@ -24926,13 +24926,13 @@ clause, or if the @code{ORDER BY} or @code{GROUP BY} contains columns from tables other than the first table in the join queue, a temporary table is created. @item -If you use @code{SQL_SMALL_RESULT}, @strong{MySQL} will use an in-memory +If you use @code{SQL_SMALL_RESULT}, MySQL will use an in-memory temporary table. @item Each table index is queried, and the best index that spans fewer than 30% of the rows is used. If no such index can be found, a quick table scan is used. @item -In some cases, @strong{MySQL} can read rows from the index without even +In some cases, MySQL can read rows from the index without even consulting the data file. If all columns used from the index are numeric, then only the index tree is used to resolve the query. @item @@ -24983,10 +24983,10 @@ mysql> SELECT ... FROM tbl_name ORDER BY key_part1 DESC,key_part2 DESC,... ; @code{DISTINCT} combined with @code{ORDER BY} will in many cases also need a temporary table. -When combining @code{LIMIT #} with @code{DISTINCT}, @strong{MySQL} will stop +When combining @code{LIMIT #} with @code{DISTINCT}, MySQL will stop as soon as it finds @code{#} unique rows. -If you don't use columns from all used tables, @strong{MySQL} will stop +If you don't use columns from all used tables, MySQL will stop the scanning of the not used tables as soon as it has found the first match. @example @@ -24994,7 +24994,7 @@ SELECT DISTINCT t1.a FROM t1,t2 where t1.a=t2.a; @end example In the case, assuming t1 is used before t2 (check with @code{EXPLAIN}), then -@strong{MySQL} will stop reading from t2 (for that particular row in t1) +MySQL will stop reading from t2 (for that particular row in t1) when the first row in t2 is found. @@ -25005,7 +25005,7 @@ when the first row in t2 is found. @cindex optimizing, LEFT JOIN -@code{A LEFT JOIN B} in @strong{MySQL} is implemented as follows: +@code{A LEFT JOIN B} in MySQL is implemented as follows: @itemize @bullet @item @@ -25019,7 +25019,7 @@ All @code{LEFT JOIN} conditions are moved to the @code{WHERE} clause. @item All standard join optimizations are done, with the exception that a table is always read after all tables it is dependent on. If there is a circular -dependence then @strong{MySQL} will issue an error. +dependence then MySQL will issue an error. @item All standard @code{WHERE} optimizations are done. @item @@ -25030,7 +25030,7 @@ then an extra @code{B} row is generated with all columns set to @code{NULL}. If you use @code{LEFT JOIN} to find rows that don't exist in some table and you have the following test: @code{column_name IS NULL} in the @code{WHERE} part, where column_name is a column that is declared as -@code{NOT NULL}, then @strong{MySQL} will stop searching after more rows +@code{NOT NULL}, then MySQL will stop searching after more rows (for a particular key combination) after it has found one row that matches the @code{LEFT JOIN} condition. @end itemize @@ -25048,7 +25048,7 @@ Note that the above means that if you do a query of type: SELECT * FROM a,b LEFT JOIN c ON (c.key=a.key) LEFT JOIN d (d.key=a.key) WHERE b.key=d.key @end example -@strong{MySQL} will do a full scan on @code{b} as the @code{LEFT +MySQL will do a full scan on @code{b} as the @code{LEFT JOIN} will force it to be read before @code{d}. The fix in this case is to change the query to: @@ -25065,20 +25065,20 @@ SELECT * FROM b,a LEFT JOIN c ON (c.key=a.key) LEFT JOIN d (d.key=a.key) WHERE b @cindex optimizing, LIMIT -In some cases @strong{MySQL} will handle the query differently when you are +In some cases MySQL will handle the query differently when you are using @code{LIMIT #} and not using @code{HAVING}: @itemize @bullet @item -If you are selecting only a few rows with @code{LIMIT}, @strong{MySQL} +If you are selecting only a few rows with @code{LIMIT}, MySQL will use indexes in some cases when it normally would prefer to do a full table scan. @item -If you use @code{LIMIT #} with @code{ORDER BY}, @strong{MySQL} will end the +If you use @code{LIMIT #} with @code{ORDER BY}, MySQL will end the sorting as soon as it has found the first @code{#} lines instead of sorting the whole table. @item -When combining @code{LIMIT #} with @code{DISTINCT}, @strong{MySQL} will stop +When combining @code{LIMIT #} with @code{DISTINCT}, MySQL will stop as soon as it finds @code{#} unique rows. @item In some cases a @code{GROUP BY} can be resolved by reading the key in order @@ -25086,7 +25086,7 @@ In some cases a @code{GROUP BY} can be resolved by reading the key in order key value changes. In this case @code{LIMIT #} will not calculate any unnecessary @code{GROUP BY}'s. @item -As soon as @strong{MySQL} has sent the first @code{#} rows to the client, it +As soon as MySQL has sent the first @code{#} rows to the client, it will abort the query. @item @code{LIMIT 0} will always quickly return an empty set. This is useful @@ -25184,7 +25184,7 @@ flush-tables}. @end enumerate This procedure will be built into @code{LOAD DATA INFILE} in some future -version of @strong{MySQL}. +version of MySQL. @item You can speed up insertions by locking your tables: @@ -25216,7 +25216,7 @@ use locking, 2, 3, and 4 probably will not finish before 1 or 5, but the total time should be about 40% faster. As @code{INSERT}, @code{UPDATE}, and @code{DELETE} operations are very -fast in @strong{MySQL}, you will obtain better overall performance by +fast in MySQL, you will obtain better overall performance by adding locks around everything that does more than about 5 inserts or updates in a row. If you do very many inserts in a row, you could do a @code{LOCK TABLES} followed by an @code{UNLOCK TABLES} once in a while @@ -25275,7 +25275,7 @@ lot of new connections to the database, you may want to change the value of the @code{thread_cache_size} variable. @xref{Server parameters}. @item Always check that all your queries really use the indexes you have created -in the tables. In @strong{MySQL} you can do this with the @code{EXPLAIN} +in the tables. In MySQL you can do this with the @code{EXPLAIN} command. @xref{EXPLAIN, Explain, Explain, manual}. @item Try to avoid complex @code{SELECT} queries on tables that are updated a @@ -25293,7 +25293,7 @@ changes to the table, you may be able to get higher performance. In some cases it may make sense to introduce a column that is 'hashed' based on information from other columns. If this column is short and reasonably unique it may be much faster than a big index on many -columns. In @strong{MySQL} it's very easy to use this extra column: +columns. In MySQL it's very easy to use this extra column: @code{SELECT * FROM table_name WHERE hash=MD5(concat(col1,col2)) AND col_1='constant' AND col_2='constant'} @item @@ -25317,7 +25317,7 @@ introduce a new table and update the counter in real time. An update of type @code{UPDATE table set count=count+1 where index_column=constant} is very fast! -This is really important when you use databases like @strong{MySQL} that +This is really important when you use databases like MySQL that only have table locking (multiple readers / single writers). This will also give better performance with most databases, as the row locking manager in this case will have less to do. @@ -25335,7 +25335,7 @@ summary tables that are generated from the actual data. @item Take advantage of the fact that columns have default values. Insert values explicitly only when the value to be inserted differs from the -default. This reduces the parsing that @strong{MySQL} need to do and +default. This reduces the parsing that MySQL need to do and improves the insert speed. @item In some cases it's convenient to pack and store data into a blob. In this @@ -25356,7 +25356,7 @@ support this. @item You can always gain something by caching queries/answers in your application and trying to do many inserts/updates at the same time. If -your database supports lock tables (like @strong{MySQL} and Oracle), +your database supports lock tables (like MySQL and Oracle), this should help to ensure that the index cache is only flushed once after all updates. @item @@ -25407,13 +25407,13 @@ to other SQL servers you should keep them shorter than 18 characters. @item If you need REALLY high speed, you should take a look at the low-level interfaces for data storage that the different SQL servers support! For -example, by accessing the @strong{MySQL} @code{MyISAM} directly, you could +example, by accessing the MySQL @code{MyISAM} directly, you could get a speed increase of 2-5 times compared to using the SQL interface. To be able to do this the data must be on the same server as the application, and usually it should only be accessed by one process (because external file locking is really slow). One could eliminate the above problems by introducing low-level @code{MyISAM} commands in the -@strong{MySQL} server (this could be one easy way to get more +MySQL server (this could be one easy way to get more performance if needed). By carefully designing the database interface, it should be quite easy to support this types of optimization. @item @@ -25455,11 +25455,11 @@ from the data, you should not lose anything by using @code{DELAY_KEY_WRITE}. You can find a discussion about different locking methods in the appendix. @xref{Locking methods}. -All locking in @strong{MySQL} is deadlock-free. This is managed by always +All locking in MySQL is deadlock-free. This is managed by always requesting all needed locks at once at the beginning of a query and always locking the tables in the same order. -The locking method @strong{MySQL} uses for @code{WRITE} locks works as follows: +The locking method MySQL uses for @code{WRITE} locks works as follows: @itemize @bullet @item @@ -25468,7 +25468,7 @@ If there are no locks on the table, put a write lock on it. Otherwise, put the lock request in the write lock queue. @end itemize -The locking method @strong{MySQL} uses for @code{READ} locks works as follows: +The locking method MySQL uses for @code{READ} locks works as follows: @itemize @bullet @item @@ -25515,21 +25515,21 @@ priority, which might help some applications. @cindex problems, table locking -The table locking code in @strong{MySQL} is deadlock free. +The table locking code in MySQL is deadlock free. -@strong{MySQL} uses table locking (instead of row locking or column +MySQL uses table locking (instead of row locking or column locking) on all table types, except @code{BDB} tables, to achieve a very high lock speed. For large tables, table locking is MUCH better than row locking for most applications, but there are, of course, some pitfalls. -For @code{BDB} and @code{InnoDB} tables, @strong{MySQL} only uses table +For @code{BDB} and @code{InnoDB} tables, MySQL only uses table locking if you explicitely lock the table with @code{LOCK TABLES} or execute a command that will modify every row in the table, like @code{ALTER TABLE}. For these table types we recommend you to not use @code{LOCK TABLES} at all. -In @strong{MySQL} Version 3.23.7 and above, you can insert rows into +In MySQL Version 3.23.7 and above, you can insert rows into @code{MyISAM} tables at the same time other threads are reading from the table. Note that currently this only works if there are no holes after deleted rows in the table at the time the insert is made. When all holes @@ -25549,8 +25549,8 @@ queries against a specific table. (You can change this by using LOW_PRIORITY with the statement that does the update or @code{HIGH_PRIORITY} with the @code{SELECT} statement.) -Starting from @strong{MySQL} Version 3.23.7 one can use the -@code{max_write_lock_count} variable to force @strong{MySQL} to +Starting from MySQL Version 3.23.7 one can use the +@code{max_write_lock_count} variable to force MySQL to temporary give all @code{SELECT} statements, that wait for a table, a higher priority after a specific number of inserts on a table. @@ -25642,9 +25642,9 @@ option to @code{DELETE} may help. @xref{DELETE, , @code{DELETE}}. @cindex database design @cindex storage of data -@strong{MySQL} keeps row data and index data in separate files. Many (almost +MySQL keeps row data and index data in separate files. Many (almost all) other databases mix row and index data in the same file. We believe that -the @strong{MySQL} choice is better for a very wide range of modern systems. +the MySQL choice is better for a very wide range of modern systems. Another way to store the row data is to keep the information for each column in a separate area (examples are SDBM and Focus). This will cause a @@ -25690,7 +25690,7 @@ give huge improvements because disk reads are faster and normally less main memory will be used. Indexing also takes less resources if done on smaller columns. -@strong{MySQL} supports a lot of different table types and row formats. +MySQL supports a lot of different table types and row formats. Choosing the right table format may give you a big performance gain. @xref{Table types}. @@ -25699,7 +25699,7 @@ using the techniques listed below: @itemize @bullet @item -Use the most efficient (smallest) types possible. @strong{MySQL} has +Use the most efficient (smallest) types possible. MySQL has many specialized types that save disk space and memory. @item @@ -25736,7 +25736,7 @@ first to get better compression of the index. @item If it's very likely that a column has a unique prefix on the first number -of characters, it's better to only index this prefix. @strong{MySQL} +of characters, it's better to only index this prefix. MySQL supports an index on a part of a character column. Shorter indexes are faster not only because they take less disk space but also because they will give you more hits in the index cache and thus fewer disk @@ -25756,16 +25756,16 @@ can be used to find the relevant rows when scanning the table. @cindex indexes, use of Indexes are used to find rows with a specific value of one column -fast. Without an index @strong{MySQL} has to start with the first record +fast. Without an index MySQL has to start with the first record and then read through the whole table until it finds the relevant rows. The bigger the table, the more this costs. If the table has an index -for the columns in question, @strong{MySQL} can quickly get a position to +for the columns in question, MySQL can quickly get a position to seek to in the middle of the data file without having to look at all the data. If a table has 1000 rows, this is at least 100 times faster than reading sequentially. Note that if you need to access almost all 1000 rows it is faster to read sequentially because we then avoid disk seeks. -All @strong{MySQL} indexes (@code{PRIMARY}, @code{UNIQUE}, and +All MySQL indexes (@code{PRIMARY}, @code{UNIQUE}, and @code{INDEX}) are stored in B-trees. Strings are automatically prefix- and end-space compressed. @xref{CREATE INDEX, , @code{CREATE INDEX}}. @@ -25781,7 +25781,7 @@ Retrieve rows from other tables when performing joins. Find the @code{MAX()} or @code{MIN()} value for a specific indexed column. This is optimized by a preprocessor that checks if you are using @code{WHERE} key_part_# = constant on all key parts < N. In this case -@strong{MySQL} will do a single key lookup and replace the @code{MIN()} +MySQL will do a single key lookup and replace the @code{MIN()} expression with a constant. If all expressions are replaced with constants, the query will return at once: @@ -25837,7 +25837,7 @@ have a three-column index on @code{(col1,col2,col3)}, you have indexed search capabilities on @code{(col1)}, @code{(col1,col2)}, and @code{(col1,col2,col3)}. -@strong{MySQL} can't use a partial index if the columns don't form a +MySQL can't use a partial index if the columns don't form a leftmost prefix of the index. Suppose you have the @code{SELECT} statements shown below: @@ -25856,7 +25856,7 @@ leftmost prefixes of @code{(col1,col2,col3)}. @findex LIKE, and wildcards @cindex indexes, and @code{LIKE} @cindex wildcards, and @code{LIKE} -@strong{MySQL} also uses indexes for @code{LIKE} comparisons if the argument +MySQL also uses indexes for @code{LIKE} comparisons if the argument to @code{LIKE} is a constant string that doesn't start with a wild-card character. For example, the following @code{SELECT} statements use indexes: @@ -25884,7 +25884,7 @@ constant. Searching using @code{column_name IS NULL} will use indexes if column_name is an index. -@strong{MySQL} normally uses the index that finds the least number of rows. An +MySQL normally uses the index that finds the least number of rows. An index is used for columns that you compare with the following operators: @code{=}, @code{>}, @code{>=}, @code{<}, @code{<=}, @code{BETWEEN}, and a @code{LIKE} with a non-wild-card prefix like @code{'something%'}. @@ -25910,16 +25910,16 @@ These @code{WHERE} clauses do @strong{NOT} use indexes: ... WHERE index_part1=1 OR index_part2=10 /* No index spans all rows */ @end example -Note that in some cases @strong{MySQL} will not use an index, even if one +Note that in some cases MySQL will not use an index, even if one would be available. Some of the cases where this happens are: @itemize @bullet @item -If the use of the index would require @strong{MySQL} to access more +If the use of the index would require MySQL to access more than 30 % of the rows in the table. (In this case a table scan is probably much faster, as this will require us to do much fewer seeks). Note that if such a query uses @code{LIMIT} to only retrieve -part of the rows, @strong{MySQL} will use an index anyway, as it can +part of the rows, MySQL will use an index anyway, as it can much more quickly find the few rows to return in the result. @end itemize @@ -25940,7 +25940,7 @@ much more quickly find the few rows to return in the result. @cindex columns, indexes @cindex keys -All @strong{MySQL} column types can be indexed. Use of indexes on the +All MySQL column types can be indexed. Use of indexes on the relevant columns is the best way to improve the performance of @code{SELECT} operations. @@ -25969,7 +25969,7 @@ mysql> CREATE TABLE test ( For @code{BLOB} and @code{TEXT} columns, you must index a prefix of the column. You cannot index the entire column. -In @strong{MySQL} Version 3.23.23 or later, you can also create special +In MySQL Version 3.23.23 or later, you can also create special @strong{FULLTEXT} indexes. They are used for full-text search. Only the @code{MyISAM} table type supports @code{FULLTEXT} indexes. They can be created only from @code{VARCHAR} and @code{TEXT} columns. @@ -25983,14 +25983,14 @@ supported. See @ref{Fulltext Search} for details. @cindex indexes, multi-column @cindex keys, multi-column -@strong{MySQL} can create indexes on multiple columns. An index may +MySQL can create indexes on multiple columns. An index may consist of up to 15 columns. (On @code{CHAR} and @code{VARCHAR} columns you can also use a prefix of the column as a part of an index). A multiple-column index can be considered a sorted array containing values that are created by concatenating the values of the indexed columns. -@strong{MySQL} uses multiple-column indexes in such a way that queries are +MySQL uses multiple-column indexes in such a way that queries are fast when you specify a known quantity for the first column of the index in a @code{WHERE} clause, even if you don't specify values for the other columns. @@ -26033,8 +26033,8 @@ mysql> SELECT * FROM test WHERE last_name="Widenius" OR first_name="Michael"; @end example -For more information on the manner in which @strong{MySQL} uses indexes to -improve query performance, see @ref{MySQL indexes, , @strong{MySQL} +For more information on the manner in which MySQL uses indexes to +improve query performance, see @ref{MySQL indexes, , MySQL indexes}. @@ -26126,7 +26126,7 @@ Uptime: 426 Running threads: 1 Questions: 11082 Reloads: 1 Open tables: 12 This can be somewhat perplexing if you only have 6 tables. -@strong{MySQL} is multithreaded, so it may have many queries on the same +MySQL is multithreaded, so it may have many queries on the same table simultaneously. To minimize the problem with two threads having different states on the same file, the table is opened independently by each concurrent thread. This takes some memory and one extra file @@ -26170,7 +26170,7 @@ released (XFS/Reiserfs). If you have a desperate need for files bigger than 2G on Linux-intel 32 bit, you should get the LFS patch for the ext2 file system. -Because we have not run @strong{MySQL} in production on that many platforms, we +Because we have not run MySQL in production on that many platforms, we advice you to test your intended platform before choosing it, if possible. @cindex locking @@ -26181,8 +26181,8 @@ If you have enough RAM, you could remove all swap devices. Some operating systems will use a swap device in some contexts even if you have free memory. @item -Use the @code{--skip-locking} @strong{MySQL} option to avoid external -locking. Note that this will not impact @strong{MySQL}'s functionality as +Use the @code{--skip-locking} MySQL option to avoid external +locking. Note that this will not impact MySQL's functionality as long as you only run one server. Just remember to take down the server (or lock relevant parts) before you run @code{myisamchk}. On some system this switch is mandatory because the external locking does not work in any @@ -26194,7 +26194,7 @@ MIT-pthreads on all platforms. It's also on default for Linux as Linux file locking are not yet safe. The only case when you can't use @code{--skip-locking} is if you run -multiple @strong{MySQL} @emph{servers} (not clients) on the same data, +multiple MySQL @emph{servers} (not clients) on the same data, or run @code{myisamchk} on the table without first flushing and locking the @code{mysqld} server tables first. @@ -26279,11 +26279,11 @@ section in this manual. @xref{SHOW VARIABLES}. You can also see some statistics from a running server by issuing the command @code{SHOW STATUS}. @xref{SHOW STATUS}. -@strong{MySQL} uses algorithms that are very scalable, so you can usually -run with very little memory. If you, however, give @strong{MySQL} more +MySQL uses algorithms that are very scalable, so you can usually +run with very little memory. If you, however, give MySQL more memory, you will normally also get better performance. -When tuning a @strong{MySQL} server, the two most important variables to use +When tuning a MySQL server, the two most important variables to use are @code{key_buffer_size} and @code{table_cache}. You should first feel confident that you have these right before trying to change any of the other variables. @@ -26322,7 +26322,7 @@ much bigger than your available memory you should increase the value of @code{record_rnd_buffer} to speed up the reading of rows after the sorting is done. -When you have installed @strong{MySQL}, the @file{support-files} directory will +When you have installed MySQL, the @file{support-files} directory will contain some different @code{my.cnf} example files, @file{my-huge.cnf}, @file{my-large.cnf}, @file{my-medium.cnf}, and @file{my-small.cnf}, you can use as a base to optimize your system. @@ -26355,7 +26355,7 @@ output. @cindex speed, linking Most of the following tests are done on Linux with the -@strong{MySQL} benchmarks, but they should give some indication for +MySQL benchmarks, but they should give some indication for other operating systems and workloads. You get the fastest executable when you link with @code{-static}. @@ -26364,7 +26364,7 @@ On Linux, you will get the fastest code when compiling with @code{pgcc} and @code{-O3}. To compile @file{sql_yacc.cc} with these options, you need about 200M memory because @code{gcc/pgcc} needs a lot of memory to make all functions inline. You should also set @code{CXX=gcc} when -configuring @strong{MySQL} to avoid inclusion of the @code{libstdc++} +configuring MySQL to avoid inclusion of the @code{libstdc++} library (it is not needed). Note that with some versions of @code{pgcc}, the resulting code will only run on true Pentium processors, even if you use the compiler option that you want the resulting code to be working on @@ -26376,11 +26376,11 @@ important if you compile the SQL server yourself! We have tested both the Cygnus CodeFusion and Fujitsu compilers, but when we tested them, neither was sufficiently bug free to allow -@strong{MySQL} to be compiled with optimizations on. +MySQL to be compiled with optimizations on. -When you compile @strong{MySQL} you should only include support for the +When you compile MySQL you should only include support for the character sets that you are going to use. (Option @code{--with-charset=xxx}). -The standard @strong{MySQL} binary distributions are compiled with support +The standard MySQL binary distributions are compiled with support for all character sets. Here is a list of some measurements that we have done: @@ -26392,7 +26392,7 @@ If you use @code{pgcc} and compile everything with @code{-O6}, the @item If you link dynamically (without @code{-static}), the result is 13% slower on Linux. Note that you still can use a dynamic linked -@strong{MySQL} library. It is only the server that is critical for +MySQL library. It is only the server that is critical for performance. @item @@ -26402,7 +26402,7 @@ the resulting binary can be up to 4 % faster. @item If you connect using TCP/IP rather than Unix sockets, the result is 7.5% slower on the same computer. (If you are connection to @code{localhost}, -@strong{MySQL} will, by default, use sockets). +MySQL will, by default, use sockets). @item If you connect using TCP/IP from another computer over a 100M Ethernet, @@ -26411,7 +26411,7 @@ things will be 8-11 % slower. @item If you compile with @code{--with-debug=full}, then you will loose 20 % for most queries, but some queries may take substantially longer (The -@strong{MySQL} benchmarks ran 35 % slower) +MySQL benchmarks ran 35 % slower) If you use @code{--with-debug}, then you will only loose 15 %. By starting a @code{mysqld} version compiled with @code{--with-debug=full} with @code{--skip-safemalloc} the end result should be close to when @@ -26438,12 +26438,12 @@ Compiling on Linux-x86 using gcc without frame pointers @code{mysqld} 1-4% faster. @end itemize -The @strong{MySQL}-Linux distribution provided by @strong{MySQL AB} used +The MySQL-Linux distribution provided by MySQL AB used to be compiled with @code{pgcc}, but we had to go back to regular gcc because of a bug in @code{pgcc} that would generate the code that does not run on AMD. We will continue using gcc until that bug is resolved. In the meantime, if you have a non-AMD machine, you can get a faster -binary by compiling with @code{pgcc}. The standard @strong{MySQL} +binary by compiling with @code{pgcc}. The standard MySQL Linux binary is linked statically to get it faster and more portable. @@ -26495,7 +26495,7 @@ tables. Temporary tables with a big record length (calculated as the sum of all column lengths) or that contain @code{BLOB} columns are stored on disk. -One problem in @strong{MySQL} versions before Version 3.23.2 is that if a HEAP table +One problem in MySQL versions before Version 3.23.2 is that if a HEAP table exceeds the size of @code{tmp_table_size}, you get the error @code{The table tbl_name is full}. In newer versions this is handled by automatically changing the in-memory (HEAP) table to a disk-based @@ -26503,7 +26503,7 @@ automatically changing the in-memory (HEAP) table to a disk-based increase the temporary table size by setting the @code{tmp_table_size} option to @code{mysqld}, or by setting the SQL option @code{SQL_BIG_TABLES} in the client program. @xref{SET OPTION, , -@code{SET OPTION}}. In @strong{MySQL} Version 3.20, the maximum size of the +@code{SET OPTION}}. In MySQL Version 3.20, the maximum size of the temporary table was @code{record_buffer*16}, so if you are using this version, you have to increase the value of @code{record_buffer}. You can also start @code{mysqld} with the @code{--big-tables} option to always @@ -26576,7 +26576,7 @@ first thread is ready. You can disable DNS host lookup by starting @code{mysqld} with @code{--skip-name-resolve}. In this case you can however only use IP -names in the @strong{MySQL} privilege tables. +names in the MySQL privilege tables. If you have a very slow DNS and many hosts, you can get more performance by either disabling DNS lookop with @code{--skip-name-resolve} or by @@ -26609,7 +26609,7 @@ current session ends, or until you set the option to a different value. This maps all strings from and to the client with the given mapping. Currently the only option for @code{character_set_name} is @code{cp1251_koi8}, but you can easily add new mappings by editing the -@file{sql/convert.cc} file in the @strong{MySQL} source distribution. The +@file{sql/convert.cc} file in the MySQL source distribution. The default mapping can be restored by using a @code{character_set_name} value of @code{DEFAULT}. @@ -26650,7 +26650,7 @@ a multi-command transaction, you have to use the @code{BEGIN} statement. @xref{COMMIT}. If set to @code{0} you have to use @code{COMMIT} / @code{ROLLBACK} to accept/revoke that transaction. @xref{COMMIT}. Note that when you change from not @code{AUTOCOMMIT} mode to -@code{AUTOCOMMIT} mode, @strong{MySQL} will do an automatic +@code{AUTOCOMMIT} mode, MySQL will do an automatic @code{COMMIT} on any open transactions. @item SQL_BIG_TABLES = 0 | 1 @@ -26662,7 +26662,7 @@ require a large temporary table. The default value for a new connection is @code{0} (that is, use in-memory temporary tables). @item SQL_BIG_SELECTS = 0 | 1 -If set to @code{0}, @strong{MySQL} will abort if a @code{SELECT} is attempted +If set to @code{0}, MySQL will abort if a @code{SELECT} is attempted that probably will take a very long time. This is useful when an inadvisable @code{WHERE} statement has been issued. A big query is defined as a @code{SELECT} that probably will have to examine more than @@ -26671,7 +26671,7 @@ that probably will take a very long time. This is useful when an inadvisable @item SQL_BUFFER_RESULT = 0 | 1 @code{SQL_BUFFER_RESULT} will force the result from @code{SELECT}'s -to be put into a temporary table. This will help @strong{MySQL} free the +to be put into a temporary table. This will help MySQL free the table locks early and will help in cases where it takes a long time to send the result set to the client. @@ -26691,7 +26691,7 @@ You can set a default value for this variable by starting @code{mysqld} with @code{-O max_join_size=#}. @item SQL_SAFE_MODE = 0 | 1 -If set to @code{1}, @strong{MySQL} will abort if an @code{UPDATE} or +If set to @code{1}, MySQL will abort if an @code{UPDATE} or @code{DELETE} is attempted that doesn't use a key or @code{LIMIT} in the @code{WHERE} clause. This makes it possible to catch wrong updates when creating SQL commands by hand. @@ -26722,7 +26722,7 @@ for replication of tables with fancy column names to work. @item TIMESTAMP = timestamp_value | DEFAULT Set the time for this client. This is used to get the original timestamp if you use the update log to restore rows. @code{timestamp_value} should be a -UNIX Epoch timestamp, not a @strong{MySQL} timestamp. +UNIX Epoch timestamp, not a MySQL timestamp. @item LAST_INSERT_ID = # Set the value to be returned from @code{LAST_INSERT_ID()}. This is stored in @@ -26808,7 +26808,7 @@ inode and by this will avoid some disk seeks. @item On Linux, you can get much more performance (up to 100 % under load is not uncommon) by using hdpram to configure your disk's interface! The -following should be quite good hdparm options for @strong{MySQL} (and +following should be quite good hdparm options for MySQL (and probably many other applications): @example @@ -26865,17 +26865,17 @@ disk and only symlink tables as a last resort. The way to symlink a database is to first create a directory on some disk where you have free space and then create a symlink to it from -the @strong{MySQL} database directory. +the MySQL database directory. @example shell> mkdir /dr1/databases/test shell> ln -s /dr1/databases/test mysqld-datadir @end example -@strong{MySQL} doesn't support that you link one directory to multiple +MySQL doesn't support that you link one directory to multiple databases. Replacing a database directory with a symbolic link will work fine as long as you don't make a symbolic link between databases. -Suppose you have a database @code{db1} under the @strong{MySQL} data +Suppose you have a database @code{db1} under the MySQL data directory, and then make a symlink @code{db2} that points to @code{db1}: @example @@ -26901,7 +26901,7 @@ if (1) @end example On Windows you can use internal symbolic links to directories by compiling -@strong{MySQL} with @code{-DUSE_SYMDIR}. This allows you to put different +MySQL with @code{-DUSE_SYMDIR}. This allows you to put different databases on different disks. @xref{Windows symbolic links}. @@ -26910,7 +26910,7 @@ databases on different disks. @xref{Windows symbolic links}. @cindex databases, symbolic links -Before @strong{MySQL} 4.0 you should not symlink tables, if you are not +Before MySQL 4.0 you should not symlink tables, if you are not very carefully with them. The problem is that if you run @code{ALTER TABLE}, @code{REPAIR TABLE} or @code{OPTIMIZE TABLE} on a symlinked table, the symlinks will be removed and replaced by the original @@ -26922,11 +26922,11 @@ You should not symlink tables on system that doesn't have a fully working @code{realpath()} call. (At least Linux and Solaris support @code{realpath()}) -In @strong{MySQL} 4.0 symlinks is only fully supported for @code{MyISAM} +In MySQL 4.0 symlinks is only fully supported for @code{MyISAM} tables. For other table types you will probably get strange problems when doing any of the above mentioned commands. -The handling of symbolic links in @strong{MySQL} 4.0 works the following +The handling of symbolic links in MySQL 4.0 works the following way (this is mostly relevant only for @code{MyISAM} tables). @itemize @bullet @@ -26952,7 +26952,7 @@ will be created in the same directory where the data/index file is. When you drop a table that is using symlinks, both the symlink and the file the symlink points to is dropped. This is a good reason to why you should NOT run @code{mysqld} as root and not allow persons to have write -access to the @strong{MySQL} database directories. +access to the MySQL database directories. @item If you rename a table with @code{ALTER TABLE RENAME} and you don't change @@ -27001,11 +27001,11 @@ Things that are not yet supported: * Fulltext Search:: @end menu -@strong{MySQL} has a very complex, but intuitive and easy to learn SQL +MySQL has a very complex, but intuitive and easy to learn SQL interface. This chapter describes the various commands, types, and functions -you will need to know in order to use @strong{MySQL} efficiently and +you will need to know in order to use MySQL efficiently and effectively. This chapter also serves as a reference to all functionality -included in @strong{MySQL}. In order to use this chapter effectively, you +included in MySQL. In order to use this chapter effectively, you may find it useful to refer to the various indexes. @@ -27040,8 +27040,8 @@ may find it useful to refer to the various indexes. This section describes the various ways to write strings and numbers in -@strong{MySQL}. It also covers the various nuances and ``gotchas'' that -you may run into when dealing with these basic types in @strong{MySQL}. +MySQL. It also covers the various nuances and ``gotchas'' that +you may run into when dealing with these basic types in MySQL. @node String syntax, Number syntax, Literals, Literals @@ -27058,7 +27058,7 @@ if you run in ANSI mode). Examples: Within a string, certain sequences have special meaning. Each of these sequences begins with a backslash (@samp{\}), known as the @emph{escape -character}. @strong{MySQL} recognizes the following escape sequences: +character}. MySQL recognizes the following escape sequences: @c these aren't really functions, but that's probably the most reasonable index @table @code @@ -27241,7 +27241,7 @@ as the equivalent floating-point number. @tindex hexadecimal values -@strong{MySQL} supports hexadecimal values. In number context these act +MySQL supports hexadecimal values. In number context these act like an integer (64-bit precision). In string context these act like a binary string where each pair of hex digits is converted to a character: @@ -27286,13 +27286,13 @@ or export formats (@code{LOAD DATA INFILE}, @code{SELECT ... INTO OUTFILE}). Database, table, index, column, and alias names all follow the same rules in -@strong{MySQL}. +MySQL. @tindex identifiers, quoting @tindex quoting of identifiers @tindex ` @tindex " -Note that the rules changed starting with @strong{MySQL} Version 3.23.6 when we +Note that the rules changed starting with MySQL Version 3.23.6 when we introduced quoting of identifiers (database, table, and column names) with @samp{`}. @samp{"} will also work to quote identifiers if you run in ANSI mode. @xref{ANSI mode}. @@ -27315,7 +27315,7 @@ you must always quote it with @code{`} when you use it: SELECT * from `select` where `select`.id > 100; @end example -In previous versions of @strong{MySQL}, the name rules are as follows: +In previous versions of MySQL, the name rules are as follows: @itemize @bullet @item @@ -27339,7 +27339,7 @@ It is recommended that you do not use names like @code{1e}, because an expression like @code{1e+1} is ambiguous. It may be interpreted as the expression @code{1e + 1} or as the number @code{1e+1}. -In @strong{MySQL} you can refer to a column using any of the following forms: +In MySQL you can refer to a column using any of the following forms: @multitable @columnfractions .35 .65 @item @strong{Column reference} @tab @strong{Meaning} @@ -27349,7 +27349,7 @@ from whichever table used in the query contains a column of that name. @code{tbl_name} of the current database. @item @code{db_name.tbl_name.col_name} @tab Column @code{col_name} from table @code{tbl_name} of the database @code{db_name}. This form is available in -@strong{MySQL} Version 3.22 or later. +MySQL Version 3.22 or later. @item @code{`column_name`} @tab A column that is a keyword or contains special characters. @end multitable @@ -27382,7 +27382,7 @@ programs prefix table names with a @samp{.} character. @cindex column names, case sensitivity @cindex alias names, case sensitivity -In @strong{MySQL}, databases and tables correspond to directories and files +In MySQL, databases and tables correspond to directories and files within those directories. Consequently, the case sensitivity of the underlying operating system determines the case sensitivity of database and table names. This means database and table names are case sensitive in Unix @@ -27417,7 +27417,7 @@ One way to avoid this problem is to start @code{mysqld} with @code{-O lower_case_table_names=1}. By default this option is 1 on Windows and 0 on Unix. -If @code{lower_case_table_names} is 1 @strong{MySQL} will convert all +If @code{lower_case_table_names} is 1 MySQL will convert all table names to lower case on storage and lookup. Note that if you change this option, you need to first convert your old table names to lower case before starting @code{mysqld}. @@ -27430,7 +27430,7 @@ lower case before starting @code{mysqld}. @cindex user variables @cindex names, variables -@strong{MySQL} supports thread-specific variables with the +MySQL supports thread-specific variables with the @code{@@variablename} syntax. A variable name may consist of alphanumeric characters from the current character set and also @samp{_}, @samp{$}, and @samp{.} . The default character set is @@ -27495,7 +27495,7 @@ row, but the value of @code{id} for the previous accepted row. @cindex comments, adding -The @strong{MySQL} server supports the @code{# to end of line}, @code{-- +The MySQL server supports the @code{# to end of line}, @code{-- to end of line} and @code{/* in-line or multiple-line */} comment styles: @@ -27536,7 +27536,7 @@ These limitations apply both when you run @code{mysql} interactively and when you put commands in a file and tell @code{mysql} to read its input from that file with @code{mysql < some-file}. -@strong{MySQL} doesn't support the @samp{--} ANSI SQL comment style. +MySQL doesn't support the @samp{--} ANSI SQL comment style. @xref{Missing comments}. @@ -27547,16 +27547,16 @@ input from that file with @code{mysql < some-file}. @cindex reserved words, exceptions A common problem stems from trying to create a table with column names that -use the names of datatypes or functions built into @strong{MySQL}, such as +use the names of datatypes or functions built into MySQL, such as @code{TIMESTAMP} or @code{GROUP}. You're allowed to do it (for example, @code{ABS} is an allowed column name), but whitespace is not allowed between a function name and the @samp{(} when using functions whose names are also column names. -The following words are explicitly reserved in @strong{MySQL}. Most of +The following words are explicitly reserved in MySQL. Most of them are forbidden by ANSI SQL92 as column and/or table names (for example, @code{group}). -A few are reserved because @strong{MySQL} needs them and is +A few are reserved because MySQL needs them and is (currently) using a @code{yacc} parser: @c This is fixed by including the symbols table from lex.h here and then running @@ -27638,7 +27638,7 @@ A few are reserved because @strong{MySQL} needs them and is @end multitable The following symbols (from the table above) are disallowed by ANSI SQL -but allowed by @strong{MySQL} as column/table names. This is because some +but allowed by MySQL as column/table names. This is because some of these names are very natural names and a lot of people have already used them. @@ -27660,7 +27660,7 @@ used them. @cindex columns, types @cindex types, columns -@strong{MySQL} supports a number of column types, which may be grouped into +MySQL supports a number of column types, which may be grouped into three categories: numeric types, date and time types, and string (character) types. This section first gives an overview of the types available and summarizes the storage requirements for each column type, then provides a @@ -27669,7 +27669,7 @@ The overview is intentionally brief. The more detailed descriptions should be consulted for additional information about particular column types, such as the allowable formats in which you can specify values. -The column types supported by @strong{MySQL} are listed below. +The column types supported by MySQL are listed below. The following code letters are used in the descriptions: @cindex display size @@ -27696,7 +27696,7 @@ that are optional. @c The @w{-number} stuff keeps a linebreak from occurring between @c the - and number. -Note that if you specify @code{ZEROFILL} for a column, @strong{MySQL} will +Note that if you specify @code{ZEROFILL} for a column, MySQL will automatically add the @code{UNSIGNED} attribute to the column. @table @code @@ -27770,11 +27770,11 @@ the @code{FLOAT} and @code{DOUBLE} types described immediately below. @code{FLOAT(X)} has the same range as the corresponding @code{FLOAT} and @code{DOUBLE} types, but the display size and number of decimals is undefined. -In @strong{MySQL} Version 3.23, this is a true floating-point value. In -earlier @strong{MySQL} versions, @code{FLOAT(precision)} always has 2 decimals. +In MySQL Version 3.23, this is a true floating-point value. In +earlier MySQL versions, @code{FLOAT(precision)} always has 2 decimals. Note that using @code{FLOAT} may give you some unexpected problems as -all calculation in @strong{MySQL} is done with double precision. +all calculation in MySQL is done with double precision. @xref{No matching rows}. @cindex ODBC compatibility @@ -27826,7 +27826,7 @@ the same as for @code{DOUBLE}, but the actual range for a given If @code{D} is left out it's set to 0. If @code{M} is left out it's set to 10. -Note that in @strong{MySQL} Version 3.22 the @code{M} argument had to +Note that in MySQL Version 3.22 the @code{M} argument had to includes the space needed for the sign and the decimal point. @tindex NUMERIC @@ -27838,7 +27838,7 @@ This is a synonym for @code{DECIMAL}. @item DATE A date. The supported range is @code{'1000-01-01'} to @code{'9999-12-31'}. -@strong{MySQL} displays @code{DATE} values in @code{'YYYY-MM-DD'} format, but +MySQL displays @code{DATE} values in @code{'YYYY-MM-DD'} format, but allows you to assign values to @code{DATE} columns using either strings or numbers. @xref{DATETIME}. @@ -27846,7 +27846,7 @@ numbers. @xref{DATETIME}. @item DATETIME A date and time combination. The supported range is @code{'1000-01-01 -00:00:00'} to @code{'9999-12-31 23:59:59'}. @strong{MySQL} displays +00:00:00'} to @code{'9999-12-31 23:59:59'}. MySQL displays @code{DATETIME} values in @code{'YYYY-MM-DD HH:MM:SS'} format, but allows you to assign values to @code{DATETIME} columns using either strings or numbers. @xref{DATETIME}. @@ -27855,7 +27855,7 @@ to assign values to @code{DATETIME} columns using either strings or numbers. @item TIMESTAMP[(M)] A timestamp. The range is @code{'1970-01-01 00:00:00'} to sometime in the -year @code{2037}. @strong{MySQL} displays @code{TIMESTAMP} values in +year @code{2037}. MySQL displays @code{TIMESTAMP} values in @code{YYYYMMDDHHMMSS}, @code{YYMMDDHHMMSS}, @code{YYYYMMDD}, or @code{YYMMDD} format, depending on whether @code{M} is @code{14} (or missing), @code{12}, @code{8}, or @code{6}, but allows you to assign values to @code{TIMESTAMP} @@ -27879,7 +27879,7 @@ the table with these types! @item TIME A time. The range is @code{'-838:59:59'} to @code{'838:59:59'}. -@strong{MySQL} displays @code{TIME} values in @code{'HH:MM:SS'} format, but +MySQL displays @code{TIME} values in @code{'HH:MM:SS'} format, but allows you to assign values to @code{TIME} columns using either strings or numbers. @xref{TIME}. @@ -27888,10 +27888,10 @@ numbers. @xref{TIME}. A year in 2- or 4-digit format (default is 4-digit). The allowable values are @code{1901} to @code{2155}, @code{0000} in the 4-digit year format, -and 1970-2069 if you use the 2-digit format (70-69). @strong{MySQL} displays +and 1970-2069 if you use the 2-digit format (70-69). MySQL displays @code{YEAR} values in @code{YYYY} format, but allows you to assign values to @code{YEAR} columns using either strings or numbers. (The @code{YEAR} type is -new in @strong{MySQL} Version 3.22.). @xref{YEAR}. +new in MySQL Version 3.22.). @xref{YEAR}. @tindex NATIONAL CHAR @tindex NCHAR @@ -27907,11 +27907,11 @@ default character set unless the @code{BINARY} keyword is given. @code{NATIONAL CHAR} (short form @code{NCHAR}) is the ANSI SQL way to define that a CHAR column should use the default CHARACTER set. This is -the default in @strong{MySQL}. +the default in MySQL. @code{CHAR} is a shorthand for @code{CHARACTER}. -@strong{MySQL} allows you to create a column of type +MySQL allows you to create a column of type @code{CHAR(0)}. This is mainly useful when you have to be compliant with some old applications that depend on the existence of a column but that do not actually use the value. This is also quite nice when you need a @@ -27997,7 +27997,7 @@ be chosen from the list of values @code{'value1'}, @code{'value2'}, @node Numeric types, Date and time types, Column types, Column types @subsection Numeric Types -@strong{MySQL} supports all of the ANSI/ISO SQL92 numeric types. These +MySQL supports all of the ANSI/ISO SQL92 numeric types. These types include the exact numeric data types (@code{NUMERIC}, @code{DECIMAL}, @code{INTEGER}, and @code{SMALLINT}), as well as the approximate numeric data types (@code{FLOAT}, @code{REAL}, and @@ -28006,7 +28006,7 @@ approximate numeric data types (@code{FLOAT}, @code{REAL}, and @code{DECIMAL}. The @code{NUMERIC} and @code{DECIMAL} types are implemented as the same -type by @strong{MySQL}, as permitted by the SQL92 standard. They are +type by MySQL, as permitted by the SQL92 standard. They are used for values for which it is important to preserve exact precision, for example with monetary data. When declaring a column of one of these types the precision and scale can be (and usually is) specified; for @@ -28025,7 +28025,7 @@ of values that can be stored in the @code{salary} column is from @code{DECIMAL(p)} is equivalent to @code{DECIMAL(p,0)}. Similarly, the syntax @code{DECIMAL} is equivalent to @code{DECIMAL(p,0)}, where the implementation is allowed to decide the value of @code{p}. -@strong{MySQL} does not currently support either of these variant forms +MySQL does not currently support either of these variant forms of the @code{DECIMAL}/@code{NUMERIC} data types. This is not generally a serious problem, as the principal benefits of these types derive from the ability to control both precision and scale explicitly. @@ -28046,13 +28046,13 @@ are allowed by the specified @code{scale}, the value is rounded to that @code{scale}. When a @code{DECIMAL} or @code{NUMERIC} column is assigned a value whose magnitude exceeds the range implied by the specified (or defaulted) @code{precision} and @code{scale}, -@strong{MySQL} stores the value representing the corresponding end +MySQL stores the value representing the corresponding end point of that range. -As an extension to the ANSI/ISO SQL92 standard, @strong{MySQL} also +As an extension to the ANSI/ISO SQL92 standard, MySQL also supports the integral types @code{TINYINT}, @code{MEDIUMINT}, and @code{BIGINT} as listed in the tables above. Another extension is -supported by @strong{MySQL} for optionally specifying the display width +supported by MySQL for optionally specifying the display width of an integral value in parentheses following the base keyword for the type (for example, @code{INT(4)}). This optional width specification is used to left-pad the display of values whose width is less than the @@ -28064,8 +28064,8 @@ column. When used in conjunction with the optional extension attribute For example, for a column declared as @code{INT(5) ZEROFILL}, a value of @code{4} is retrieved as @code{00004}. Note that if you store larger values than the display width in an integer column, you may experience -problems when @strong{MySQL} generates temporary tables for some -complicated joins, as in these cases @strong{MySQL} trusts that the +problems when MySQL generates temporary tables for some +complicated joins, as in these cases MySQL trusts that the data did fit into the original column width. All integral types can have an optional (non-standard) attribute @@ -28076,33 +28076,33 @@ range for the column. The @code{FLOAT} type is used to represent approximate numeric data types. The ANSI/ISO SQL92 standard allows an optional specification of the precision (but not the range of the exponent) in bits following the -keyword @code{FLOAT} in parentheses. The @strong{MySQL} implementation +keyword @code{FLOAT} in parentheses. The MySQL implementation also supports this optional precision specification. When the keyword @code{FLOAT} is used for a column type without a precision -specification, @strong{MySQL} uses four bytes to store the values. A +specification, MySQL uses four bytes to store the values. A variant syntax is also supported, with two numbers given in parentheses following the @code{FLOAT} keyword. With this option, the first number continues to represent the storage requirements for the value in bytes, and the second number specifies the number of digits to be stored and displayed following the decimal point (as with @code{DECIMAL} and -@code{NUMERIC}). When @strong{MySQL} is asked to store a number for +@code{NUMERIC}). When MySQL is asked to store a number for such a column with more decimal digits following the decimal point than specified for the column, the value is rounded to eliminate the extra digits when the value is stored. The @code{REAL} and @code{DOUBLE PRECISION} types do not accept precision specifications. As an extension to the ANSI/ISO SQL92 -standard, @strong{MySQL} recognizes @code{DOUBLE} as a synonym for the +standard, MySQL recognizes @code{DOUBLE} as a synonym for the @code{DOUBLE PRECISION} type. In contrast with the standard's requirement that the precision for @code{REAL} be smaller than that used -for @code{DOUBLE PRECISION}, @strong{MySQL} implements both as 8-byte +for @code{DOUBLE PRECISION}, MySQL implements both as 8-byte double-precision floating-point values (when not running in ``ANSI mode''). For maximum portability, code requiring storage of approximate numeric data values should use @code{FLOAT} or @code{DOUBLE PRECISION} with no specification of precision or number of decimal points. When asked to store a value in a numeric column that is outside the column -type's allowable range, @strong{MySQL} clips the value to the appropriate +type's allowable range, MySQL clips the value to the appropriate endpoint of the range and stores the resulting value instead. For example, the range of an @code{INT} column is @code{-2147483648} to @@ -28138,13 +28138,13 @@ multi-row @code{INSERT} statements. The date and time types are @code{DATETIME}, @code{DATE}, @code{TIMESTAMP}, @code{TIME}, and @code{YEAR}. Each of these has a range of legal values, as well as a ``zero'' value that is used when you -specify a really illegal value. Note that @strong{MySQL} allows you to store +specify a really illegal value. Note that MySQL allows you to store certain 'not strictly' legal date values, for example @code{1999-11-31}. The reason for this is that we think it's the responsibility of the application to handle date checking, not the SQL servers. To make the -date checking 'fast', @strong{MySQL} only checks that the month is in +date checking 'fast', MySQL only checks that the month is in the range of 0-12 and the day is in the range of 0-31. The above ranges -are defined this way because @strong{MySQL} allows you to store, in a +are defined this way because MySQL allows you to store, in a @code{DATE} or @code{DATETIME} column, dates where the day or month-day is zero. This is extremely useful for applications that need to store a birth-date for which you don't know the exact date. In this case you @@ -28157,7 +28157,7 @@ with date and time types: @itemize @bullet @item -@strong{MySQL} retrieves values for a given date or time type in a standard +MySQL retrieves values for a given date or time type in a standard format, but it attempts to interpret a variety of formats for values that you supply (for example, when you specify a value to be assigned to or compared to a date or time type). Nevertheless, only the formats described @@ -28166,18 +28166,18 @@ legal values, and unpredictable results may occur if you use values in other formats. @item -Although @strong{MySQL} tries to interpret values in several formats, it +Although MySQL tries to interpret values in several formats, it always expects the year part of date values to be leftmost. Dates must be given in year-month-day order (for example, @code{'98-09-04'}), rather than in the month-day-year or day-month-year orders commonly used elsewhere (for example, @code{'09-04-98'}, @code{'04-09-98'}). @item -@strong{MySQL} automatically converts a date or time type value to a number +MySQL automatically converts a date or time type value to a number if the value is used in a numeric context, and vice versa. @item -When @strong{MySQL} encounters a value for a date or time type that is +When MySQL encounters a value for a date or time type that is out of range or otherwise illegal for the type (see the start of this section), it converts the value to the ``zero'' value for that type. (The exception is that out-of-range @code{TIME} values are clipped to @@ -28211,14 +28211,14 @@ because ODBC can't handle such values. @cindex Year 2000 issues @cindex date types, Y2K issues -@strong{MySQL} itself is Y2K-safe (@pxref{Year 2000 compliance}), -but input values presented to @strong{MySQL} may not be. Any input +MySQL itself is Y2K-safe (@pxref{Year 2000 compliance}), +but input values presented to MySQL may not be. Any input containing 2-digit year values is ambiguous, because the century is unknown. -Such values must be interpreted into 4-digit form because @strong{MySQL} stores +Such values must be interpreted into 4-digit form because MySQL stores years internally using four digits. For @code{DATETIME}, @code{DATE}, @code{TIMESTAMP}, and @code{YEAR} types, -@strong{MySQL} interprets dates with ambiguous year values using the +MySQL interprets dates with ambiguous year values using the following rules: @itemize @bullet @@ -28230,7 +28230,7 @@ Year values in the range @code{70-99} are converted to @code{1970-1999}. @end itemize Remember that these rules provide only reasonable guesses as to what your -data mean. If the heuristics used by @strong{MySQL} don't produce the +data mean. If the heuristics used by MySQL don't produce the correct values, you should provide unambiguous input containing 4-digit year values. @@ -28255,14 +28255,14 @@ This section describes their characteristics, how they are similar, and how they differ. The @code{DATETIME} type is used when you need values that contain both date -and time information. @strong{MySQL} retrieves and displays @code{DATETIME} +and time information. MySQL retrieves and displays @code{DATETIME} values in @code{'YYYY-MM-DD HH:MM:SS'} format. The supported range is @code{'1000-01-01 00:00:00'} to @code{'9999-12-31 23:59:59'}. (``Supported'' means that although earlier values might work, there is no guarantee that they will.) The @code{DATE} type is used when you need only a date value, without a time -part. @strong{MySQL} retrieves and displays @code{DATE} values in +part. MySQL retrieves and displays @code{DATE} values in @code{'YYYY-MM-DD'} format. The supported range is @code{'1000-01-01'} to @code{'9999-12-31'}. @@ -28282,7 +28282,7 @@ The column is not specified explicitly in an @code{INSERT} or The column is not specified explicitly in an @code{UPDATE} statement and some other column changes value. (Note that an @code{UPDATE} that sets a column to the value it already has will not cause the @code{TIMESTAMP} column to be -updated, because if you set a column to its current value, @strong{MySQL} +updated, because if you set a column to its current value, MySQL ignores the update for efficiency.) @item You explicitly set the @code{TIMESTAMP} column to @code{NULL}. @@ -28300,7 +28300,7 @@ later: @itemize @bullet @item -Let @strong{MySQL} set the column when the row is created. +Let MySQL set the column when the row is created. This will initialize it to the current date and time. @item @@ -28316,7 +28316,7 @@ leave alone for subsequent updates. the year 2037, with a resolution of one second. Values are displayed as numbers. -The format in which @strong{MySQL} retrieves and displays @code{TIMESTAMP} +The format in which MySQL retrieves and displays @code{TIMESTAMP} values depends on the display size, as illustrated by the table below. The `full' @code{TIMESTAMP} format is 14 digits, but @code{TIMESTAMP} columns may be created with shorter display sizes: @@ -28417,7 +28417,7 @@ given by the first 2 characters. The string is interpreted from left to right to find year, month, day, hour, minute, and second values, for as many parts as are present in the string. This means you should not use strings that have fewer than 6 characters. For example, if you specify @code{'9903'}, -thinking that will represent March, 1999, you will find that @strong{MySQL} +thinking that will represent March, 1999, you will find that MySQL inserts a ``zero'' date into your table. This is because the year and month values are @code{99} and @code{03}, but the day part is missing (zero), so the value is not a legal date. @@ -28493,7 +28493,7 @@ month. @item Year values specified as two digits are ambiguous, because the century is -unknown. @strong{MySQL} interprets 2-digit year values using the following +unknown. MySQL interprets 2-digit year values using the following rules: @itemize @minus @@ -28511,7 +28511,7 @@ Year values in the range @code{70-99} are converted to @code{1970-1999}. @tindex TIME -@strong{MySQL} retrieves and displays @code{TIME} values in @code{'HH:MM:SS'} +MySQL retrieves and displays @code{TIME} values in @code{'HH:MM:SS'} format (or @code{'HHH:MM:SS'} format for large hours values). @code{TIME} values may range from @code{'-838:59:59'} to @code{'838:59:59'}. The reason the hours part may be so large is that the @code{TIME} type may be used not @@ -28524,7 +28524,7 @@ You can specify @code{TIME} values in a variety of formats: @itemize @bullet @item As a string in @code{'D HH:MM:SS.fraction'} format. (Note that -@strong{MySQL} doesn't yet store the fraction for the time column). One +MySQL doesn't yet store the fraction for the time column). One can also use one of the following ``relaxed'' syntax: @code{HH:MM:SS.fraction}, @code{HH:MM:SS}, @code{HH:MM}, @code{D HH:MM:SS}, @@ -28540,7 +28540,7 @@ minute part) and becomes @code{'00:00:00'}. As a number in @code{HHMMSS} format, provided that it makes sense as a time. For example, @code{101112} is understood as @code{'10:11:12'}. The following alternative formats are also understood: @code{SS}, @code{MMSS},@code{HHMMSS}, -@code{HHMMSS.fraction}. Note that @strong{MySQL} doesn't yet store the +@code{HHMMSS.fraction}. Note that MySQL doesn't yet store the fraction part. @item @@ -28554,12 +28554,12 @@ seconds values that are less than @code{10}. @code{'8:3:2'} is the same as @code{'08:03:02'}. Be careful about assigning ``short'' @code{TIME} values to a @code{TIME} -column. Without semicolon, @strong{MySQL} interprets values using the -assumption that the rightmost digits represent seconds. (@strong{MySQL} +column. Without semicolon, MySQL interprets values using the +assumption that the rightmost digits represent seconds. (MySQL interprets @code{TIME} values as elapsed time rather than as time of day.) For example, you might think of @code{'1112'} and @code{1112} as meaning @code{'11:12:00'} (12 minutes after 11 o'clock), but -@strong{MySQL} interprets them as @code{'00:11:12'} (11 minutes, 12 seconds). +MySQL interprets them as @code{'00:11:12'} (11 minutes, 12 seconds). Similarly, @code{'12'} and @code{12} are interpreted as @code{'00:00:12'}. @code{TIME} values with semicolon, instead, are always treated as time of the day. That is @code{'11:12'} will mean @code{'11:12:00'}, @@ -28584,7 +28584,7 @@ original value was specified as @code{'00:00:00'} or whether it was illegal. The @code{YEAR} type is a 1-byte type used for representing years. -@strong{MySQL} retrieves and displays @code{YEAR} values in @code{YYYY} +MySQL retrieves and displays @code{YEAR} values in @code{YYYY} format. The range is @code{1901} to @code{2155}. You can specify @code{YEAR} values in a variety of formats: @@ -28650,7 +28650,7 @@ way they are stored and retrieved. The length of a @code{CHAR} column is fixed to the length that you declare when you create the table. The length can be any value between 1 and 255. -(As of @strong{MySQL} Version 3.23, the length of @code{CHAR} may be 0 to 255.) +(As of MySQL Version 3.23, the length of @code{CHAR} may be 0 to 255.) When @code{CHAR} values are stored, they are right-padded with spaces to the specified length. When @code{CHAR} values are retrieved, trailing spaces are removed. @@ -28689,7 +28689,7 @@ Values in @code{CHAR} and @code{VARCHAR} columns are sorted and compared in case-insensitive fashion, unless the @code{BINARY} attribute was specified when the table was created. The @code{BINARY} attribute means that column values are sorted and compared in case-sensitive fashion -according to the ASCII order of the machine where the @strong{MySQL} +according to the ASCII order of the machine where the MySQL server is running. @code{BINARY} doesn't affect how the column is stored or retrieved. @@ -28697,7 +28697,7 @@ The @code{BINARY} attribute is sticky. This means that if a column marked @code{BINARY} is used in an expression, the whole expression is compared as a @code{BINARY} value. -@strong{MySQL} may silently change the type of a @code{CHAR} or @code{VARCHAR} +MySQL may silently change the type of a @code{CHAR} or @code{VARCHAR} column at table creation time. @xref{Silent column changes}. @@ -28732,8 +28732,8 @@ column that can be as big as you like. Similarly, you can regard a @itemize @bullet @item You can have indexes on @code{BLOB} and @code{TEXT} columns with -@strong{MySQL} Version 3.23.2 and newer. Older versions of -@strong{MySQL} did not support this. +MySQL Version 3.23.2 and newer. Older versions of +MySQL did not support this. @item There is no trailing-space removal for @code{BLOB} and @code{TEXT} columns @@ -28904,7 +28904,7 @@ any of these values: A @code{SET} can have a maximum of 64 different members. -@strong{MySQL} stores @code{SET} values numerically, with the low-order bit +MySQL stores @code{SET} values numerically, with the low-order bit of the stored value corresponding to the first set member. If you retrieve a @code{SET} value in a numeric context, the value retrieved has bits set corresponding to the set members that make up the column value. For example, @@ -28979,7 +28979,7 @@ range between @code{1} and @code{99999}, @code{MEDIUMINT UNSIGNED} is the best type. Accurate representation of monetary values is a common problem. In -@strong{MySQL}, you should use the @code{DECIMAL} type. This is stored as +MySQL, you should use the @code{DECIMAL} type. This is stored as a string, so no loss of accuracy should occur. If accuracy is not too important, the @code{DOUBLE} type may also be good enough. @@ -28996,9 +28996,9 @@ and convert results back to floating-point values only when necessary. @cindex columns, other types To make it easier to use code written for SQL implementations from other -vendors, @strong{MySQL} maps column types as shown in the table below. These +vendors, MySQL maps column types as shown in the table below. These mappings make it easier to move table definitions from other database engines -to @strong{MySQL}: +to MySQL: @multitable @columnfractions .4 .6 @item @strong{Other vendor type} @tab @strong{MySQL type} @@ -29019,8 +29019,8 @@ to @strong{MySQL}: Column type mapping occurs at table creation time. If you create a table with types used by other vendors and then issue a @code{DESCRIBE tbl_name} -statement, @strong{MySQL} reports the table structure using the equivalent -@strong{MySQL} types. +statement, MySQL reports the table structure using the equivalent +MySQL types. @node Storage requirements, , Other-vendor column types, Column types @@ -29030,7 +29030,7 @@ statement, @strong{MySQL} reports the table structure using the equivalent @cindex columns, storage requirements The storage requirements for each of the column types supported by -@strong{MySQL} are listed below by category. +MySQL are listed below by category. @cindex numeric types @cindex types, numeric @@ -29108,7 +29108,7 @@ the length of the column value, depending on the maximum possible length of the type. @xref{BLOB}. If a table includes any variable-length column types, the record format will -also be variable-length. Note that when a table is created, @strong{MySQL} +also be variable-length. Note that when a table is created, MySQL may, under certain conditions, change a column from a variable-length type to a fixed-length type, or vice-versa. @xref{Silent column changes}. @@ -29138,12 +29138,12 @@ unless otherwise indicated in the documentation for the operators and functions involved in the expression. @strong{NOTE:} There must be no whitespace between a function name and the -parenthesis following it. This helps the @strong{MySQL} parser distinguish +parenthesis following it. This helps the MySQL parser distinguish between function calls and references to tables or columns that happen to have the same name as a function. Spaces around arguments are permitted, though. -You can force @strong{MySQL} to accept spaces after the function name by +You can force MySQL to accept spaces after the function name by starting @code{mysqld} with @code{--ansi} or using the @code{CLIENT_IGNORE_SPACE} to @code{mysql_connect()}, but in this case all function names will become reserved words. @xref{ANSI mode}. @@ -29228,7 +29228,7 @@ or @code{NULL}. These functions work for both numbers and strings. Strings are automatically converted to numbers and numbers to strings as needed (as in Perl). -@strong{MySQL} performs comparisons using the following +MySQL performs comparisons using the following rules: @itemize @bullet @@ -29576,7 +29576,7 @@ mysql> select NULLIF(1,2); -> 1 @end example -Note that @code{expr1} is evaluated twice in @strong{MySQL} if the arguments +Note that @code{expr1} is evaluated twice in MySQL if the arguments are equal. @findex IF() @@ -29613,7 +29613,7 @@ original floating-point value to see whether it is non-zero. The result of the comparison is used as an integer. The default return type of @code{IF()} (which may matter when it is -stored into a temporary table) is calculated in @strong{MySQL} Version +stored into a temporary table) is calculated in MySQL Version 3.23 as follows: @multitable @columnfractions .55 .45 @@ -30186,13 +30186,13 @@ mysql> UPDATE table_name @end example @end table -If you are not using @strong{MySQL} Version 3.23, you have to do the reading +If you are not using MySQL Version 3.23, you have to do the reading of the file inside your application and create an @code{INSERT} statement to update the database with the file information. One way to do this, if -you are using the @strong{MySQL}++ library, can be found at +you are using the MySQL++ library, can be found at @uref{http://www.mysql.com/documentation/mysql++/mysql++-examples.html}. -@strong{MySQL} automatically converts numbers to strings as necessary, and +MySQL automatically converts numbers to strings as necessary, and vice-versa: @example @@ -30280,7 +30280,7 @@ mysql> SELECT 'abc' LIKE BINARY 'ABC'; -> 0 @end example -@code{LIKE} is allowed on numeric expressions! (This is a @strong{MySQL} +@code{LIKE} is allowed on numeric expressions! (This is a MySQL extension to the ANSI SQL @code{LIKE}.) @example @@ -30288,7 +30288,7 @@ mysql> select 10 LIKE '1%'; -> 1 @end example -Note: Because @strong{MySQL} uses the C escape syntax in strings (for example, +Note: Because MySQL uses the C escape syntax in strings (for example, @samp{\n}), you must double any @samp{\} that you use in your @code{LIKE} strings. For example, to search for @samp{\n}, specify it as @samp{\\n}. To search for @samp{\}, specify it as @samp{\\\\} (the backslashes are stripped @@ -30309,9 +30309,9 @@ Performs a pattern match of a string expression @code{expr} against a pattern @code{pat}. The pattern can be an extended regular expression. @xref{Regexp}. Returns @code{1} if @code{expr} matches @code{pat}, otherwise returns @code{0}. @code{RLIKE} is a synonym for @code{REGEXP}, provided for -@code{mSQL} compatibility. Note: Because @strong{MySQL} uses the C escape +@code{mSQL} compatibility. Note: Because MySQL uses the C escape syntax in strings (for example, @samp{\n}), you must double any @samp{\} that -you use in your @code{REGEXP} strings. As of @strong{MySQL} Version 3.23.4, +you use in your @code{REGEXP} strings. As of MySQL Version 3.23.4, @code{REGEXP} is case insensitive for normal (not binary) strings: @example @@ -30360,7 +30360,7 @@ relevance - similarity measure between the text in columns positive floating-point number. Zero relevance means no similarity. For @code{MATCH ... AGAINST()} to work, a @strong{FULLTEXT} index must be created first. @xref{CREATE TABLE, , @code{CREATE TABLE}}. -@code{MATCH ... AGAINST()} is available in @strong{MySQL} Version +@code{MATCH ... AGAINST()} is available in MySQL Version 3.23.23 or later. For details and usage examples @pxref{Fulltext Search}. @end table @@ -30387,9 +30387,9 @@ mysql> select BINARY "a" = "A"; -> 0 @end example -@code{BINARY} was introduced in @strong{MySQL} Version 3.23.0. +@code{BINARY} was introduced in MySQL Version 3.23.0. -Note that in some context @strong{MySQL} will not be able to use the +Note that in some context MySQL will not be able to use the index efficiently when you cast an indexed column to @code{BINARY}. @end table @@ -30658,7 +30658,7 @@ mysql> select SQRT(20); @findex PI() @item PI() Returns the value of PI. The default shown number of decimals is 5, but -@strong{MySQL} internally uses the full double precession for PI. +MySQL internally uses the full double precession for PI. @example mysql> select PI(); -> 3.141593 @@ -30769,7 +30769,7 @@ mysql> select RAND(); @end example You can't use a column with @code{RAND()} values in an @code{ORDER BY} clause, because @code{ORDER BY} would evaluate the column multiple times. -In @strong{MySQL} Version 3.23, you can, however, do: +In MySQL Version 3.23, you can, however, do: @code{SELECT * FROM table_name ORDER BY RAND()} This is useful to get a random sample of a set @code{SELECT * FROM @@ -30808,7 +30808,7 @@ mysql> select LEAST(34.0,3.0,5.0,767.0); mysql> select LEAST("B","A","C"); -> "A" @end example -In @strong{MySQL} versions prior to Version 3.22.5, you can use @code{MIN()} +In MySQL versions prior to Version 3.22.5, you can use @code{MIN()} instead of @code{LEAST}. @findex GREATEST() @@ -30823,7 +30823,7 @@ mysql> select GREATEST(34.0,3.0,5.0,767.0); mysql> select GREATEST("B","A","C"); -> "C" @end example -In @strong{MySQL} versions prior to Version 3.22.5, you can use @code{MAX()} +In MySQL versions prior to Version 3.22.5, you can use @code{MAX()} instead of @code{GREATEST}. @findex DEGREES() @@ -31075,11 +31075,11 @@ mysql> select PERIOD_DIFF(9802,199703); @itemx ADDDATE(date,INTERVAL expr type) @itemx SUBDATE(date,INTERVAL expr type) -These functions perform date arithmetic. They are new for @strong{MySQL} +These functions perform date arithmetic. They are new for MySQL Version 3.22. @code{ADDDATE()} and @code{SUBDATE()} are synonyms for @code{DATE_ADD()} and @code{DATE_SUB()}. -In @strong{MySQL} Version 3.23, you can use @code{+} and @code{-} instead of +In MySQL Version 3.23, you can use @code{+} and @code{-} instead of @code{DATE_ADD()} and @code{DATE_SUB()} if the expression on the right side is a date or datetime column. (See example) @@ -31112,7 +31112,7 @@ are related: @item @code{DAY_SECOND} @tab @code{"DAYS HOURS:MINUTES:SECONDS"} @end multitable -@strong{MySQL} allows any punctuation delimiter in the @code{expr} format. +MySQL allows any punctuation delimiter in the @code{expr} format. Those shown in the table are the suggested delimiters. If the @code{date} argument is a @code{DATE} value and your calculations involve only @code{YEAR}, @code{MONTH}, and @code{DAY} parts (that is, no time parts), the @@ -31147,14 +31147,14 @@ mysql> SELECT DATE_SUB("1998-01-02", INTERVAL 31 DAY); If you specify an interval value that is too short (does not include all the interval parts that would be expected from the @code{type} keyword), -@strong{MySQL} assumes you have left out the leftmost parts of the interval +MySQL assumes you have left out the leftmost parts of the interval value. For example, if you specify a @code{type} of @code{DAY_SECOND}, the value of @code{expr} is expected to have days, hours, minutes, and seconds -parts. If you specify a value like @code{"1:10"}, @strong{MySQL} assumes +parts. If you specify a value like @code{"1:10"}, MySQL assumes that the days and hours parts are missing and the value represents minutes and seconds. In other words, @code{"1:10" DAY_SECOND} is interpreted in such a way that it is equivalent to @code{"1:10" MINUTE_SECOND}. This is -analogous to the way that @strong{MySQL} interprets @code{TIME} values +analogous to the way that MySQL interprets @code{TIME} values as representing elapsed time rather than as time of day. Note that if you add or subtract a date value against something that @@ -31281,8 +31281,8 @@ mysql> select DATE_FORMAT('1999-01-01', '%X %V'); -> '1998 52' @end example -As of @strong{MySQL} Version 3.23, the @samp{%} character is required before -format specifier characters. In earlier versions of @strong{MySQL}, +As of MySQL Version 3.23, the @samp{%} character is required before +format specifier characters. In earlier versions of MySQL, @samp{%} was optional. @findex TIME_FORMAT() @@ -31430,7 +31430,7 @@ mysql> select TIME_TO_SEC('00:39:38'); @findex functions, arithmetic @findex functions, bit -@strong{MySQL} uses @code{BIGINT} (64-bit) arithmetic for bit operations, so +MySQL uses @code{BIGINT} (64-bit) arithmetic for bit operations, so these operators have a maximum range of 64 bits. @table @code @@ -31510,14 +31510,14 @@ If there is no current database, @code{DATABASE()} returns the empty string. @item USER() @itemx SYSTEM_USER() @itemx SESSION_USER() -Returns the current @strong{MySQL} user name: +Returns the current MySQL user name: @example mysql> select USER(); -> 'davida@@localhost' @end example -In @strong{MySQL} Version 3.22.11 or later, this includes the client hostname +In MySQL Version 3.22.11 or later, this includes the client hostname as well as the user name. You can extract just the user name part like this (which works whether or not the value includes a hostname part): @@ -31529,7 +31529,7 @@ mysql> select substring_index(USER(),"@@",1); @findex PASSWORD() @item PASSWORD(str) Calculates a password string from the plaintext password @code{str}. This is -the function that is used for encrypting @strong{MySQL} passwords for storage +the function that is used for encrypting MySQL passwords for storage in the @code{Password} column of the @code{user} grant table: @example @@ -31542,7 +31542,7 @@ mysql> select PASSWORD('badpwd'); @code{PASSWORD()} does not perform password encryption in the same way that Unix passwords are encrypted. You should not assume that if your Unix -password and your @strong{MySQL} password are the same, @code{PASSWORD()} +password and your MySQL password are the same, @code{PASSWORD()} will result in the same encrypted value as is stored in the Unix password file. See @code{ENCRYPT()}. @@ -31550,7 +31550,7 @@ file. See @code{ENCRYPT()}. @item ENCRYPT(str[,salt]) Encrypt @code{str} using the Unix @code{crypt()} system call. The @code{salt} argument should be a string with two characters. -(As of @strong{MySQL} Version 3.22.16, @code{salt} may be longer than two characters.): +(As of MySQL Version 3.22.16, @code{salt} may be longer than two characters.): @example mysql> select ENCRYPT("hello"); @@ -31633,7 +31633,7 @@ You can generate sequences without calling @code{LAST_INSERT_ID()}, but the utility of using the function this way is that the ID value is maintained in the server as the last automatically generated value. You can retrieve the new ID as you would read any normal @code{AUTO_INCREMENT} value in -@strong{MySQL}. For example, @code{LAST_INSERT_ID()} (without an argument) +MySQL. For example, @code{LAST_INSERT_ID()} (without an argument) will return the new ID. The C API function @code{mysql_insert_id()} can also be used to get the value. @@ -31654,7 +31654,7 @@ mysql> select FORMAT(12332.2,0); @findex VERSION() @item VERSION() -Returns a string indicating the @strong{MySQL} server version: +Returns a string indicating the MySQL server version: @example mysql> select VERSION(); @@ -31715,7 +31715,7 @@ been released. @findex BENCHMARK() @item BENCHMARK(count,expr) The @code{BENCHMARK()} function executes the expression @code{expr} -repeatedly @code{count} times. It may be used to time how fast @strong{MySQL} +repeatedly @code{count} times. It may be used to time how fast MySQL processes the expression. The result value is always @code{0}. The intended use is in the @code{mysql} client, which reports query execution times: @@ -31882,7 +31882,7 @@ the @code{ASC} keyword. @item You can in the @code{WHERE} clause use any of the functions that -@strong{MySQL} support. @xref{Functions}. +MySQL support. @xref{Functions}. @item The @code{HAVING} clause can refer to any column or alias named in the @@ -31900,14 +31900,14 @@ Write this instead: mysql> select col_name from tbl_name WHERE col_name > 0; @end example -In @strong{MySQL} Version 3.22.5 or later, you can also write queries like this: +In MySQL Version 3.22.5 or later, you can also write queries like this: @example mysql> select user,max(salary) from users group by user HAVING max(salary)>10; @end example -In older @strong{MySQL} versions, you can write this instead: +In older MySQL versions, you can write this instead: @example mysql> select user,max(salary) AS sum from users @@ -31916,7 +31916,7 @@ mysql> select user,max(salary) AS sum from users @item @code{SQL_SMALL_RESULT}, @code{SQL_BIG_RESULT}, @code{SQL_BUFFER_RESULT}, -@code{STRAIGHT_JOIN}, and @code{HIGH_PRIORITY} are @strong{MySQL} extensions +@code{STRAIGHT_JOIN}, and @code{HIGH_PRIORITY} are MySQL extensions to ANSI SQL92. @item @@ -31929,15 +31929,15 @@ statement that is waiting for the table to be free. @item @code{SQL_BIG_RESULT} can be used with @code{GROUP BY} or @code{DISTINCT} to tell the optimizer that the result set will have many rows. In this case, -@strong{MySQL} will directly use disk-based temporary tables if needed. -@strong{MySQL} will also, in this case, prefer sorting to doing a +MySQL will directly use disk-based temporary tables if needed. +MySQL will also, in this case, prefer sorting to doing a temporary table with a key on the @code{GROUP BY} elements. @item @cindex @code{GROUP BY}, extensions to ANSI SQL If you use @code{GROUP BY}, the output rows will be sorted according to the @code{GROUP BY} as if you would have had an @code{ORDER BY} over all the fields -in the @code{GROUP BY}. @strong{MySQL} has extended the @code{GROUP BY} so that +in the @code{GROUP BY}. MySQL has extended the @code{GROUP BY} so that you can also specify @code{ASC} and @code{DESC} to @code{GROUP BY}: @example @@ -31945,7 +31945,7 @@ SELECT a,COUNT(b) FROM test_table GROUP BY a DESC @end example @item -@strong{MySQL} has extended the use of @code{GROUP BY} to allow you to +MySQL has extended the use of @code{GROUP BY} to allow you to select fields which are not mentioned in the @code{GROUP BY} clause. If you are not getting the results you expect from your query, please read the @code{GROUP BY} description. @@ -31953,15 +31953,15 @@ read the @code{GROUP BY} description. @item @code{SQL_BUFFER_RESULT} will force the result to be put into a temporary -table. This will help @strong{MySQL} free the table locks early and will help +table. This will help MySQL free the table locks early and will help in cases where it takes a long time to send the result set to the client. @item -@code{SQL_SMALL_RESULT}, a @strong{MySQL}-specific option, can be used +@code{SQL_SMALL_RESULT}, a MySQL-specific option, can be used with @code{GROUP BY} or @code{DISTINCT} to tell the optimizer that the -result set will be small. In this case, @strong{MySQL} will use fast +result set will be small. In this case, MySQL will use fast temporary tables to store the resulting table instead of using sorting. In -@strong{MySQL} Version 3.23 this shouldn't normally be needed. +MySQL Version 3.23 this shouldn't normally be needed. @item @code{STRAIGHT_JOIN} forces the optimizer to join the tables in the order in @@ -32043,7 +32043,7 @@ FROM test_table; @item @findex DUMPFILE -If you use @code{INTO DUMPFILE} instead of @code{INTO OUTFILE}, @strong{MySQL} +If you use @code{INTO DUMPFILE} instead of @code{INTO OUTFILE}, MySQL will only write one row into the file, without any column or line terminations and without any escaping. This is useful if you want to store a blob in a file. @@ -32051,7 +32051,7 @@ store a blob in a file. @item Note that any file created by @code{INTO OUTFILE} and @code{INTO DUMPFILE} is going to be readable for all users! The reason is that the -@strong{MySQL} server can't create a file that is owned by anyone else +MySQL server can't create a file that is owned by anyone else than the user it's running as (you should never run @code{mysqld} as root), the file has to be word readable so that you can retrieve the rows. @@ -32081,7 +32081,7 @@ the examined rows will be write locked. @findex NATURAL RIGHT OUTER JOIN @findex STRAIGHT_JOIN -@strong{MySQL} supports the following @code{JOIN} syntaxes for use in +MySQL supports the following @code{JOIN} syntaxes for use in @code{SELECT} statements: @example @@ -32186,13 +32186,13 @@ is always read before the right table. This can be used for those (few) cases where the join optimizer puts the tables in the wrong order. @item -As of @strong{MySQL} Version 3.23.12, you can give hints about which -index @strong{MySQL} should use when retrieving information from a -table. This is useful if @code{EXPLAIN} shows that @strong{MySQL} is +As of MySQL Version 3.23.12, you can give hints about which +index MySQL should use when retrieving information from a +table. This is useful if @code{EXPLAIN} shows that MySQL is using the wrong index. By specifying @code{USE INDEX (key_list)}, you -can tell @strong{MySQL} to use only one of the specified indexes to +can tell MySQL to use only one of the specified indexes to find rows in the table. The alternative syntax @code{IGNORE INDEX -(key_list)} can be used to tell @strong{MySQL} to not use some +(key_list)} can be used to tell MySQL to not use some particular index. @end itemize @@ -32235,9 +32235,9 @@ or INSERT [LOW_PRIORITY | DELAYED] [IGNORE] ... VALUES} form of the statement inserts rows based on explicitly specified values. The @code{INSERT ... SELECT} form inserts rows selected from another table or tables. The @code{INSERT ... VALUES} -form with multiple value lists is supported in @strong{MySQL} Version +form with multiple value lists is supported in MySQL Version 3.22.5 or later. The @code{col_name=expression} syntax is supported in -@strong{MySQL} Version 3.22.10 or later. +MySQL Version 3.22.10 or later. @code{tbl_name} is the table into which rows should be inserted. The column name list or the @code{SET} clause indicates which columns the statement @@ -32289,7 +32289,7 @@ existing key value. You can determine with the C API function @code{mysql_info()} how many rows were inserted into the table. @item -If @strong{MySQL} was configured using the @code{DONT_USE_DEFAULT_FIELDS} +If MySQL was configured using the @code{DONT_USE_DEFAULT_FIELDS} option, @code{INSERT} statements generate an error unless you explicitly specify values for all columns that require a non-@code{NULL} value. @xref{configure options, , @code{configure} options}. @@ -32386,7 +32386,7 @@ the query. @xref{INSERT}. @item To ensure that the update log/binary log can be used to re-create the -original tables, @strong{MySQL} will not allow concurrent inserts during +original tables, MySQL will not allow concurrent inserts during @code{INSERT .... SELECT}. @end itemize @@ -32407,12 +32407,12 @@ INSERT DELAYED ... @end example The @code{DELAYED} option for the @code{INSERT} statement is a -@strong{MySQL}-specific option that is very useful if you have clients +MySQL-specific option that is very useful if you have clients that can't wait for the @code{INSERT} to complete. This is a common -problem when you use @strong{MySQL} for logging and you also +problem when you use MySQL for logging and you also periodically run @code{SELECT} and @code{UPDATE} statements that take a -long time to complete. @code{DELAYED} was introduced in @strong{MySQL} -Version 3.22.15. It is a @strong{MySQL} extension to ANSI SQL92. +long time to complete. @code{DELAYED} was introduced in MySQL +Version 3.22.15. It is a MySQL extension to ANSI SQL92. @code{INSERT DELAYED} only works with @code{ISAM} and @code{MyISAM} tables. Note that as @code{MyISAM} tables supports concurrent @@ -32490,7 +32490,7 @@ the @code{mysqld} server doesn't use all memory for the delayed memory queue. @item -The handler thread will show up in the @strong{MySQL} process list +The handler thread will show up in the MySQL process list with @code{delayed_insert} in the @code{Command} column. It will be killed if you execute a @code{FLUSH TABLES} command or kill it with @code{KILL thread_id}. However, it will first store all queued rows into the @@ -32569,16 +32569,16 @@ following statement doubles the @code{age} column, then increments it: mysql> UPDATE persondata SET age=age*2, age=age+1; @end example -If you set a column to the value it currently has, @strong{MySQL} notices +If you set a column to the value it currently has, MySQL notices this and doesn't update it. @findex mysql_info() @code{UPDATE} returns the number of rows that were actually changed. -In @strong{MySQL} Version 3.22 or later, the C API function @code{mysql_info()} +In MySQL Version 3.22 or later, the C API function @code{mysql_info()} returns the number of rows that were matched and updated and the number of warnings that occurred during the @code{UPDATE}. -In @strong{MySQL} Version 3.23, you can use @code{LIMIT #} to ensure that +In MySQL Version 3.23, you can use @code{LIMIT #} to ensure that only a given number of rows are changed. @@ -32623,7 +32623,7 @@ utility to reorganize tables. @code{OPTIMIZE TABLE} is easier, but @code{myisamchk} is faster. See @ref{OPTIMIZE TABLE, , @code{OPTIMIZE TABLE}} and @ref{Optimization}. -The @strong{MySQL}-specific @code{LIMIT rows} option to @code{DELETE} tells +The MySQL-specific @code{LIMIT rows} option to @code{DELETE} tells the server the maximum number of rows to be deleted before control is returned to the client. This can be used to ensure that a specific @code{DELETE} command doesn't take too much time. You can simply repeat @@ -32684,7 +32684,7 @@ the old record is deleted before the new record is inserted. @xref{INSERT, , @code{INSERT}}. In other words, you can't access the values of the old row from a -@code{REPLACE} statement. In some old @strong{MySQL} version it looked +@code{REPLACE} statement. In some old MySQL version it looked like you could do this, but that was a bug that has been corrected. When one uses a @code{REPLACE} command, @code{mysql_affected_rows()} @@ -32718,7 +32718,7 @@ The @code{LOAD DATA INFILE} statement reads rows from a text file into a table at a very high speed. If the @code{LOCAL} keyword is specified, the file is read from the client host. If @code{LOCAL} is not specified, the file must be located on the server. (@code{LOCAL} is available in -@strong{MySQL} Version 3.22.6 or later.) +MySQL Version 3.22.6 or later.) For security reasons, when reading text files located on the server, the files must either reside in the database directory or be readable by all. @@ -32742,7 +32742,7 @@ host to the server host. On the other hand, you do not need the @strong{file} privilege to load local files. @c old version -If you are using @strong{MySQL} before Version 3.23.24 you can't read from a +If you are using MySQL before Version 3.23.24 you can't read from a FIFO with @code{LOAD DATA INFILE}. If you need to read from a FIFO (for example the output from gunzip), use @code{LOAD DATA LOCAL INFILE} instead. @@ -33116,7 +33116,7 @@ mysql> LOAD DATA INFILE 'persondata.txt' You must also specify a field list if the order of the fields in the input file differs from the order of the columns in the table. Otherwise, -@strong{MySQL} cannot tell how to match up input fields with table columns. +MySQL cannot tell how to match up input fields with table columns. If a row has too few fields, the columns for which no input field is present are set to default values. Default value assignment is described in @@ -33183,7 +33183,7 @@ cat < /dev/tcp/10.1.1.12/4711 > /nt/mysql/db/x/x mysql -e "LOAD DATA INFILE 'x' INTO TABLE x" x @end example -If you are using a version of @strong{MySQL} older than 3.23.25 +If you are using a version of MySQL older than 3.23.25 you can only do the above with @code{LOAD DATA LOCAL INFILE}. For more information about the efficiency of @code{INSERT} versus @@ -33219,10 +33219,10 @@ CREATE DATABASE [IF NOT EXISTS] db_name allowable database names are given in @ref{Legal names}. An error occurs if the database already exists and you didn't specify @code{IF NOT EXISTS}. -Databases in @strong{MySQL} are implemented as directories containing files +Databases in MySQL are implemented as directories containing files that correspond to tables in the database. Because there are no tables in a database when it is initially created, the @code{CREATE DATABASE} statement -only creates a directory under the @strong{MySQL} data directory. +only creates a directory under the MySQL data directory. @cindex @code{mysqladmin} You can also create databases with @code{mysqladmin}. @@ -33260,7 +33260,7 @@ directory all files with the following extensions: All subdirectories that consists of 2 digits (@code{RAID} directories) are also removed. -In @strong{MySQL} Version 3.22 or later, you can use the keywords +In MySQL Version 3.22 or later, you can use the keywords @code{IF EXISTS} to prevent an error from occurring if the database doesn't exist. @@ -33369,18 +33369,18 @@ creates a table with the given name in the current database. Rules for allowable table names are given in @ref{Legal names}. An error occurs if there is no current database or if the table already exists. -In @strong{MySQL} Version 3.22 or later, the table name can be specified as +In MySQL Version 3.22 or later, the table name can be specified as @code{db_name.tbl_name}. This works whether or not there is a current database. -In @strong{MySQL} Version 3.23, you can use the @code{TEMPORARY} keyword when +In MySQL Version 3.23, you can use the @code{TEMPORARY} keyword when you create a table. A temporary table will automatically be deleted if a connection dies and the name is per connection. This means that two different connections can both use the same temporary table name without conflicting with each other or with an existing table of the same name. (The existing table is hidden until the temporary table is deleted). -In @strong{MySQL} Version 3.23 or later, you can use the keywords +In MySQL Version 3.23 or later, you can use the keywords @code{IF NOT EXISTS} so that an error does not occur if the table already exists. Note that there is no verification that the table structures are identical. @@ -33419,7 +33419,7 @@ with @code{DELETE FROM table_name} (without a @code{WHERE}) in @code{AUTOCOMMIT} mode, the sequence starts over for all table types. @strong{NOTE:} There can be only one @code{AUTO_INCREMENT} column per -table, and it must be indexed. @strong{MySQL} Version 3.23 will also only +table, and it must be indexed. MySQL Version 3.23 will also only work properly if the auto_increment column only has positive values. Inserting a negative number is regarded as inserting a very large positive number. This is done to avoid precision problems when @@ -33428,7 +33428,7 @@ doesn't accidentally get an auto_increment column that contains 0. @cindex ODBC compatibility @cindex compatibility, with ODBC -To make @strong{MySQL} compatible with some ODBC applications, you can find +To make MySQL compatible with some ODBC applications, you can find the last inserted row with the following query: @example @@ -33443,7 +33443,7 @@ current date and time. Because @code{TIMESTAMP} columns behave this way, the @code{NULL} and @code{NOT NULL} attributes do not apply in the normal way and are ignored if you specify them. -On the other hand, to make it easier for @strong{MySQL} clients to use +On the other hand, to make it easier for MySQL clients to use @code{TIMESTAMP} columns, the server reports that such columns may be assigned @code{NULL} values (which is true), even though @code{TIMESTAMP} never actually will contain a @code{NULL} value. You can see this when you @@ -33454,7 +33454,7 @@ as setting it to @code{NULL}, because @code{0} is a valid @code{TIMESTAMP} value. @item -If no @code{DEFAULT} value is specified for a column, @strong{MySQL} +If no @code{DEFAULT} value is specified for a column, MySQL automatically assigns one. If the column may take @code{NULL} as a value, the default value is @@ -33488,17 +33488,17 @@ set the default for a date column to be the value of a function such as @code{KEY} is a synonym for @code{INDEX}. @item -In @strong{MySQL}, a @code{UNIQUE} key can have only distinct values. An +In MySQL, a @code{UNIQUE} key can have only distinct values. An error occurs if you try to add a new row with a key that matches an existing row. @item @tindex PRIMARY KEY A @code{PRIMARY KEY} is a unique @code{KEY} with the extra constraint -that all key columns must be defined as @code{NOT NULL}. In @strong{MySQL} +that all key columns must be defined as @code{NOT NULL}. In MySQL the key is named @code{PRIMARY}. A table can have only one @code{PRIMARY KEY}. If you don't have a @code{PRIMARY KEY} and some applications ask for the -@code{PRIMARY KEY} in your tables, @strong{MySQL} will return the first +@code{PRIMARY KEY} in your tables, MySQL will return the first @code{UNIQUE} key, which doesn't have any @code{NULL} columns, as the @code{PRIMARY KEY}. @@ -33551,7 +33551,7 @@ When you use @code{ORDER BY} or @code{GROUP BY} with a @code{TEXT} or @xref{BLOB, , @code{BLOB}}. @item -In @strong{MySQL} Version 3.23.23 or later, you can also create special +In MySQL Version 3.23.23 or later, you can also create special @strong{FULLTEXT} indexes. They are used for full-text search. Only the @code{MyISAM} table type supports @code{FULLTEXT} indexes. They can be created only from @code{VARCHAR} and @code{TEXT} columns. @@ -33580,7 +33580,7 @@ row length = 1 @item The @code{table_options} and @code{SELECT} options are only -implemented in @strong{MySQL} Version 3.23 and above. +implemented in MySQL Version 3.23 and above. The different table types are: @@ -33595,9 +33595,9 @@ The different table types are: @xref{Table types}. If a table type is specified, and that particular type is not available, -@strong{MySQL} will choose the closest table type to the one that you have +MySQL will choose the closest table type to the one that you have specified. For example, if @code{TYPE=BDB} is specified, and that distribution -of @strong{MySQL} does not support @code{BDB} tables, the table will be created +of MySQL does not support @code{BDB} tables, the table will be created as @code{MyISAM} instead. The other table options are used to optimize the behavior of the @@ -33607,17 +33607,17 @@ The options work for all table types, if not otherwise indicated: @multitable @columnfractions .20 .80 @item @code{AUTO_INCREMENT} @tab The next auto_increment value you want to set for your table (MyISAM). @item @code{AVG_ROW_LENGTH} @tab An approximation of the average row length for your table. You only need to set this for large tables with variable size records. -@item @code{CHECKSUM} @tab Set this to 1 if you want @strong{MySQL} to maintain a checksum for all rows (makes the table a little slower to update but makes it easier to find corrupted tables) (MyISAM). +@item @code{CHECKSUM} @tab Set this to 1 if you want MySQL to maintain a checksum for all rows (makes the table a little slower to update but makes it easier to find corrupted tables) (MyISAM). @item @code{COMMENT} @tab A 60-character comment for your table. @item @code{MAX_ROWS} @tab Max number of rows you plan to store in the table. @item @code{MIN_ROWS} @tab Minimum number of rows you plan to store in the table. @item @code{PACK_KEYS} @tab Set this to 1 if you want to have a smaller index. This usually makes updates slower and reads faster (MyISAM, ISAM). -@item @code{PASSWORD} @tab Encrypt the @code{.frm} file with a password. This option doesn't do anything in the standard @strong{MySQL} version. +@item @code{PASSWORD} @tab Encrypt the @code{.frm} file with a password. This option doesn't do anything in the standard MySQL version. @item @code{DELAY_KEY_WRITE} @tab Set this to 1 if want to delay key table updates until the table is closed (MyISAM). @item @code{ROW_FORMAT} @tab Defines how the rows should be stored. Currently you can only use the DYNAMIC and STATIC options for MyISAM tables. @end multitable -When you use a @code{MyISAM} table, @strong{MySQL} uses the product of +When you use a @code{MyISAM} table, MySQL uses the product of @code{max_rows * avg_row_length} to decide how big the resulting table will be. If you don't specify any of the above options, the maximum size for a table will be 4G (or 2G if your operating systems only supports 2G @@ -33627,7 +33627,7 @@ to make the index smaller and faster if you don't really need big files. If you don't use @code{PACK_KEYS}, the default is to only pack strings, not numbers. If you use @code{PACK_KEYS=1}, numbers will be packed as well. -When packing binary number keys, @strong{MySQL} will use prefix compression. +When packing binary number keys, MySQL will use prefix compression. This means that you will only get a big benefit of this if you have many numbers that are the same. Prefix compression means that every key needs one extra byte to indicate how many bytes of the previous key are @@ -33644,7 +33644,7 @@ be stored in the same byte that is used to mark if a key is @code{NULL}.) @item If you specify a @code{SELECT} after the @code{CREATE} statement, -@strong{MySQL} will create new fields for all elements in the +MySQL will create new fields for all elements in the @code{SELECT}. For example: @example @@ -33695,7 +33695,7 @@ If any errors occur while copying the data to the table, it will automatically be deleted. To ensure that the update log/binary log can be used to re-create the -original tables, @strong{MySQL} will not allow concurrent inserts during +original tables, MySQL will not allow concurrent inserts during @code{CREATE TABLE .... SELECT}. @item The @code{RAID_TYPE} option will help you to break the 2G/4G limit for @@ -33703,7 +33703,7 @@ the MyISAM data file (not the index file) on operating systems that don't support big files. You can get also more speed from the I/O bottleneck by putting @code{RAID} directories on different physical disks. @code{RAID_TYPE} will work on any OS, as long as you have -configured @strong{MySQL} with @code{--with-raid}. For now the only allowed +configured MySQL with @code{--with-raid}. For now the only allowed @code{RAID_TYPE} is @code{STRIPED} (@code{1} and @code{RAID0} are aliases for this). @@ -33724,7 +33724,7 @@ All mapped tables must be in the same database as the @code{MERGE} table. @item In the created table the @code{PRIMARY} key will be placed first, followed by all @code{UNIQUE} keys and then the normal keys. This helps the -@strong{MySQL} optimizer to prioritize which key to use and also more quickly +MySQL optimizer to prioritize which key to use and also more quickly detect duplicated @code{UNIQUE} keys. @item @@ -33742,7 +33742,7 @@ option. @xref{Symbolic links to tables}. @cindex silent column changes -In some cases, @strong{MySQL} silently changes a column specification from +In some cases, MySQL silently changes a column specification from that given in a @code{CREATE TABLE} statement. (This may also occur with @code{ALTER TABLE}.): @@ -33757,8 +33757,8 @@ variable-length as a result. Therefore, if a table contains any variable-length columns (@code{VARCHAR}, @code{TEXT}, or @code{BLOB}), all @code{CHAR} columns longer than three characters are changed to @code{VARCHAR} columns. This doesn't affect how you use the columns in -any way; in @strong{MySQL}, @code{VARCHAR} is just a different way to -store characters. @strong{MySQL} performs this conversion because it +any way; in MySQL, @code{VARCHAR} is just a different way to +store characters. MySQL performs this conversion because it saves space and makes table operations faster. @xref{Table types}. @item @@ -33776,11 +33776,11 @@ them. @code{DESCRIBE tbl_name} always reports that a @code{TIMESTAMP} column may be assigned @code{NULL} values. @item -@strong{MySQL} maps certain column types used by other SQL database vendors -to @strong{MySQL} types. @xref{Other-vendor column types}. +MySQL maps certain column types used by other SQL database vendors +to MySQL types. @xref{Other-vendor column types}. @end itemize -If you want to see whether or not @strong{MySQL} used a column type other +If you want to see whether or not MySQL used a column type other than the one you specified, issue a @code{DESCRIBE tbl_name} statement after creating or altering your table. @@ -33825,9 +33825,9 @@ also change the comment for the table and type of the table. If you use @code{ALTER TABLE} to change a column specification but @code{DESCRIBE tbl_name} indicates that your column was not changed, it is -possible that @strong{MySQL} ignored your modification for one of the reasons +possible that MySQL ignored your modification for one of the reasons described in @ref{Silent column changes}. For example, if you try to change -a @code{VARCHAR} column to @code{CHAR}, @strong{MySQL} will still use +a @code{VARCHAR} column to @code{CHAR}, MySQL will still use @code{VARCHAR} if the table contains other variable-length columns. @code{ALTER TABLE} works by making a temporary copy of the original table. @@ -33839,7 +33839,7 @@ table is readable by other clients. Updates and writes to the table are stalled until the new table is ready. Note that if you use any other option to @code{ALTER TABLE} than -@code{RENAME}, @strong{MySQL} will always create a temporary table, even +@code{RENAME}, MySQL will always create a temporary table, even if the data wouldn't strictly need to be copied (like when you change the name of a column). We plan to fix this in the future, but as one doesn't normally do @code{ALTER TABLE} that often this isn't that high on our TODO. @@ -33850,7 +33850,7 @@ To use @code{ALTER TABLE}, you need @strong{ALTER}, @strong{INSERT}, and @strong{CREATE} privileges on the table. @item -@code{IGNORE} is a @strong{MySQL} extension to ANSI SQL92. +@code{IGNORE} is a MySQL extension to ANSI SQL92. It controls how @code{ALTER TABLE} works if there are duplicates on unique keys in the new table. If @code{IGNORE} isn't specified, the copy is aborted and rolled back. @@ -33860,12 +33860,12 @@ key, only the first row is used; the others are deleted. @item You can issue multiple @code{ADD}, @code{ALTER}, @code{DROP}, and @code{CHANGE} clauses in a single @code{ALTER TABLE} statement. This is a -@strong{MySQL} extension to ANSI SQL92, which allows only one of each clause +MySQL extension to ANSI SQL92, which allows only one of each clause per @code{ALTER TABLE} statement. @item @code{CHANGE col_name}, @code{DROP col_name}, and @code{DROP -INDEX} are @strong{MySQL} extensions to ANSI SQL92. +INDEX} are MySQL extensions to ANSI SQL92. @item @code{MODIFY} is an Oracle extension to @code{ALTER TABLE}. @@ -33875,7 +33875,7 @@ The optional word @code{COLUMN} is a pure noise word and can be omitted. @item If you use @code{ALTER TABLE tbl_name RENAME TO new_name} without any other -options, @strong{MySQL} simply renames the files that correspond to the table +options, MySQL simply renames the files that correspond to the table @code{tbl_name}. There is no need to create the temporary table. @xref{RENAME TABLE,, @code{RENAME TABLE}}. @@ -33903,7 +33903,7 @@ example: mysql> ALTER TABLE t1 CHANGE b b BIGINT NOT NULL; @end example -However, as of @strong{MySQL} Version 3.22.16a, you can also use @code{MODIFY} +However, as of MySQL Version 3.22.16a, you can also use @code{MODIFY} to change a column's type without renaming it: @example @@ -33918,10 +33918,10 @@ the column shorter than the number of characters that are indexed. @item When you change a column type using @code{CHANGE} or @code{MODIFY}, -@strong{MySQL} tries to convert data to the new type as well as possible. +MySQL tries to convert data to the new type as well as possible. @item -In @strong{MySQL} Version 3.22 or later, you can use @code{FIRST} or +In MySQL Version 3.22 or later, you can use @code{FIRST} or @code{ADD ... AFTER col_name} to add a column at a specific position within a table row. The default is to add the column last. @@ -33930,13 +33930,13 @@ a table row. The default is to add the column last. @code{ALTER COLUMN} specifies a new default value for a column or removes the old default value. If the old default is removed and the column can be @code{NULL}, the new -default is @code{NULL}. If the column cannot be @code{NULL}, @strong{MySQL} +default is @code{NULL}. If the column cannot be @code{NULL}, MySQL assigns a default value, as described in @ref{CREATE TABLE, , @code{CREATE TABLE}}. @findex DROP INDEX @item -@code{DROP INDEX} removes an index. This is a @strong{MySQL} extension to +@code{DROP INDEX} removes an index. This is a MySQL extension to ANSI SQL92. @xref{DROP INDEX}. @item @@ -33952,7 +33952,7 @@ If what you intend is to remove the table, use @code{DROP TABLE} instead. @item @code{DROP PRIMARY KEY} drops the primary index. If no such index exists, it drops the first @code{UNIQUE} index in the table. -(@strong{MySQL} marks the first @code{UNIQUE} key as the @code{PRIMARY KEY} +(MySQL marks the first @code{UNIQUE} key as the @code{PRIMARY KEY} if no @code{PRIMARY KEY} was specified explicitly.) @findex ORDER BY @@ -33960,7 +33960,7 @@ if no @code{PRIMARY KEY} was specified explicitly.) @code{ORDER BY} allows you to create the new table with the rows in a specific order. Note that the table will not remain in this order after inserts and deletes. In some cases, it may make sorting easier for -@strong{MySQL} if the table is in order by the column that you wish to +MySQL if the table is in order by the column that you wish to order it by later. This option is mainly useful when you know that you are mostly going to query the rows in a certain order; By using this option after big changes to the table, you may be able to get higher @@ -34092,7 +34092,7 @@ active transactions. You must also have the @code{ALTER} and @code{DROP} privilege on the original table and @code{CREATE} and @code{INSERT} privilege on the new table. -If @strong{MySQL} encounters any errors in a multiple table rename, it +If MySQL encounters any errors in a multiple table rename, it will do a reverse rename for all renamed tables to get everything back to the original state. @@ -34109,7 +34109,7 @@ DROP TABLE [IF EXISTS] tbl_name [, tbl_name,...] [RESTRICT | CASCADE] @code{DROP TABLE} removes one or more tables. All table data and the table definition are @emph{removed}, so @strong{be careful} with this command! -In @strong{MySQL} Version 3.22 or later, you can use the keywords +In MySQL Version 3.22 or later, you can use the keywords @code{IF EXISTS} to prevent an error from occurring for tables that don't exist. @@ -34133,7 +34133,7 @@ automatically commit any active transactions. CREATE [UNIQUE|FULLTEXT] INDEX index_name ON tbl_name (col_name[(length)],... ) @end example -The @code{CREATE INDEX} statement doesn't do anything in @strong{MySQL} prior +The @code{CREATE INDEX} statement doesn't do anything in MySQL prior to Version 3.22. In Version 3.22 or later, @code{CREATE INDEX} is mapped to an @code{ALTER TABLE} statement to create indexes. @xref{ALTER TABLE, , @code{ALTER TABLE}}. @@ -34165,15 +34165,15 @@ operations! Note that you can only add an index on a column that can have @code{NULL} values or on a @code{BLOB}/@code{TEXT} column if you are using -@strong{MySQL} Version 3.23.2 or newer and are using the @code{MyISAM} +MySQL Version 3.23.2 or newer and are using the @code{MyISAM} table type. -For more information about how @strong{MySQL} uses indexes, see -@ref{MySQL indexes, , @strong{MySQL} indexes}. +For more information about how MySQL uses indexes, see +@ref{MySQL indexes, , MySQL indexes}. @code{FULLTEXT} indexes can index only @code{VARCHAR} and @code{TEXT} columns, and only in @code{MyISAM} tables. @code{FULLTEXT} indexes -are available in @strong{MySQL} Version 3.23.23 and later. +are available in MySQL Version 3.23.23 and later. @ref{Fulltext Search}. @@ -34187,7 +34187,7 @@ DROP INDEX index_name ON tbl_name @end example @code{DROP INDEX} drops the index named @code{index_name} from the table -@code{tbl_name}. @code{DROP INDEX} doesn't do anything in @strong{MySQL} +@code{tbl_name}. @code{DROP INDEX} doesn't do anything in MySQL prior to Version 3.22. In Version 3.22 or later, @code{DROP INDEX} is mapped to an @code{ALTER TABLE} statement to drop the index. @xref{ALTER TABLE, , @code{ALTER TABLE}}. @@ -34211,7 +34211,7 @@ prior to Version 3.22. In Version 3.22 or later, @code{DROP INDEX} is mapped to USE db_name @end example -The @code{USE db_name} statement tells @strong{MySQL} to use the @code{db_name} +The @code{USE db_name} statement tells MySQL to use the @code{db_name} database as the default database for subsequent queries. The database remains current until the end of the session or until another @code{USE} statement is issued: @@ -34257,7 +34257,7 @@ may be a column name or a string containing the SQL @samp{%} and @samp{_} wild-card characters. If the column types are different than you expect them to be based on a -@code{CREATE TABLE} statement, note that @strong{MySQL} sometimes +@code{CREATE TABLE} statement, note that MySQL sometimes changes column types. @xref{Silent column changes}. @cindex Oracle compatibility @@ -34285,12 +34285,12 @@ The @code{SHOW} statement provides similar information. @findex COMMIT @findex ROLLBACK -By default, @strong{MySQL} runs in @code{autocommit} mode. This means that -as soon as you execute an update, @strong{MySQL} will store the update on +By default, MySQL runs in @code{autocommit} mode. This means that +as soon as you execute an update, MySQL will store the update on disk. If you are using transactions safe tables (like @code{BDB}, -@code{InnoDB}, you can put @strong{MySQL} into +@code{InnoDB}, you can put MySQL into non-@code{autocommit} mode with the following command: @example @@ -34320,7 +34320,7 @@ a warning. All transactional safe tables will be restored but any non-transactional table will not change. If you are using @code{BEGIN} or @code{SET AUTOCOMMIT=0}, you -should use the @strong{MySQL} binary log for backups instead of the +should use the MySQL binary log for backups instead of the older update log. Transactions are stored in the binary log in one chunk, upon @code{COMMIT}, to ensure that transactions which are rolled back are not stored. @xref{Binary log}. @@ -34369,7 +34369,7 @@ or @code{WRITE} to the table. Other threads are blocked. The difference between @code{READ LOCAL} and @code{READ} is that @code{READ LOCAL} allows non-conflicting @code{INSERT} statements to execute while the lock is held. This can't however be used if you are -going to manipulate the database files outside @strong{MySQL} while you +going to manipulate the database files outside MySQL while you hold the lock. When you use @code{LOCK TABLES}, you must lock all tables that you are @@ -34403,7 +34403,7 @@ This policy ensures that table locking is deadlock free. There is however other things one needs to be aware of with this schema: If you are using a @code{LOW_PRIORITY_WRITE} lock for a table, this -means only that @strong{MySQL} will wait for this particlar lock until +means only that MySQL will wait for this particlar lock until there is no threads that wants a @code{READ} lock. When the thread has got the @code{WRITE} lock and is waiting to get the lock for the next table in the lock table list, all other threads will wait for the @@ -34431,12 +34431,12 @@ that no other thread can update a @code{READ}-locked table and no other thread can read a @code{WRITE}-locked table. The reason some things are faster under @code{LOCK TABLES} is that -@strong{MySQL} will not flush the key cache for the locked tables until +MySQL will not flush the key cache for the locked tables until @code{UNLOCK TABLES} is called (normally the key cache is flushed after each SQL statement). This speeds up inserting/updateing/deletes on @code{MyISAM} tables. @item -If you are using a table handler in @strong{MySQL} that doesn't support +If you are using a table handler in MySQL that doesn't support transactions, you must use @code{LOCK TABLES} if you want to ensure that no other thread comes between a @code{SELECT} and an @code{UPDATE}. The example shown below requires @code{LOCK TABLES} in order to execute safely: @@ -34509,8 +34509,8 @@ You can set the default isolation level for @code{mysqld} with @cindex full-text search @cindex FULLTEXT -Since Version 3.23.23, @strong{MySQL} has support for full-text indexing -and searching. Full-text indexes in @strong{MySQL} are an index of type +Since Version 3.23.23, MySQL has support for full-text indexing +and searching. Full-text indexes in MySQL are an index of type @code{FULLTEXT}. @code{FULLTEXT} indexes can be created from @code{VARCHAR} and @code{TEXT} columns at @code{CREATE TABLE} time or added later with @code{ALTER TABLE} or @code{CREATE INDEX}. For large datasets, adding @@ -34599,10 +34599,10 @@ mysql> SELECT id, body, MATCH (title,body) AGAINST ( This is more complex example - the query returns the relevance and still sorts the rows with relevance decreasing. To achieve it one should specify @code{MATCH} twice. Note, that this will cause no additional overhead, as -@strong{MySQL} optimizer will notice that these two @code{MATCH} calls are +MySQL optimizer will notice that these two @code{MATCH} calls are identical and will call full-text search code only once. -@strong{MySQL} uses a very simple parser to split text into words. A +MySQL uses a very simple parser to split text into words. A ``word'' is any sequence of letters, numbers, @samp{'}, and @samp{_}. Any ``word'' that is present in the stopword list or just too short (3 characters or less) is ignored. @@ -34662,12 +34662,12 @@ The argument to @code{AGAINST} must be a constant string. Unfortunately, full-text search has no user-tunable parameters yet, although adding some is very high on the TODO. However, if you have a -@strong{MySQL} source distribution (@xref{Installing source}.), you can +MySQL source distribution (@xref{Installing source}.), you can somewhat alter the full-text search behavior. Note that full-text search was carefully tuned for the best searching effectiveness. Modifying the default behavior will, in most cases, -only make the search results worse. Do not alter the @strong{MySQL} sources +only make the search results worse. Do not alter the MySQL sources unless you know what you are doing! @itemize @@ -34678,12 +34678,12 @@ Minimal length of word to be indexed is defined in @example #define MIN_WORD_LEN 4 @end example -Change it to the value you prefer, recompile @strong{MySQL}, and rebuild +Change it to the value you prefer, recompile MySQL, and rebuild your @code{FULLTEXT} indexes. @item The stopword list is defined in @code{myisam/ft_static.c} -Modify it to your taste, recompile @strong{MySQL} and rebuild +Modify it to your taste, recompile MySQL and rebuild your @code{FULLTEXT} indexes. @item @@ -34696,7 +34696,7 @@ to @example #define GWS_IN_USE GWS_FREQ @end example -and recompile @strong{MySQL}. +and recompile MySQL. There is no need to rebuild the indexes in this case. @end itemize @@ -34778,34 +34778,34 @@ parameters to @code{FULLTEXT} in @code{CREATE/ALTER TABLE}). @cindex @code{MyISAM} table type @cindex types, of tables -As of @strong{MySQL} Version 3.23.6, you can choose between three basic +As of MySQL Version 3.23.6, you can choose between three basic table formats (@code{ISAM}, @code{HEAP} and @code{MyISAM}. Newer -@strong{MySQL} may support additional table type (@code{BDB}, +MySQL may support additional table type (@code{BDB}, or @code{InnoDB}), depending on how you compile it. -When you create a new table, you can tell @strong{MySQL} which table -type it should use for the table. @strong{MySQL} will always create a +When you create a new table, you can tell MySQL which table +type it should use for the table. MySQL will always create a @code{.frm} file to hold the table and column definitions. Depending on the table type, the index and data will be stored in other files. Note that to use @code{InnoDB} tables you have to use at least the @code{innodb_data_file_path} startup option. @xref{InnoDB start}. -The default table type in @strong{MySQL} is @code{MyISAM}. If you are +The default table type in MySQL is @code{MyISAM}. If you are trying to use a table type that is not compiled-in or activated, -@strong{MySQL} will instead create a table of type @code{MyISAM}. This +MySQL will instead create a table of type @code{MyISAM}. This is a very useful feature when you want to copy tables between different SQL servers that supports different table types (like copying tables to a slave that is optimized for speed by not having transactional tables). This automatic table changing can however also be very confusing for new -@strong{MySQL} users. We plan to fix this by introducing warnings in -@strong{MySQL} 4.0 and giving a warning when a table type is automatically +MySQL users. We plan to fix this by introducing warnings in +MySQL 4.0 and giving a warning when a table type is automatically changed. You can convert tables between different types with the @code{ALTER TABLE} statement. @xref{ALTER TABLE, , @code{ALTER TABLE}}. -Note that @strong{MySQL} supports two different kinds of +Note that MySQL supports two different kinds of tables. Transaction-safe tables (@code{BDB}, @code{InnoDB} and not transaction-safe tables (@code{HEAP}, @code{ISAM}, @code{MERGE}, and @code{MyISAM}). @@ -34814,7 +34814,7 @@ Advantages of transaction-safe tables (TST): @itemize @bullet @item -Safer. Even if @strong{MySQL} crashes or you get hardware problems, you +Safer. Even if MySQL crashes or you get hardware problems, you can get your data back, either by automatic recovery or from a backup + the transaction log. @item @@ -34855,7 +34855,7 @@ of both worlds. @node MyISAM, MERGE, Table types, Table types @section MyISAM Tables -@code{MyISAM} is the default table type in @strong{MySQL} Version 3.23. It's +@code{MyISAM} is the default table type in MySQL Version 3.23. It's based on the @code{ISAM} code and has a lot of useful extensions. The index is stored in a file with the @code{.MYI} (MYIndex) extension, @@ -34942,7 +34942,7 @@ to get more speed (with the @code{DATA/INDEX DIRECTORY="path"} option to @code{CREATE TABLE}). @xref{CREATE TABLE}. @end itemize -@code{MyISAM} also supports the following things, which @strong{MySQL} +@code{MyISAM} also supports the following things, which MySQL will be able to use in the near future: @itemize @bullet @@ -34954,7 +34954,7 @@ Tables with @code{VARCHAR} may have fixed or dynamic record length. @item @code{VARCHAR} and @code{CHAR} may be up to 64K. All key segments have their own language definition. This will enable -@strong{MySQL} to have different language definitions per column. +MySQL to have different language definitions per column. @item A hashed computed index can be used for @code{UNIQUE}. This will allow you to have @code{UNIQUE} on any combination of columns in a table. (You @@ -34974,7 +34974,7 @@ The following options to @code{mysqld} can be used to change the behavior of @item @code{--myisam-recover=#} @tab Automatic recover of crashed tables. @item @code{-O myisam_sort_buffer_size=#} @tab Buffer used when recovering tables. @item @code{--delay-key-write-for-all-tables} @tab Don't flush key buffers between writes for any MyISAM table -@item @code{-O myisam_max_extra_sort_file_size=#} @tab Used to help @strong{MySQL} to decide when to use the slow but safe key cache index create method. @strong{NOTE} that this parameter is given in megabytes! +@item @code{-O myisam_max_extra_sort_file_size=#} @tab Used to help MySQL to decide when to use the slow but safe key cache index create method. @strong{NOTE} that this parameter is given in megabytes! @item @code{-O myisam_max_sort_file_size=#} @tab Don't use the fast sort index method to created index if the temporary file would get bigger than this. @strong{NOTE} that this paramter is given in megabytes! @end multitable @@ -35035,7 +35035,7 @@ backup media. @cindex key space, MyISAM -@strong{MySQL} can support different index types, but the normal type is +MySQL can support different index types, but the normal type is ISAM or MyISAM. These use a B-tree index, and you can roughly calculate the size for the index file as @code{(key_length+4)/0.67}, summed over all keys. (This is for the worst case when all keys are inserted in @@ -35086,7 +35086,7 @@ records with each disk read. The security is evidenced if your computer crashes when writing to a fixed-size MyISAM file, in which case @code{myisamchk} can easily figure out where each row starts and ends. So it can usually reclaim all records except the -partially written one. Note that in @strong{MySQL} all indexes can always be +partially written one. Note that in MySQL all indexes can always be reconstructed: @itemize @bullet @@ -35185,7 +35185,7 @@ This is a read-only type that is generated with the optional @itemize @bullet @item -All @strong{MySQL} distributions, even those that existed before @strong{MySQL} +All MySQL distributions, even those that existed before MySQL went GPL, can read tables that were compressed with @code{myisampack}. @item Compressed tables take very little disk space. This minimizes disk usage, which @@ -35226,7 +35226,7 @@ Can be uncompressed with @code{myisamchk}. @node MyISAM table problems, , MyISAM table formats, MyISAM @subsection MyISAM table problems. -The file format that @strong{MySQL} uses to store data has been extensively +The file format that MySQL uses to store data has been extensively tested, but there are always circumstances that may cause database tables to become corrupted. @@ -35304,7 +35304,7 @@ The counter works as follows: @itemize @bullet @item -The first time a table is updated in @strong{MySQL}, a counter in the +The first time a table is updated in MySQL, a counter in the header of the index files is incremented. @item The counter is not changed during further updates. @@ -35327,8 +35327,8 @@ In other words, the only ways this can go out of sync are: The @code{MyISAM} tables are copied without a @code{LOCK} and @code{FLUSH TABLES}. @item -@strong{MySQL} has crashed between an update and the final close -(Note that the table may still be ok, as @strong{MySQL} always issues writes +MySQL has crashed between an update and the final close +(Note that the table may still be ok, as MySQL always issues writes for everything between each statement). @item Someone has done a @code{myisamchk --repair} or @code{myisamchk @@ -35349,7 +35349,7 @@ is not signaled to the other servers. @cindex tables, merging @cindex MERGE tables, defined -@code{MERGE} tables are new in @strong{MySQL} Version 3.23.25. The code +@code{MERGE} tables are new in MySQL Version 3.23.25. The code is still in gamma, but should be resonable stable. A @code{MERGE} table is a collection of identical @code{MyISAM} tables @@ -35419,7 +35419,7 @@ The disadvantages with @code{MERGE} tables are: @itemize @bullet @item -You can't use @code{INSERT} on @code{MERGE} tables, as @strong{MySQL} +You can't use @code{INSERT} on @code{MERGE} tables, as MySQL can't know in which of the tables we should insert the row. @item You can only use identical @code{MyISAM} tables for a @code{MERGE} table. @@ -35460,7 +35460,7 @@ Note that we didn't create a @code{UNIQUE} or @code{PRIMARY KEY} in the table. Note that you can also manipulate the @code{.MRG} file directly from -the outside of the @strong{MySQL} server: +the outside of the MySQL server: @example shell> cd /mysql-data-directory/current-database @@ -35548,10 +35548,10 @@ mysql> ALTER TABLE tbl_name TYPE = MYISAM; @cindex tables, @code{HEAP} @code{HEAP} tables use a hashed index and are stored in memory. This -makes them very fast, but if @strong{MySQL} crashes you will lose all +makes them very fast, but if MySQL crashes you will lose all data stored in them. @code{HEAP} is very useful for temporary tables! -The @strong{MySQL} internal HEAP tables use 100% dynamic hashing +The MySQL internal HEAP tables use 100% dynamic hashing without overflow areas. There is no extra space needed for free lists. @code{HEAP} tables also don't have problems with delete + inserts, which normally is common with hashed tables: @@ -35603,7 +35603,7 @@ the same time. To free memory, you should execute @code{DELETE FROM heap_table}, @code{TRUNCATE heap_table} or @code{DROP TABLE heap_table}. @item -@strong{MySQL} cannot find out approximately how many rows there +MySQL cannot find out approximately how many rows there are between two values (this is used by the range optimizer to decide which index to use). This may affect some queries if you change a @code{MyISAM} table to a @code{HEAP} table. @@ -35641,20 +35641,20 @@ SUM_OVER_ALL_KEYS(max_length_of_key + sizeof(char*) * 2) @node BDB overview, BDB install, BDB, BDB @subsection Overview of BDB Tables -Support for BDB tables is included in the @strong{MySQL} source distribution -starting from Version 3.23.34 and is activated in the @strong{MySQL}-Max +Support for BDB tables is included in the MySQL source distribution +starting from Version 3.23.34 and is activated in the MySQL-Max binary. BerkeleyDB, available at @uref{http://www.sleepycat.com/} has provided -@strong{MySQL} with a transactional table handler. By using BerkeleyDB +MySQL with a transactional table handler. By using BerkeleyDB tables, your tables may have a greater chance of surviving crashes, and also provides @code{COMMIT} and @code{ROLLBACK} on transactions. The -@strong{MySQL} source distribution comes with a BDB distribution that has a -couple of small patches to make it work more smoothly with @strong{MySQL}. -You can't use a non-patched @code{BDB} version with @strong{MySQL}. +MySQL source distribution comes with a BDB distribution that has a +couple of small patches to make it work more smoothly with MySQL. +You can't use a non-patched @code{BDB} version with MySQL. -We at @strong{MySQL AB} are working in close cooperation with Sleepycat to -keep the quality of the @strong{MySQL}/BDB interface high. +We at MySQL AB are working in close cooperation with Sleepycat to +keep the quality of the MySQL/BDB interface high. When it comes to supporting BDB tables, we are committed to help our users to locate the problem and help creating a reproducable test case @@ -35663,19 +35663,19 @@ forwarded to Sleepycat who in turn will help us find and fix the problem. As this is a two stage operation, any problems with BDB tables may take a little longer for us to fix than for other table handlers. However, as the BerkeleyDB code itself has been used by many other -applications than @strong{MySQL}, we don't envision any big problems with +applications than MySQL, we don't envision any big problems with this. @xref{Table handler support}. @node BDB install, BDB start, BDB overview, BDB @subsection Installing BDB -If you have downloaded a binary version of @strong{MySQL} that includes +If you have downloaded a binary version of MySQL that includes support for BerkeleyDB, simply follow the instructions for installing a -binary version of @strong{MySQL}. +binary version of MySQL. @xref{Installing binary}. @xref{mysqld-max, , @code{mysqld-max}}. -To compile @strong{MySQL} with Berkeley DB support, download @strong{MySQL} +To compile MySQL with Berkeley DB support, download MySQL Version 3.23.34 or newer and configure @code{MySQL} with the @code{--with-berkeley-db} option. @xref{Installing source}. @@ -35688,7 +35688,7 @@ Please refer to the manual provided with the @code{BDB} distribution for more updated information. Even though Berkeley DB is in itself very tested and reliable, -the @strong{MySQL} interface is still considered beta quality. +the MySQL interface is still considered beta quality. We are actively improving and optimizing it to get it stable very soon. @@ -35722,7 +35722,7 @@ BDB tables: @item @code{-O bdb_max_lock=1000} @tab Set the maximum number of locks possible. @xref{SHOW VARIABLES}. @end multitable -If you use @code{--skip-bdb}, @strong{MySQL} will not initialize the +If you use @code{--skip-bdb}, MySQL will not initialize the Berkeley DB library and this will save a lot of memory. Of course, you cannot use @code{BDB} tables if you are using this option. @@ -35752,26 +35752,26 @@ To be able to rollback transactions BDB maintain log files. For maximum performance you should place these on another disk than your databases by using the @code{--bdb_log_dir} options. @item -@strong{MySQL} performs a checkpoint each time a new BDB log +MySQL performs a checkpoint each time a new BDB log file is started, and removes any log files that are not needed for current transactions. One can also run @code{FLUSH LOGS} at any time to checkpoint the Berkeley DB tables. For disaster recovery, one should use table backups plus -@strong{MySQL}'s binary log. @xref{Backup}. +MySQL's binary log. @xref{Backup}. @strong{Warning}: If you delete old log files that are in use, BDB will not be able to do recovery at all and you may lose data if something goes wrong. @item -@strong{MySQL} requires a @code{PRIMARY KEY} in each BDB table to be +MySQL requires a @code{PRIMARY KEY} in each BDB table to be able to refer to previously read rows. If you don't create one, -@strong{MySQL} will create an maintain a hidden @code{PRIMARY KEY} for +MySQL will create an maintain a hidden @code{PRIMARY KEY} for you. The hidden key has a length of 5 bytes and is incremented for each insert attempt. @item If all columns you access in a @code{BDB} table are part of the same index or -part of the primary key, then @strong{MySQL} can execute the query +part of the primary key, then MySQL can execute the query without having to access the actual row. In a @code{MyISAM} table the above holds only if the columns are part of the same index. @item @@ -35807,11 +35807,11 @@ the middle of the key tree. This makes BDB tables somewhat larger than MyISAM tables. @item The optimizer needs to know an approximation of the number of rows in -the table. @strong{MySQL} solves this by counting inserts and +the table. MySQL solves this by counting inserts and maintaining this in a separate segment in each BDB table. If you don't do a lot of @code{DELETE} or @code{ROLLBACK}:s this number should be -accurate enough for the @strong{MySQL} optimizer, but as @strong{MySQL} -only store the number on close, it may be wrong if @strong{MySQL} dies +accurate enough for the MySQL optimizer, but as MySQL +only store the number on close, it may be wrong if MySQL dies unexpectedly. It should not be fatal even if this number is not 100 % correct. One can update the number of rows by executing @code{ANALYZE TABLE} or @code{OPTIMIZE TABLE}. @xref{ANALYZE TABLE} . @xref{OPTIMIZE @@ -35846,7 +35846,7 @@ Change to not use page locks at all when we are scanning tables. @node BDB portability, BDB errors, BDB TODO, BDB @subsection Operating systems supported by @strong{BDB} -If you after having built @strong{MySQL} with support for BDB tables get +If you after having built MySQL with support for BDB tables get the following error in the log file when you start @code{mysqld}: @example @@ -35855,7 +35855,7 @@ Can't init dtabases @end example This means that @code{BDB} tables are not supported for your architecture. -In this case you have to rebuild @strong{MySQL} without BDB table support. +In this case you have to rebuild MySQL without BDB table support. NOTE: The following list is not complete; We will update this as we get more information about this. @@ -35904,7 +35904,7 @@ tables, delete the old table and restore the dump. @item If you are running in not @code{auto_commit} mode and delete a table you are using by another thread you may get the following error messages in -the @strong{MySQL} error file: +the MySQL error file: @example 001119 23:43:56 bdb: Missing log fileid entry @@ -35941,16 +35941,16 @@ not trivial). @node InnoDB overview, InnoDB start, InnoDB, InnoDB @subsection InnoDB tables overview -InnoDB tables are included in the @strong{MySQL} source distribution +InnoDB tables are included in the MySQL source distribution starting from 3.23.34a and are activated in the @strong{MySQL -max} binary. -If you have downloaded a binary version of @strong{MySQL} that includes +If you have downloaded a binary version of MySQL that includes support for InnoDB (mysqld-max), simply follow the instructions for -installing a binary version of @strong{MySQL}. @xref{Installing binary}. +installing a binary version of MySQL. @xref{Installing binary}. @xref{mysqld-max, , @code{mysqld-max}}. -To compile @strong{MySQL} with InnoDB support, download MySQL-3.23.37 or newer +To compile MySQL with InnoDB support, download MySQL-3.23.37 or newer and configure @code{MySQL} with the @code{--with-innodb} option. @xref{Installing source}. @@ -35959,7 +35959,7 @@ cd /path/to/source/of/mysql-3.23.37 ./configure --with-innodb @end example -InnoDB provides @strong{MySQL} with a transaction-safe table handler with +InnoDB provides MySQL with a transaction-safe table handler with commit, rollback, and crash recovery capabilities. InnoDB does locking on row level, and also provides an Oracle-style consistent non-locking read in @code{SELECTS}, which increases transaction @@ -35975,24 +35975,24 @@ You can find the latest information about InnoDB at InnoDB manual is always placed there, and you can also order commercial support for InnoDB. -Technically, InnoDB is a database backend placed under @strong{MySQL}. InnoDB +Technically, InnoDB is a database backend placed under MySQL. InnoDB has its own buffer pool for caching data and indexes in main memory. InnoDB stores its tables and indexes in a tablespace, which may consist of several files. This is different from, for example, @code{MyISAM} tables where each table is stored as a separate file. InnoDB is distributed under the GNU GPL License Version 2 (of June 1991). -In the source distribution of @strong{MySQL}, InnoDB appears as a subdirectory. +In the source distribution of MySQL, InnoDB appears as a subdirectory. @node InnoDB start, InnoDB init, InnoDB overview, InnoDB @subsection InnoDB startup options -Beginning from @strong{MySQL}-3.23.37 the prefix of the options is changed +Beginning from MySQL-3.23.37 the prefix of the options is changed from @code{innobase_...} to @code{innodb_...}. To use InnoDB tables you @strong{MUST} specify configuration parameters -in the @strong{MySQL} configuration file in the @code{[mysqld]} section of +in the MySQL configuration file in the @code{[mysqld]} section of the configuration file @file{my.cnf}. @xref{Option files}. The only required parameter to use InnoDB is @code{innodb_data_file_path}, @@ -36098,7 +36098,7 @@ log archiving. The value of this parameter should currently be set the same as @code{innodb_log_group_home_dir}. @item @code{innodb_log_archive} @tab This value should currently be set to 0. As recovery from a backup is -done by @strong{MySQL} using its own log files, there is currently no need to +done by MySQL using its own log files, there is currently no need to archive InnoDB log files. @item @code{innodb_buffer_pool_size} @tab The size of the memory buffer InnoDB uses to cache data and indexes of @@ -36113,7 +36113,7 @@ and other internal data structures. A sensible value for this might be 2M, but the more tables you have in your application the more you will need to allocate here. If InnoDB runs out of memory in this pool, it will start to allocate memory from the operating system, and write -warning messages to the @strong{MySQL} error log. +warning messages to the MySQL error log. @item @code{innodb_file_io_threads} @tab Number of file i/o threads in InnoDB. Normally, this should be 4, but on Windows NT disk i/o may benefit from a larger number. @@ -36142,15 +36142,15 @@ case it will get the default value. @node InnoDB init, Using InnoDB tables, InnoDB start, InnoDB @subsection Creating InnoDB table space -Suppose you have installed @strong{MySQL} and have edited @file{my.cnf} so that +Suppose you have installed MySQL and have edited @file{my.cnf} so that it contains the necessary InnoDB configuration parameters. -Before starting @strong{MySQL} you should check that the directories you have +Before starting MySQL you should check that the directories you have specified for InnoDB data files and log files exist and that you have access rights to those directories. InnoDB cannot create directories, only files. Check also you have enough disk space for the data and log files. -When you now start @strong{MySQL}, InnoDB will start creating your data files +When you now start MySQL, InnoDB will start creating your data files and log files. InnoDB will print something like the following: @example @@ -36175,9 +36175,9 @@ InnoDB: Started mysqld: ready for connections @end example -A new InnoDB database has now been created. You can connect to the @strong{MySQL} -server with the usual @strong{MySQL} client programs like @code{mysql}. -When you shut down the @strong{MySQL} server with @file{mysqladmin shutdown}, +A new InnoDB database has now been created. You can connect to the MySQL +server with the usual MySQL client programs like @code{mysql}. +When you shut down the MySQL server with @file{mysqladmin shutdown}, InnoDB output will be like the following: @example @@ -36192,7 +36192,7 @@ will see the files created. The log directory will also contain a small file named @file{ib_arch_log_0000000000}. That file resulted from the database creation, after which InnoDB switched off log archiving. -When @strong{MySQL} is again started, the output will be like the following: +When MySQL is again started, the output will be like the following: @example ~/mysqlm/sql > mysqld @@ -36212,14 +36212,14 @@ If something goes wrong in an InnoDB database creation, you should delete all files created by InnoDB. This means all data files, all log files, the small archived log file, and in the case you already did create some InnoDB tables, delete also the corresponding @file{.frm} -files for these tables from the @strong{MySQL} database +files for these tables from the MySQL database directories. Then you can try the InnoDB database creation again. @node Using InnoDB tables, Adding and removing, InnoDB init, InnoDB @subsection Creating InnoDB tables -Suppose you have started the @strong{MySQL} client with the command +Suppose you have started the MySQL client with the command @code{mysql test}. To create a table in the InnoDB format you must specify @code{TYPE = InnoDB} in the table creation SQL command: @@ -36230,15 +36230,15 @@ CREATE TABLE CUSTOMER (A INT, B CHAR (20), INDEX (A)) TYPE = InnoDB; This SQL command will create a table and an index on column @code{A} into the InnoDB tablespace consisting of the data files you specified -in @file{my.cnf}. In addition @strong{MySQL} will create a file -@file{CUSTOMER.frm} to the @strong{MySQL} database directory @file{test}. +in @file{my.cnf}. In addition MySQL will create a file +@file{CUSTOMER.frm} to the MySQL database directory @file{test}. Internally, InnoDB will add to its own data dictionary an entry for table @code{'test/CUSTOMER'}. Thus you can create a table -of the same name @code{CUSTOMER} in another database of @strong{MySQL}, and +of the same name @code{CUSTOMER} in another database of MySQL, and the table names will not collide inside InnoDB. You can query the amount of free space in the InnoDB tablespace -by issuing the table status command of @strong{MySQL} for any table you have +by issuing the table status command of MySQL for any table you have created with @code{TYPE = InnoDB}. Then the amount of free space in the tablespace appears in the table comment section in the output of @code{SHOW}. An example: @@ -36256,7 +36256,7 @@ You must drop the tables individually. Also take care not to delete or add @file{.frm} files to your InnoDB database manually: use @code{CREATE TABLE} and @code{DROP TABLE} commands. InnoDB has its own internal data dictionary, and you will get problems -if the @strong{MySQL} @file{.frm} files are out of 'sync' with the InnoDB +if the MySQL @file{.frm} files are out of 'sync' with the InnoDB internal data dictionary. @subsubsection Converting MyISAM tables to InnoDB @@ -36305,8 +36305,8 @@ your job again, rather than wait for millions of disk i/os to complete. You cannot increase the size of an InnoDB data file. To add more into your tablespace you have to add a new data file. To do this you have to -shut down your @strong{MySQL} database, edit the @file{my.cnf} file, adding a -new file to @code{innodb_data_file_path}, and then start @strong{MySQL} +shut down your MySQL database, edit the @file{my.cnf} file, adding a +new file to @code{innodb_data_file_path}, and then start MySQL again. Currently you cannot remove a data file from InnoDB. To decrease the @@ -36315,11 +36315,11 @@ all your tables, create a new database, and import your tables to the new database. If you want to change the number or the size of your InnoDB log files, -you have to shut down @strong{MySQL} and make sure that it shuts down without errors. +you have to shut down MySQL and make sure that it shuts down without errors. Then copy the old log files into a safe place just in case something went wrong in the shutdown and you will need them to recover the database. Delete then the old log files from the log file directory, -edit @file{my.cnf}, and start @strong{MySQL} again. InnoDB will tell +edit @file{my.cnf}, and start MySQL again. InnoDB will tell you at the startup that it is creating new log files. @@ -36331,7 +36331,7 @@ To take a 'binary' backup of your database you have to do the following: @itemize @bullet @item -Shut down your @strong{MySQL} database and make sure it shuts down without errors. +Shut down your MySQL database and make sure it shuts down without errors. @item Copy all your data files into a safe place. @item @@ -36362,12 +36362,12 @@ dumps. Then you can take the binary backup, and you will then have a consistent snapshot of your database in two formats. To be able to recover your InnoDB database to the present from the -binary backup described above, you have to run your @strong{MySQL} database -with the general logging and log archiving of @strong{MySQL} switched on. Here -by the general logging we mean the logging mechanism of the @strong{MySQL} server +binary backup described above, you have to run your MySQL database +with the general logging and log archiving of MySQL switched on. Here +by the general logging we mean the logging mechanism of the MySQL server which is independent of InnoDB logs. -To recover from a crash of your @strong{MySQL} server process, the only thing +To recover from a crash of your MySQL server process, the only thing you have to do is to restart it. InnoDB will automatically check the logs and perform a roll-forward of the database to the present. InnoDB will automatically roll back uncommitted transactions which were @@ -36402,7 +36402,7 @@ mysqld: ready for connections If your database gets corrupted or your disk fails, you have to do the recovery from a backup. In the case of corruption, you should first find a backup which is not corrupted. From a backup do the recovery -from the general log files of @strong{MySQL} according to instructions in the +from the general log files of MySQL according to instructions in the MySQL manual. @menu @@ -36476,7 +36476,7 @@ to lock every row in the database, or any random subset of the rows, without InnoDB running out of memory. In InnoDB all user activity happens inside transactions. If the -auto commit mode is used in @strong{MySQL}, then each SQL statement +auto commit mode is used in MySQL, then each SQL statement will form a single transaction. If the auto commit mode is switched off, then we can think that a user always has a transaction open. If he issues @@ -36660,7 +36660,7 @@ on the duplicate index record. @code{INSERT INTO T SELECT ... FROM S WHERE ...} sets an exclusive (non-next-key) lock on each row inserted into @code{T}. Does the search on @code{S} as a consistent read, but sets shared next-key -locks on @code{S} if the @strong{MySQL} logging is on. InnoDB has to set +locks on @code{S} if the MySQL logging is on. InnoDB has to set locks in the latter case because in roll-forward recovery from a backup every SQL statement has to be executed in exactly the same way as it was done originally. @@ -36680,10 +36680,10 @@ lock on every record the search encounters. lock on every record the search encounters. @item @code{LOCK TABLES ... } : sets table locks. In the implementation -the @strong{MySQL} layer of code sets these locks. The automatic deadlock detection +the MySQL layer of code sets these locks. The automatic deadlock detection of InnoDB cannot detect deadlocks where such table locks are involved: see the next section below. See also section 13 'InnoDB restrictions' -about the following: since @strong{MySQL} does know about row level locks, +about the following: since MySQL does know about row level locks, it is possible that you get a table lock on a table where another user currently has row level locks. But that does not put transaction integerity into danger. @@ -36696,7 +36696,7 @@ locks. But that does not put transaction integerity into danger. InnoDB automatically detects a deadlock of transactions and rolls back the transaction whose lock request was the last one to build a deadlock, that is, a cycle in the waits-for graph of transactions. -InnoDB cannot detect deadlocks where a lock set by a @strong{MySQL} +InnoDB cannot detect deadlocks where a lock set by a MySQL @code{LOCK TABLES} statement is involved, or if a lock set in another table handler than InnoDB is involved. You have to resolve these situations using @code{innodb_lock_wait_timeout} set in @@ -37146,7 +37146,7 @@ The following list specifies the error handling of InnoDB. @itemize @bullet @item If you run out of file space in the tablespace, -you will get the @strong{MySQL} @code{'Table is full'} error +you will get the MySQL @code{'Table is full'} error and InnoDB rolls back the SQL statement. @item A transaction deadlock or a timeout in a lock wait will give @@ -37161,7 +37161,7 @@ statement. @item A 'row too long' error rolls back the SQL statement. @item -Other errors are mostly detected by the @strong{MySQL} layer of code, and +Other errors are mostly detected by the MySQL layer of code, and they roll back the corresponding SQL statement. @end itemize @@ -37188,7 +37188,7 @@ create an index over the whole column. @item @code{INSERT DELAYED} is not supported for InnoDB tables. @item -The @strong{MySQL} @code{LOCK TABLES} operation does not know of InnoDB +The MySQL @code{LOCK TABLES} operation does not know of InnoDB row level locks set in already completed SQL statements: this means that you can get a table lock on a table even if there still exist transactions of other users which have row level locks on the same table. Thus @@ -37205,7 +37205,7 @@ A table cannot contain more than 1000 columns. @item @code{DELETE FROM TABLE} does not regenerate the table but instead deletes all rows, one by one, which is not that fast. In future versions -of @strong{MySQL} you can use @code{TRUNCATE} which is fast. +of MySQL you can use @code{TRUNCATE} which is fast. @item Before dropping a database with InnoDB tables one has to drop the individual InnoDB tables first. @@ -37257,20 +37257,20 @@ Finland @cindex library, @code{mysqlclient} @menu -* PHP:: @strong{MySQL} PHP API -* Perl:: @strong{MySQL} Perl API +* PHP:: MySQL PHP API +* Perl:: MySQL Perl API * ODBC:: -* C:: @strong{MySQL} C API -* Cplusplus:: @strong{MySQL} C++ APIs -* Java:: @strong{MySQL} Java connectivity (JDBC) -* Python:: @strong{MySQL} Python APIs -* Tcl:: @strong{MySQL} Tcl APIs -* Eiffel:: @strong{MySQL} Eiffel wrapper +* C:: MySQL C API +* Cplusplus:: MySQL C++ APIs +* Java:: MySQL Java connectivity (JDBC) +* Python:: MySQL Python APIs +* Tcl:: MySQL Tcl APIs +* Eiffel:: MySQL Eiffel wrapper @end menu -This chapter describes the APIs available for @strong{MySQL}, where to get +This chapter describes the APIs available for MySQL, where to get them, and how to use them. The C API is the most extensively covered, as it -was developed by the @strong{MySQL} team, and is the basis for most of the +was developed by the MySQL team, and is the basis for most of the other APIs. @@ -37281,7 +37281,7 @@ other APIs. PHP is a server-side, HTML-embedded scripting language that may be used to create dynamic Web pages. It contains support for accessing several -databases, including @strong{MySQL}. PHP may be run as a separate program +databases, including MySQL. PHP may be run as a separate program or compiled as a module for use with the Apache Web server. The distribution and documentation are available at the @@ -37301,9 +37301,9 @@ execution time up from 30 seconds to something higher, as needed. It is also not a bad idea to double the ram allowed per script to 16MB instead of 8 MB. @item Error: "Fatal error: Call to unsupported or undefined function mysql_connect() in .." -This means that your PHP version isn't compiled with @strong{MySQL} support. -You can either compile a dynamic @strong{MySQL} module and load it into PHP or -recompile PHP with built-in @strong{MySQL} support. This is described in +This means that your PHP version isn't compiled with MySQL support. +You can either compile a dynamic MySQL module and load it into PHP or +recompile PHP with built-in MySQL support. This is described in detail in the PHP manual. @item Error: "undefined reference to `uncompress'" This means that the client library is compiled with support for a compressed @@ -37338,7 +37338,7 @@ documented here. @code{DBI} is a generic interface for many databases. That means that you can write a script that works with many different database engines without change. You need a DataBase Driver (DBD) defined for each -database type. For @strong{MySQL}, this driver is called +database type. For MySQL, this driver is called @code{DBD::mysql}. For more information on the Perl5 DBI, please visit the @code{DBI} Web @@ -37355,7 +37355,7 @@ For more information on Object Oriented Programming Note that if you want to use transactions with Perl, you need to have @code{Msql-Mysql-modules} version 1.2216 or newer. -Installation instructions for @strong{MySQL} Perl support are given in +Installation instructions for MySQL Perl support are given in @ref{Perl support}. @@ -37445,7 +37445,7 @@ If the user name and/or password are undefined, @code{DBI} uses the values of the @code{DBI_USER} and @code{DBI_PASS} environment variables, respectively. If you don't specify a hostname, it defaults to @code{'localhost'}. If you don't specify a port number, it defaults to the -default @strong{MySQL} port (@value{default_port}). +default MySQL port (@value{default_port}). As of @code{Msql-Mysql-modules} Version 1.2009, the @code{$data_source} value allows certain modifiers: @@ -37461,12 +37461,12 @@ The default group when reading an option file is normally the option, the default group becomes the @code{[group_name]} group. @item mysql_compression=1 -Use compressed communication between the client and server (@strong{MySQL} +Use compressed communication between the client and server (MySQL Version 3.22.3 or later). @item mysql_socket=/path/to/socket Specify the pathname of the Unix socket that is used to connect -to the server (@strong{MySQL} Version 3.21.15 or later). +to the server (MySQL Version 3.21.15 or later). @end table Multiple modifiers may be given; each must be preceded by a semicolon. @@ -37664,7 +37664,7 @@ $nr_of_fields = $sth->@{NUM_OF_FIELDS@}; @findex data_sources() DBI method @item data_sources($driver_name) This method returns an array containing names of databases available to the -@strong{MySQL} server on the host @code{'localhost'}. +MySQL server on the host @code{'localhost'}. Example: @example @@dbs = DBI->data_sources("mysql"); @@ -37713,7 +37713,7 @@ environment variable. Setting it to a numeric value is equivalent to calling @noindent @strong{MySQL-specific Methods} -The methods shown below are @strong{MySQL}-specific and not part of the +The methods shown below are MySQL-specific and not part of the @code{DBI} standard. Several of them are now deprecated: @code{is_blob}, @code{is_key}, @code{is_num}, @code{is_pri_key}, @code{is_not_null}, @code{length}, @code{max_length}, and @code{table}. @@ -37724,7 +37724,7 @@ Where @code{DBI}-standard alternatives exist, they are noted below: @findex insertid DBI method @tindex AUTO_INCREMENT, using with DBI @item insertid -If you use the @code{AUTO_INCREMENT} feature of @strong{MySQL}, the new +If you use the @code{AUTO_INCREMENT} feature of MySQL, the new auto-incremented values will be stored here. Example: @example @@ -37871,14 +37871,14 @@ the @code{DBI} Web page: * Installing MyODBC:: How to install MyODBC * ODBC administrator:: How to fill in the various fields in the ODBC administrator program * MyODBC connect parameters:: -* ODBC Problems:: How to report problems with @strong{MySQL} ODBC +* ODBC Problems:: How to report problems with MySQL ODBC * MyODBC clients:: Programs known to work with @strong{MyODBC} * ODBC and last_insert_id:: How to get the value of an @code{AUTO_INCREMENT} column in ODBC * MyODBC bug report:: Reporting problems with MyODBC @end menu -@strong{MySQL} provides support for ODBC by means of the @strong{MyODBC} +MySQL provides support for ODBC by means of the @strong{MyODBC} program. This chapter will teach you how to install @strong{MyODBC}, and how to use it. Here, you will also find a list of common programs that are known to work with @strong{MyODBC}. @@ -37889,7 +37889,7 @@ are known to work with @strong{MyODBC}. @strong{MyODBC} is a 32-bit ODBC (2.50) level 0 (with level 1 and level 2 features) driver for connecting an ODBC-aware application to -@strong{MySQL}. @strong{MyODBC} works on Windows95, Windows98, NT, and +MySQL. @strong{MyODBC} works on Windows95, Windows98, NT, and on most Unix platforms. @strong{MyODBC} is in public domain, and you can find the newest version @@ -37907,7 +37907,7 @@ to the databases. If you want to install @strong{MyODBC} on a Unix box, you will also need an @strong{ODBC} manager. @strong{MyODBC} is known to work with most of the Unix ODBC managers. You can find a list at these in the -@strong{ODBC}-related links section on the @strong{MySQL} useful links page. +@strong{ODBC}-related links section on the MySQL useful links page. @xref{Useful Links}. To install @strong{MyODBC} on Windows, you should download the @@ -37937,11 +37937,11 @@ mode. @itemize @bullet @item To make a connection to a Unix box from a Windows box, with an ODBC -application (one that doesn't support @strong{MySQL} natively), you must +application (one that doesn't support MySQL natively), you must first install @strong{MyODBC} on the Windows machine. @item The user and Windows machine must have the access privileges to the -@strong{MySQL} server on the Unix machine. This is set up with the +MySQL server on the Unix machine. This is set up with the @code{GRANT} command. @xref{GRANT,,@code{GRANT}}. @item You must create an ODBC DSN entry as follows: @@ -37956,10 +37956,10 @@ Click the tab User DSN. @item Click the button Add. @item -Select @strong{MySQL} in the screen Create New Data Source and click +Select MySQL in the screen Create New Data Source and click the Finish button. @item -The @strong{MySQL} Driver default configuration screen is shown. +The MySQL Driver default configuration screen is shown. @xref{ODBC administrator}. @end itemize @@ -37969,7 +37969,7 @@ specified in the ODBC administrator. @end itemize Notice that there are other configuration options on the screen of -@strong{MySQL} (trace, don't prompt on connect, etc) that you can try if +MySQL (trace, don't prompt on connect, etc) that you can try if you run into problems. @@ -38040,8 +38040,8 @@ through the @code{InConnectionString} argument in the @multitable @columnfractions .2 .2 .6 @item @strong{Parameter} @tab @strong{Default value} @tab @strong{Comment} -@item user @tab ODBC (on Windows) @tab The username used to connect to @strong{MySQL}. -@item server @tab localhost @tab The hostname of the @strong{MySQL} server. +@item user @tab ODBC (on Windows) @tab The username used to connect to MySQL. +@item server @tab localhost @tab The hostname of the MySQL server. @item database @tab @tab The default database @item option @tab 0 @tab A integer by which you can specify how @strong{MyODBC} should work. See below. @item port @tab 3306 @tab The TCP/IP port to use if @code{server} is not @code{localhost}. @@ -38138,21 +38138,21 @@ To make Access work: If you are using Access 2000, you should get and install the newest (version 2.6 or above) Microsoft MDAC (@code{Microsoft Data Access Components}) from @uref{http://www.microsoft.com/data}. This will fix -the following bug in Access: when you export data to @strong{MySQL}, the +the following bug in Access: when you export data to MySQL, the table and column names aren't specified. Another way to around this bug -is to upgrade to MyODBC Version 2.50.33 and @strong{MySQL} Version +is to upgrade to MyODBC Version 2.50.33 and MySQL Version 3.23.x, which together provide a workaround for this bug! You should also get and apply the Microsoft Jet 4.0 Service Pack 5 (SP5) which can be found here @uref{http://support.microsoft.com/support/kb/articles/Q 239/1/14.ASP}. -Note that if you are using @strong{MySQL} Version 3.22, you must to apply the +Note that if you are using MySQL Version 3.22, you must to apply the MDAC patch and use MyODBC 2.50.32 or 2.50.34 and above to go around this problem. @item Set the ``Return matching rows'' MyODBC option field when connecting to -@strong{MySQL}. +MySQL. @item You should have a primary key in the table. If not, new or updated rows may show up as @code{#Deleted#}. @@ -38182,7 +38182,7 @@ Access can't always handle @code{DATE} columns properly. If you have a problem with these, change the columns to @code{DATETIME}. @item In some cases, Access may generate illegal SQL queries that -@strong{MySQL} can't understand. You can fix this by selecting +MySQL can't understand. You can fix this by selecting @code{"Query|SQLSpecific|Pass-Through"} from the Access menu. @item If you have in Access a column defined as BYTE, Access will try to export this @@ -38200,7 +38200,7 @@ matching rows} and @code{Simulate ODBC 1.0}. @item ADO When you are coding with the ADO API and @strong{MyODBC} you need to put attention in some default properties that aren't supported by the -@strong{MySQL} server. For example, using the @code{CursorLocation +MySQL server. For example, using the @code{CursorLocation Property} as @code{adUseServer} will return for the @code{RecordCount Property} a result of -1. To have the right value, you need to set this property to @code{adUseClient}, like is showing in the VB code below: @@ -38243,16 +38243,16 @@ your tables are big! The following information is taken from the ColdFusion documentation: Use the following information to configure ColdFusion Server for Linux -to use the unixODBC driver with @strong{MyODBC} for @strong{MySQL} data +to use the unixODBC driver with @strong{MyODBC} for MySQL data sources. Allaire has verified that @strong{MyODBC} Version 2.50.26 -works with @strong{MySQL} Version 3.22.27 and ColdFusion for Linux. (Any +works with MySQL Version 3.22.27 and ColdFusion for Linux. (Any newer version should also work.) You can download @strong{MyODBC} at @uref{http://www.mysql.com/downloads/api-myodbc.html} @cindex ColdFusion program ColdFusion Version 4.5.1 allows you to us the ColdFusion Administrator -to add the @strong{MySQL} data source. However, the driver is not -included with ColdFusion Version 4.5.1. Before the @strong{MySQL} driver +to add the MySQL data source. However, the driver is not +included with ColdFusion Version 4.5.1. Before the MySQL driver will appear in the ODBC datasources drop-down list, you must build and copy the @strong{MyODBC} driver to @file{/opt/coldfusion/lib/libmyodbc.so}. @@ -38264,7 +38264,7 @@ on Coldfusion applications. @cindex DataJunction @item DataJunction You have to change it to output @code{VARCHAR} rather than @code{ENUM}, as -it exports the latter in a manner that causes @strong{MySQL} grief. +it exports the latter in a manner that causes MySQL grief. @cindex Excel @item Excel Works. Some tips: @@ -38291,7 +38291,7 @@ exact types for each column. @cindex Word program @item Word -To retrieve data from @strong{MySQL} to Word/Excel documents, you need to +To retrieve data from MySQL to Word/Excel documents, you need to use the @code{MyODBC} driver and the Add-in Microsoft Query help. For example, create a db with a table containing 2 columns of text: @@ -38337,7 +38337,7 @@ Test program for ODBC. @cindex Delphi program @item Delphi You must use BDE Version 3.2 or newer. Set the `Don't optimize column width' -option field when connecting to @strong{MySQL}. +option field when connecting to MySQL. Also, here is some potentially useful Delphi code that sets up both an ODBC entry and a BDE entry for @strong{MyODBC} (the BDE entry requires a BDE @@ -38480,7 +38480,7 @@ You should be able to find out the issued queries by searching after the string @code{>mysql_real_query} in the @file{myodbc.log} file. You should also try duplicating the queries in the @code{mysql} monitor -or @code{admndemo} to find out if the error is MyODBC or @strong{MySQL}. +or @code{admndemo} to find out if the error is MyODBC or MySQL. If you find out something is wrong, please only send the relevant rows (max 40 rows) to @email{myodbc@@lists.mysql.com}. Please never @@ -38490,7 +38490,7 @@ If you are unable to find out what's wrong, the last option is to make an archive (tar or zip) that contains a MyODBC trace file, the ODBC log file, and a README file that explains the problem. You can send this to @uref{ftp://support.mysql.com/pub/mysql/secret}. Only we at -@strong{MySQL AB} will have access to the files you upload, and we will +MySQL AB will have access to the files you upload, and we will be very discrete with the data! If you can create a program that also shows this problem, please @@ -38518,16 +38518,16 @@ likely it is that we can fix the problem! * Thread-safe clients:: @end menu -The C API code is distributed with @strong{MySQL}. It is included in the +The C API code is distributed with MySQL. It is included in the @code{mysqlclient} library and allows C programs to access a database. -Many of the clients in the @strong{MySQL} source distribution are +Many of the clients in the MySQL source distribution are written in C. If you are looking for examples that demonstrate how to use the C API, take a look at these clients. You can find these in the -@code{clients} directory in the @strong{MySQL} source distribution. +@code{clients} directory in the MySQL source distribution. Most of the other client APIs (all except Java) use the @code{mysqlclient} -library to communicate with the @strong{MySQL} server. This means that, for +library to communicate with the MySQL server. This means that, for example, you can take advantage of many of the same environment variables that are used by other client programs, because they are referenced from the library. See @ref{Client-Side Scripts}, for a list of these variables. @@ -38550,7 +38550,7 @@ client's default maximum is 16M, but the default maximum in the server is @code{max_allowed_packet} parameter when the server is started. @xref{Server parameters}. -The @strong{MySQL} server shrinks each communication buffer to +The MySQL server shrinks each communication buffer to @code{net_buffer_length} bytes after each query. For clients, the size of the buffer associated with a connection is not decreased until the connection is closed, at which time client memory is reclaimed. @@ -38566,7 +38566,7 @@ client' chapter. @xref{Thread-safe clients}. @tindex MYSQL C type @item MYSQL This structure represents a handle to one database connection. It is -used for almost all @strong{MySQL} functions. +used for almost all MySQL functions. @tindex MYSQL_RES C type @item MYSQL_RES @@ -38594,7 +38594,7 @@ this structure; they are contained in a @code{MYSQL_ROW} structure. @tindex MYSQL_FIELD_OFFSET C type @item MYSQL_FIELD_OFFSET -This is a type-safe representation of an offset into a @strong{MySQL} field +This is a type-safe representation of an offset into a MySQL field list. (Used by @code{mysql_field_seek()}.) Offsets are field numbers within a row, beginning at zero. @@ -38741,7 +38741,7 @@ Returns the number of rows changed/deleted/inserted by the last @code{UPDATE}, Closes a server connection. @item @strong{mysql_connect()} @tab -Connects to a @strong{MySQL} server. This function is deprecated; use +Connects to a MySQL server. This function is deprecated; use @code{mysql_real_connect()} instead. @item @strong{mysql_change_user()} @tab @@ -38773,10 +38773,10 @@ This function is deprecated; @code{mysql_errno()} or @code{mysql_error()} may be used instead. @item @strong{mysql_errno()} @tab -Returns the error number for the most recently invoked @strong{MySQL} function. +Returns the error number for the most recently invoked MySQL function. @item @strong{mysql_error()} @tab -Returns the error message for the most recently invoked @strong{MySQL} function. +Returns the error message for the most recently invoked MySQL function. @item @strong{mysql_real_escape_string()} @tab Escapes special characters in a string for use in a SQL statement taking @@ -38867,7 +38867,7 @@ as necessary. Executes a SQL query specified as a null-terminated string. @item @strong{mysql_real_connect()} @tab -Connects to a @strong{MySQL} server. +Connects to a MySQL server. @item @strong{mysql_real_query()} @tab Executes a SQL query specified as a counted string. @@ -38997,7 +38997,7 @@ changed by calling @code{mysql_field_seek()}. Setting the field cursor affects subsequent calls to @code{mysql_fetch_field()}. You can also get information for fields all at once by calling @code{mysql_fetch_fields()}. -For detecting and reporting errors, @strong{MySQL} provides access to error +For detecting and reporting errors, MySQL provides access to error information by means of the @code{mysql_errno()} and @code{mysql_error()} functions. These return the error code or error message for the most recently invoked function that can succeed or fail, allowing you to determine @@ -39064,7 +39064,7 @@ when an error occurred and what it was. In the descriptions below, a parameter or return value of @code{NULL} means @code{NULL} in the sense of the C programming language, not a -@strong{MySQL} @code{NULL} value. +MySQL @code{NULL} value. Functions that return a value generally return a pointer or an integer. Unless specified otherwise, functions returning a pointer return a @@ -39172,7 +39172,7 @@ None. This function is deprecated. It is preferable to use @code{mysql_real_connect()} instead. -@code{mysql_connect()} attempts to establish a connection to a @strong{MySQL} +@code{mysql_connect()} attempts to establish a connection to a MySQL database engine running on @code{host}. @code{mysql_connect()} must complete successfully before you can execute any of the other API functions, with the exception of @code{mysql_get_client_info()}. @@ -39210,7 +39210,7 @@ become the default (current) database on the connection specified by @code{mysql}. In subsequent queries, this database is the default for table references that do not include an explicit database specifier. -This function was introduced in @strong{MySQL} Version 3.23.3. +This function was introduced in MySQL Version 3.23.3. @code{mysql_change_user()} fails unless the connected user can be authenticated or if he doesn't have permission to use the database. In @@ -39231,13 +39231,13 @@ The same that you can get from @code{mysql_real_connect()}. @item CR_COMMANDS_OUT_OF_SYNC Commands were executed in an improper order. @item CR_SERVER_GONE_ERROR -The @strong{MySQL} server has gone away. +The MySQL server has gone away. @item CR_SERVER_LOST The connection to the server was lost during the query. @item CR_UNKNOWN_ERROR An unknown error occurred. @item ER_UNKNOWN_COM_ERROR -The @strong{MySQL} server doesn't implement this command (probably an old server) +The MySQL server doesn't implement this command (probably an old server) @item ER_ACCESS_DENIED_ERROR The user or password was wrong. @item ER_BAD_DB_ERROR @@ -39303,7 +39303,7 @@ occurred. Commands were executed in an improper order. @item CR_SERVER_GONE_ERROR -The @strong{MySQL} server has gone away. +The MySQL server has gone away. @item CR_SERVER_LOST The connection to the server was lost during the query. @@ -39401,7 +39401,7 @@ occurred. @item CR_COMMANDS_OUT_OF_SYNC Commands were executed in an improper order. @item CR_SERVER_GONE_ERROR -The @strong{MySQL} server has gone away. +The MySQL server has gone away. @item CR_SERVER_LOST The connection to the server was lost during the query. @item CR_UNKNOWN_ERROR @@ -39438,7 +39438,7 @@ Zero if the command was successful. Non-zero if an error occurred. @item CR_COMMANDS_OUT_OF_SYNC Commands were executed in an improper order. @item CR_SERVER_GONE_ERROR -The @strong{MySQL} server has gone away. +The MySQL server has gone away. @item CR_SERVER_LOST The connection to the server was lost during the query. @item CR_UNKNOWN_ERROR @@ -39476,7 +39476,7 @@ was reached normally. In this case, you can use @code{mysql_eof()} to determine what happened. @code{mysql_eof()} returns a non-zero value if the end of the result set was reached and zero if an error occurred. -Historically, @code{mysql_eof()} predates the standard @strong{MySQL} error +Historically, @code{mysql_eof()} predates the standard MySQL error functions @code{mysql_errno()} and @code{mysql_error()}. Because those error functions provide the same information, their use is preferred over @code{mysql_eof()}, which is now deprecated. (In fact, they provide more @@ -39508,7 +39508,7 @@ if(!mysql_eof(result)) // mysql_fetch_row() failed due to an error @} @end example -However, you can achieve the same effect with the standard @strong{MySQL} +However, you can achieve the same effect with the standard MySQL error functions: @example @@ -39537,9 +39537,9 @@ if(mysql_errno(&mysql)) // mysql_fetch_row() failed due to an error For the connection specified by @code{mysql}, @code{mysql_errno()} returns the error code for the most recently invoked API function that can succeed or fail. A return value of zero means that no error occurred. Client error -message numbers are listed in the @strong{MySQL} @file{errmsg.h} header file. +message numbers are listed in the MySQL @file{errmsg.h} header file. Server error message numbers are listed in @file{mysqld_error.h}. In the -@strong{MySQL} source distribution you can find a complete list of +MySQL source distribution you can find a complete list of error messages and error numbers in the file @file{Docs/mysqld_error.txt}. @subsubheading Return Values @@ -39577,7 +39577,7 @@ if(mysql_error(&mysql)[0] != '\0') @end example The language of the client error messages may be changed by -recompiling the @strong{MySQL} client library. Currently you can choose +recompiling the MySQL client library. Currently you can choose error messages in several different languages. @xref{Languages}. @@ -39625,10 +39625,10 @@ field each time you execute a new @code{SELECT} query. The field returned by @code{mysql_field_seek()}. If you've called @code{mysql_query()} to perform a @code{SELECT} on a table -but have not called @code{mysql_store_result()}, @strong{MySQL} returns the +but have not called @code{mysql_store_result()}, MySQL returns the default blob length (8K bytes) if you call @code{mysql_fetch_field()} to ask for the length of a @code{BLOB} field. (The 8K size is chosen because -@strong{MySQL} doesn't know the maximum length for the @code{BLOB}. This +MySQL doesn't know the maximum length for the @code{BLOB}. This should be made configurable sometime.) Once you've retrieved the result set, @code{field->max_length} contains the length of the largest value for this column in the specific query. @@ -39848,7 +39848,7 @@ while ((row = mysql_fetch_row(result))) @code{unsigned int mysql_field_count(MYSQL *mysql)} -If you are using a version of @strong{MySQL} earlier than Version 3.22.24, you +If you are using a version of MySQL earlier than Version 3.22.24, you should use @code{unsigned int mysql_num_fields(MYSQL *mysql)} instead. @subsubheading Description @@ -39995,7 +39995,7 @@ Returns a string that represents the client library version. @subsubheading Return Values -A character string that represents the @strong{MySQL} client library version. +A character string that represents the MySQL client library version. @subsubheading Errors None. @@ -40181,7 +40181,7 @@ Zero for success. Non-zero if an error occurred. @item CR_COMMANDS_OUT_OF_SYNC Commands were executed in an improper order. @item CR_SERVER_GONE_ERROR -The @strong{MySQL} server has gone away. +The MySQL server has gone away. @item CR_SERVER_LOST The connection to the server was lost during the query. @item CR_UNKNOWN_ERROR @@ -40219,7 +40219,7 @@ Commands were executed in an improper order. @item CR_OUT_OF_MEMORY Out of memory. @item CR_SERVER_GONE_ERROR -The @strong{MySQL} server has gone away. +The MySQL server has gone away. @item CR_SERVER_LOST The connection to the server was lost during the query. @item CR_UNKNOWN_ERROR @@ -40258,7 +40258,7 @@ A @code{MYSQL_RES} result set for success. @code{NULL} if an error occurred. @item CR_COMMANDS_OUT_OF_SYNC Commands were executed in an improper order. @item CR_SERVER_GONE_ERROR -The @strong{MySQL} server has gone away. +The MySQL server has gone away. @item CR_SERVER_LOST The connection to the server was lost during the query. @item CR_UNKNOWN_ERROR @@ -40291,7 +40291,7 @@ A @code{MYSQL_RES} result set for success. @code{NULL} if an error occurred. @item CR_COMMANDS_OUT_OF_SYNC Commands were executed in an improper order. @item CR_SERVER_GONE_ERROR -The @strong{MySQL} server has gone away. +The MySQL server has gone away. @item CR_SERVER_LOST The connection to the server was lost during the query. @item CR_UNKNOWN_ERROR @@ -40327,7 +40327,7 @@ A @code{MYSQL_RES} result set for success. @code{NULL} if an error occurred. @item CR_COMMANDS_OUT_OF_SYNC Commands were executed in an improper order. @item CR_SERVER_GONE_ERROR -The @strong{MySQL} server has gone away. +The MySQL server has gone away. @item CR_SERVER_LOST The connection to the server was lost during the query. @item CR_UNKNOWN_ERROR @@ -40347,7 +40347,7 @@ or @code{unsigned int mysql_num_fields(MYSQL *mysql)} -The second form doesn't work on @strong{MySQL} Version 3.22.24 or newer. To pass a +The second form doesn't work on MySQL Version 3.22.24 or newer. To pass a @code{MYSQL*} argument, you must use @code{unsigned int mysql_field_count(MYSQL *mysql)} instead. @@ -40466,8 +40466,8 @@ Possible options values: @item @strong{Option} @tab @strong{Argument type} @tab @strong{Function} @item @code{MYSQL_OPT_CONNECT_TIMEOUT} @tab @code{unsigned int *} @tab Connect timeout in seconds. @item @code{MYSQL_OPT_COMPRESS} @tab Not used @tab Use the compressed client/server protocol. -@item @code{MYSQL_OPT_NAMED_PIPE} @tab Not used @tab Use named pipes to connect to a @strong{MySQL} server on NT. -@item @code{MYSQL_INIT_COMMAND} @tab @code{char *} @tab Command to execute when connecting to the @strong{MySQL} server. Will automatically be re-executed when reconnecting. +@item @code{MYSQL_OPT_NAMED_PIPE} @tab Not used @tab Use named pipes to connect to a MySQL server on NT. +@item @code{MYSQL_INIT_COMMAND} @tab @code{char *} @tab Command to execute when connecting to the MySQL server. Will automatically be re-executed when reconnecting. @item @code{MYSQL_READ_DEFAULT_FILE} @tab @code{char *} @tab Read options from the named option file instead of from @file{my.cnf}. @item @code{MYSQL_READ_DEFAULT_GROUP} @tab @code{char *} @tab Read options from the named group from @file{my.cnf} or the file specified with @code{MYSQL_READ_DEFAULT_FILE}. @end multitable @@ -40483,10 +40483,10 @@ The specified group in the option file may contain the following options: @item @code{database} @tab Connect to this database if no database was specified in the connect command. @item @code{debug} @tab Debug options. @item @code{host} @tab Default host name. -@item @code{init-command} @tab Command to execute when connecting to @strong{MySQL} server. Will automatically be re-executed when reconnecting. +@item @code{init-command} @tab Command to execute when connecting to MySQL server. Will automatically be re-executed when reconnecting. @item @code{interactive-timeout} @tab Same as specifying @code{CLIENT_INTERACTIVE} to @code{mysql_real_connect()}. @xref{mysql_real_connect}. @item @code{password} @tab Default password. -@item @code{pipe} @tab Use named pipes to connect to a @strong{MySQL} server on NT. +@item @code{pipe} @tab Use named pipes to connect to a MySQL server on NT. @item @code{port} @tab Default port number. @item @code{return-found-rows} @tab Tell @code{mysql_info()} to return found rows instead of updated rows when using @code{UPDATE}. @item @code{socket} @tab Default socket number. @@ -40549,7 +40549,7 @@ Zero if the server is alive. Non-zero if an error occurred. @item CR_COMMANDS_OUT_OF_SYNC Commands were executed in an improper order. @item CR_SERVER_GONE_ERROR -The @strong{MySQL} server has gone away. +The MySQL server has gone away. @item CR_UNKNOWN_ERROR An unknown error occurred. @end table @@ -40586,7 +40586,7 @@ Zero if the query was successful. Non-zero if an error occurred. @item CR_COMMANDS_OUT_OF_SYNC Commands were executed in an improper order. @item CR_SERVER_GONE_ERROR -The @strong{MySQL} server has gone away. +The MySQL server has gone away. @item CR_SERVER_LOST The connection to the server was lost during the query. @item CR_UNKNOWN_ERROR @@ -40607,7 +40607,7 @@ An unknown error occurred. @subsubheading Description @code{mysql_real_connect()} attempts to establish a connection to a -@strong{MySQL} database engine running on @code{host}. +MySQL database engine running on @code{host}. @code{mysql_real_connect()} must complete successfully before you can execute any of the other API functions, with the exception of @code{mysql_get_client_info()}. @@ -40629,7 +40629,7 @@ the local host is assumed. If the OS supports sockets (Unix) or named pipes (Windows), they are used instead of TCP/IP to connect to the server. @item -The @code{user} parameter contains the user's @strong{MySQL} login ID. If +The @code{user} parameter contains the user's MySQL login ID. If @code{user} is @code{NULL}, the current user is assumed. Under Unix, this is the current login name. Under Windows ODBC, the current user name must be specified explicitly. @@ -40639,7 +40639,7 @@ specified explicitly. The @code{passwd} parameter contains the password for @code{user}. If @code{passwd} is @code{NULL}, only entries in the @code{user} table for the user that have a blank (empty) password field will be checked for a match. This -allows the database administrator to set up the @strong{MySQL} privilege +allows the database administrator to set up the MySQL privilege system in such a way that users get different privileges depending on whether or not they have specified a password. @@ -40690,10 +40690,10 @@ pass @code{NULL} for that parameter. @table @code @item CR_CONN_HOST_ERROR -Failed to connect to the @strong{MySQL} server. +Failed to connect to the MySQL server. @item CR_CONNECTION_ERROR -Failed to connect to the local @strong{MySQL} server. +Failed to connect to the local MySQL server. @item CR_IPSOCK_ERROR Failed to create an IP socket. @@ -40743,10 +40743,10 @@ if (!mysql_real_connect(&mysql,"host","user","passwd","database",0,NULL,0)) @} @end example -By using @code{mysql_options()} the @strong{MySQL} library will read the +By using @code{mysql_options()} the MySQL library will read the @code{[client]} and @code{your_prog_name} sections in the @code{my.cnf} file which will ensure that your program will work, even if someone has -set up @strong{MySQL} in some non-standard way. +set up MySQL in some non-standard way. Note that upon connection, @code{mysql_real_connect()} sets the @code{reconnect} flag (part of the MYSQL structure) to a value of @code{1}. This flag indicates, @@ -40849,7 +40849,7 @@ Zero if the query was successful. Non-zero if an error occurred. @item CR_COMMANDS_OUT_OF_SYNC Commands were executed in an improper order. @item CR_SERVER_GONE_ERROR -The @strong{MySQL} server has gone away. +The MySQL server has gone away. @item CR_SERVER_LOST The connection to the server was lost during the query. @item CR_UNKNOWN_ERROR @@ -40866,7 +40866,7 @@ An unknown error occurred. @subsubheading Description -Asks the @strong{MySQL} server to reload the grant tables. The +Asks the MySQL server to reload the grant tables. The connected user must have the @strong{reload} privilege. This function is deprecated. It is preferable to use @code{mysql_query()} @@ -40882,7 +40882,7 @@ Zero for success. Non-zero if an error occurred. @item CR_COMMANDS_OUT_OF_SYNC Commands were executed in an improper order. @item CR_SERVER_GONE_ERROR -The @strong{MySQL} server has gone away. +The MySQL server has gone away. @item CR_SERVER_LOST The connection to the server was lost during the query. @item CR_UNKNOWN_ERROR @@ -40968,7 +40968,7 @@ Zero for success. Non-zero if an error occurred. @item CR_COMMANDS_OUT_OF_SYNC Commands were executed in an improper order. @item CR_SERVER_GONE_ERROR -The @strong{MySQL} server has gone away. +The MySQL server has gone away. @item CR_SERVER_LOST The connection to the server was lost during the query. @item CR_UNKNOWN_ERROR @@ -40998,7 +40998,7 @@ Zero for success. Non-zero if an error occurred. @item CR_COMMANDS_OUT_OF_SYNC Commands were executed in an improper order. @item CR_SERVER_GONE_ERROR -The @strong{MySQL} server has gone away. +The MySQL server has gone away. @item CR_SERVER_LOST The connection to the server was lost during the query. @item CR_UNKNOWN_ERROR @@ -41030,7 +41030,7 @@ error occurred. @item CR_COMMANDS_OUT_OF_SYNC Commands were executed in an improper order. @item CR_SERVER_GONE_ERROR -The @strong{MySQL} server has gone away. +The MySQL server has gone away. @item CR_SERVER_LOST The connection to the server was lost during the query. @item CR_UNKNOWN_ERROR @@ -41103,7 +41103,7 @@ Commands were executed in an improper order. @item CR_OUT_OF_MEMORY Out of memory. @item CR_SERVER_GONE_ERROR -The @strong{MySQL} server has gone away. +The MySQL server has gone away. @item CR_SERVER_LOST The connection to the server was lost during the query. @item CR_UNKNOWN_ERROR @@ -41192,7 +41192,7 @@ Commands were executed in an improper order. @item CR_OUT_OF_MEMORY Out of memory. @item CR_SERVER_GONE_ERROR -The @strong{MySQL} server has gone away. +The MySQL server has gone away. @item CR_SERVER_LOST The connection to the server was lost during the query. @item CR_UNKNOWN_ERROR @@ -41363,14 +41363,14 @@ adding @code{-lm} to the end of the compile/link line. @cindex building, client programs @cindex programs, client -If you compile @strong{MySQL} clients that you've written yourself or that +If you compile MySQL clients that you've written yourself or that you obtain from a third party, they must be linked using the @code{-lmysqlclient -lz} option on the link command. You may also need to specify a @code{-L} option to tell the linker where to find the library. For example, if the library is installed in @file{/usr/local/mysql/lib}, use @code{-L/usr/local/mysql/lib -lmysqlclient -lz} on the link command. -For clients that use @strong{MySQL} header files, you may need to specify a +For clients that use MySQL header files, you may need to specify a @code{-I} option when you compile them (for example, @code{-I/usr/local/mysql/include}), so the compiler can find the header files. @@ -41396,14 +41396,14 @@ Newer binary distributions should have both a normal and a thread-safe client library. To get a really thread-safe client where you can interrupt the client -from other threads and set timeouts when talking with the @strong{MySQL} +from other threads and set timeouts when talking with the MySQL server, you should use the @code{-lmysys}, @code{-lstring}, and @code{-ldbug} libraries and the @code{net_serv.o} code that the server uses. If you don't need interrupts or timeouts, you can just compile a thread safe client library @code{(mysqlclient_r)} and use this. @xref{C,, MySQL C API}. In this case you don't have to worry about the -@code{net_serv.o} object file or the other @strong{MySQL} libraries. +@code{net_serv.o} object file or the other MySQL libraries. When using a threaded client and you want to use timeouts and interrupts, you can make great use of the routines in the @file{thr_alarm.c} file. @@ -41431,7 +41431,7 @@ as you do the following: @itemize @bullet @item -Two threads can't send a query to the @strong{MySQL} at the same time on +Two threads can't send a query to the MySQL at the same time on the same connection. In particular, you have to ensure that between a @code{mysql_query()} and @code{mysql_store_result()} no other thread is using the same connection. @@ -41470,7 +41470,7 @@ included the thread libraries on the link/compile line. @cindex C++ APIs -Two APIs are available in the @strong{MySQL} +Two APIs are available in the MySQL @uref{http://www.mysql.com/Downloads/Contrib/,Contrib directory}. @@ -41479,7 +41479,7 @@ Two APIs are available in the @strong{MySQL} @cindex Borland C++ compiler -You can compile the @strong{MySQL} Windows source with Borland C++ 5.02. +You can compile the MySQL Windows source with Borland C++ 5.02. (The Windows source includes only projects for Microsoft VC++, for Borland C++ you have to do the project files yourself). @@ -41491,7 +41491,7 @@ this problem. @itemize @bullet @item -You can use the static @strong{MySQL} libraries for Borland C++ that you +You can use the static MySQL libraries for Borland C++ that you can find on @uref{http://www.mysql.com/downloads/os-win32.html}. @item Only call @code{mysql_init()} with @code{NULL} as an argument, not a @@ -41505,13 +41505,13 @@ pre-allocated MYSQL struct. @cindex Java connectivity @cindex JDBC -There are 2 supported JDBC drivers for @strong{MySQL} (the mm driver and +There are 2 supported JDBC drivers for MySQL (the mm driver and the Reisin JDBC driver). You can find a copy of the mm driver at @uref{http://mmmysql.sourceforge.net/} or @uref{http://www.mysql.com/Downloads/Contrib/} and the Reisin driver at @uref{http://www.caucho.com/projects/jdbc-mysql/index.xtp} For documentation consult any JDBC documentation and the driver's own -documentation for @strong{MySQL}-specific features. +documentation for MySQL-specific features. @node Python, Tcl, Java, Clients @@ -41519,11 +41519,11 @@ documentation for @strong{MySQL}-specific features. @cindex Python APIs -The @strong{MySQL} @uref{http://www.mysql.com/Downloads/Contrib/,Contrib directory} +The MySQL @uref{http://www.mysql.com/Downloads/Contrib/,Contrib directory} contains a Python interface written by Joseph Skinner. You can also use the Python interface to iODBC to access a -@strong{MySQL} server. +MySQL server. @uref{http://starship.skyport.net/~lemburg/,mxODBC} @@ -41544,7 +41544,7 @@ interface that is based on msqltcl 1.50. @cindex Eiffel Wrapper @cindex wrappers, Eiffel -The @strong{MySQL} @uref{http://www.mysql.com/Downloads/Contrib/,Contrib directory} +The MySQL @uref{http://www.mysql.com/Downloads/Contrib/,Contrib directory} contains an Eiffel wrapper written by Michael Ravits. You can also find this at: @@ -41572,7 +41572,7 @@ You can also find this at: @cindex UDFs, defined @cindex functions, user-defined -There are two ways to add new functions to @strong{MySQL}: +There are two ways to add new functions to MySQL: @itemize @bullet @item You can add the function through the user-definable function (UDF) @@ -41580,7 +41580,7 @@ interface. User-definable functions are added and removed dynamically using the @code{CREATE FUNCTION} and @code{DROP FUNCTION} statements. @xref{CREATE FUNCTION, , @code{CREATE FUNCTION}}. -@item You can add the function as a native (built in) @strong{MySQL} function. +@item You can add the function as a native (built in) MySQL function. Native functions are compiled into the @code{mysqld} server and become available on a permanent basis. @end itemize @@ -41593,10 +41593,10 @@ If you write a user-definable function, you must install the object file in addition to the server itself. If you compile your function into the server, you don't need to do that. @item -You can add UDFs to a binary @strong{MySQL} distribution. Native functions +You can add UDFs to a binary MySQL distribution. Native functions require you to modify a source distribution. @item -If you upgrade your @strong{MySQL} distribution, you can continue to use your +If you upgrade your MySQL distribution, you can continue to use your previously installed UDFs. For native functions, you must repeat your modifications each time you upgrade. @end itemize @@ -41627,12 +41627,12 @@ CREATE [AGGREGATE] FUNCTION function_name RETURNS @{STRING|REAL|INTEGER@} DROP FUNCTION function_name @end example -A user-definable function (UDF) is a way to extend @strong{MySQL} with a new -function that works like native (built in) @strong{MySQL} functions such as +A user-definable function (UDF) is a way to extend MySQL with a new +function that works like native (built in) MySQL functions such as @code{ABS()} and @code{CONCAT()}. -@code{AGGREGATE} is a new option for @strong{MySQL} Version 3.23. An -@code{AGGREGATE} function works exactly like a native @strong{MySQL} +@code{AGGREGATE} is a new option for MySQL Version 3.23. An +@code{AGGREGATE} function works exactly like a native MySQL @code{GROUP} function like @code{SUM} or @code{COUNT()}. @code{CREATE FUNCTION} saves the function's name, type, and shared library @@ -41669,7 +41669,7 @@ compiled @code{mysqld} dynamically (not statically). For the UDF mechanism to work, functions must be written in C or C++ and your -operating system must support dynamic loading. The @strong{MySQL} source +operating system must support dynamic loading. The MySQL source distribution includes a file @file{sql/udf_example.cc} that defines 5 new functions. Consult this file to see how UDF calling conventions work. @@ -41713,7 +41713,7 @@ The initialization function for @code{xxx()}. It can be used to: Check the number of arguments to @code{XXX()}. @item Check that the arguments are of a required type or, alternatively, -tell @strong{MySQL} to coerce arguments to the types you want when +tell MySQL to coerce arguments to the types you want when the main function is called. @item Allocate any memory required by the main function. @@ -41730,7 +41730,7 @@ The deinitialization function for @code{xxx()}. It should deallocate any memory allocated by the initialization function. @end table -When a SQL statement invokes @code{XXX()}, @strong{MySQL} calls the +When a SQL statement invokes @code{XXX()}, MySQL calls the initialization function @code{xxx_init()} to let it perform any required setup, such as argument checking or memory allocation. If @code{xxx_init()} returns an error, the SQL statement is aborted with an error message and the @@ -41873,7 +41873,7 @@ if (args->arg_type[0] != STRING_RESULT || As an alternative to requiring your function's arguments to be of particular types, you can use the initialization function to set the @code{arg_type} -elements to the types you want. This causes @strong{MySQL} to coerce +elements to the types you want. This causes MySQL to coerce arguments to those types for each call to @code{xxx()}. For example, to specify coercion of the first two arguments to string and integer, do this in @code{xxx_init()}: @@ -41988,7 +41988,7 @@ If @code{xxx()} sets @code{*error} to @code{1} for any row, the function value is @code{NULL} for the current row and for any subsequent rows processed by the statement in which @code{XXX()} was invoked. (@code{xxx()} will not even be called for subsequent rows.) @strong{NOTE:} In -@strong{MySQL} versions prior to 3.22.10, you should set both @code{*error} +MySQL versions prior to 3.22.10, you should set both @code{*error} and @code{*is_null}: @example @@ -42006,7 +42006,7 @@ and @code{*is_null}: Files implementing UDFs must be compiled and installed on the host where the server runs. This process is described below for the example UDF file -@file{udf_example.cc} that is included in the @strong{MySQL} source +@file{udf_example.cc} that is included in the MySQL source distribution. This file contains the following functions: @itemize @bullet @@ -42037,7 +42037,7 @@ shell> gcc -shared -o udf_example.so myfunc.cc @end example You can easily find out the correct compiler options for your system by -running this command in the @file{sql} directory of your @strong{MySQL} +running this command in the @file{sql} directory of your MySQL source tree: @example @@ -42050,7 +42050,7 @@ and add @code{-o udf_example.so} to the end of the line. (On some systems, you may need to leave the @code{-c} on the command.) Once you compile a shared object containing UDFs, you must install it -and tell @strong{MySQL} about it. Compiling a shared object from +and tell MySQL about it. Compiling a shared object from @file{udf_example.cc} produces a file named something like @file{udf_example.so} (the exact name may vary from platform to platform). Copy this file to some directory searched by @code{ld}, such as @@ -42110,13 +42110,13 @@ one that has been loaded with @code{CREATE FUNCTION} and not removed with The procedure for adding a new native function is described below. Note that you cannot add native functions to a binary distribution because -the procedure involves modifying @strong{MySQL} source code. You must -compile @strong{MySQL} yourself from a source distribution. Also note -that if you migrate to another version of @strong{MySQL} (for example, +the procedure involves modifying MySQL source code. You must +compile MySQL yourself from a source distribution. Also note +that if you migrate to another version of MySQL (for example, when a new version is released), you will need to repeat the procedure with the new version. -To add a new native @strong{MySQL} function, follow these steps: +To add a new native MySQL function, follow these steps: @enumerate @item @@ -42201,11 +42201,11 @@ absolutely necessary! @cindex adding, procedures @cindex new procedures, adding -In @strong{MySQL}, you can define a procedure in C++ that can access and +In MySQL, you can define a procedure in C++ that can access and modify the data in a query before it is sent to the client. The modification can be done on row-by-row or @code{GROUP BY} level. -We have created an example procedure in @strong{MySQL} Version 3.23 to +We have created an example procedure in MySQL Version 3.23 to show you what can be done. Additionally we recommend you to take a look at 'mylua', which you can find in the Contrib directory. @xref{Contrib}. Which this you can use the LUA @@ -42263,7 +42263,7 @@ You can find all information about procedures by examining the following files: @cindex threads This chapter describes a lot of things that you need to know when -working on the @strong{MySQL} code. If you plan to contribute to MySQL +working on the MySQL code. If you plan to contribute to MySQL development, want to have access to the bleeding-edge in-between versions code, or just want to keep track of development, follow the instructions in @xref{Installing source tree}. If you are interested in MySQL @@ -42280,7 +42280,7 @@ This is a relatively low traffic list, in comparison with @node MySQL threads, MySQL test suite, MySQL internals, MySQL internals @subsection MySQL Threads -The @strong{MySQL} server creates the following threads: +The MySQL server creates the following threads: @itemize @bullet @@ -42337,17 +42337,17 @@ publicly available part of our testing process consisted of the @code{crash-me} test, a Perl DBI/DBD benchmark found in the @code{sql-bench} directory, and miscellaneous tests located in @code{tests} directory. The lack of a standardized publicly available test suite has made it difficult for our users, -as well developers, to do regression tests on the @strong{MySQL} code. To +as well developers, to do regression tests on the MySQL code. To address this problem, we have created a new test system that is included in the source and binary distributions starting in Version 3.23.29. -The current set of test cases doesn't test everything in @strong{MySQL}, but it +The current set of test cases doesn't test everything in MySQL, but it should catch most obvious bugs in the SQL processing code, OS/library issues, and is quite thorough in testing replication. Our eventual goal is to have the tests cover 100% of the code. We welcome contributions to our test suite. You may especially want to contribute tests that examine the functionality critical to your system, as this will ensure -that all future @strong{MySQL} releases will work well with your +that all future MySQL releases will work well with your applications. @menu @@ -42369,7 +42369,7 @@ your system after a build, type @code{make test} or installed a binary distribution, @code{cd} to the install root (eg. @code{/usr/local/mysql}), and do @code{scripts/mysql-test-run}. All tests should succeed. If not, you should try to find out why and -report the problem if this is a bug in @strong{MySQL}. +report the problem if this is a bug in MySQL. @xref{Reporting mysqltest bugs}. If you have a copy of @code{mysqld} running on the machine where you want to @@ -42400,7 +42400,7 @@ The tests are located in @code{mysql-test/t/*.test} @item A test case consists of @code{;} terminated statements and is similar to the input of @code{mysql} command line client. A statement by default is a query -to be sent to @strong{MySQL} server, unless it is recognized as internal +to be sent to MySQL server, unless it is recognized as internal command ( eg. @code{sleep} ). @item @@ -42470,7 +42470,7 @@ attachments, you should ftp all the relevant files to: @node Reporting mysqltest bugs, , extending mysqltest, MySQL test suite @subsubsection Reporting Bugs in the MySQL Test Suite -If your @strong{MySQL} version doesn't pass the test suite you should +If your MySQL version doesn't pass the test suite you should do the following: @itemize @bullet @@ -42491,7 +42491,7 @@ cd mysql-test mysql-test-run --local test-name @end example -If this fails, then you should configure @strong{MySQL} with +If this fails, then you should configure MySQL with @code{--with-debug} and run @code{mysql-test-run} with the @code{--debug} option. If this also fails send the trace file @file{var/tmp/master.trace} to ftp://support.mysql.com/pub/mysql/secret @@ -42504,8 +42504,8 @@ Try also to run @code{mysql-test-run} with the @code{--force} option to see if there is any other test that fails. @item -If you have compiled @strong{MySQL} yourself, check our manual for how -to compile @strong{MySQL} on your platform or, preferable, use one of +If you have compiled MySQL yourself, check our manual for how +to compile MySQL on your platform or, preferable, use one of the binaries we have compiled for you at @uref{http://www.mysql.com/downloads/}. All our standard binaries should pass the test suite ! @@ -42513,7 +42513,7 @@ pass the test suite ! @item If you get an error, like @code{Result length mismatch} or @code{Result content mismatch} it means that the output of the test didn't match -exactly the expected output. This could be a bug in @strong{MySQL} or +exactly the expected output. This could be a bug in MySQL or that your mysqld version produces slight different results under some circumstances. @@ -42528,12 +42528,12 @@ If a test fails totally, you should check the logs file in the @code{mysql-test/var/log} directory for hints of what went wrong. @item -If you have compiled @strong{MySQL} with debugging you can try to debug this +If you have compiled MySQL with debugging you can try to debug this by running @code{mysql-test-run} with the @code{--gdb} and/or @code{--debug} options. @xref{Making trace files}. -If you have not compiled @strong{MySQL} for debugging you should probably +If you have not compiled MySQL for debugging you should probably do that. Just specify the @code{--with-debug} options to @code{configure}! @xref{Installing source}. @end itemize @@ -42549,13 +42549,13 @@ do that. Just specify the @code{--with-debug} options to @code{configure}! @menu * What is crashing:: How to determine what is causing problems -* Crashing:: What to do if @strong{MySQL} keeps crashing -* Link errors:: Problems when linking with the @strong{MySQL} client library -* Common errors:: Some common errors when using @strong{MySQL} -* Full disk:: How @strong{MySQL} handles a full disk -* Temporary files:: Where @strong{MySQL} stores temporary files +* Crashing:: What to do if MySQL keeps crashing +* Link errors:: Problems when linking with the MySQL client library +* Common errors:: Some common errors when using MySQL +* Full disk:: How MySQL handles a full disk +* Temporary files:: Where MySQL stores temporary files * Problems with mysql.sock:: How to protect @file{/tmp/mysql.sock} -* Changing MySQL user:: How to run @strong{MySQL} as a normal user +* Changing MySQL user:: How to run MySQL as a normal user * Resetting permissions:: How to reset a forgotten password. * File permissions :: Problems with file permissions * Not enough file handles:: File not found @@ -42619,8 +42619,8 @@ logging into your machine from another machine and execute @item Please examine your system log file (/var/log/messages or similar) for -reasons for your problems. If you think the problem is in @strong{MySQL} -then you should also examine @strong{MySQL}'s log files. @xref{Update log}. +reasons for your problems. If you think the problem is in MySQL +then you should also examine MySQL's log files. @xref{Update log}. @item If you don't think you have hardware problems, you should try to find @@ -42639,11 +42639,11 @@ doesn't want to die, there is probably a bug in the operating system. @end itemize If after you have examined all other possibilities and you have -concluded that it's the @strong{MySQL} server or a @strong{MySQL} client +concluded that it's the MySQL server or a MySQL client that is causing the problem, it's time to do a bug report for our mailing list or our support team. In the bug report, try to give a very detailed description of how the system is behaving and what you think is -happening. You should also state why you think it's @strong{MySQL} that +happening. You should also state why you think it's MySQL that is causing the problems. Take into consideration all the situations in this chapter. State any problems exactly how they appear when you examine your system. Use the 'cut and paste' method for any output @@ -42667,7 +42667,7 @@ If it's the @code{mysqld} server that is causing problems, can you do @code{mysqladmin -u root ping} or @code{mysqladmin -u root processlist}? @item What does a client program say (try with @code{mysql}, for example) -when you try to connect to the @strong{MySQL} server? +when you try to connect to the MySQL server? Does the client jam? Do you get any output from the program? @end itemize @@ -42680,9 +42680,9 @@ described in this manual. @xref{Asking questions}. @cindex crash, repeated -All @strong{MySQL} versions are tested on many platforms before they are +All MySQL versions are tested on many platforms before they are released. This doesn't mean that there aren't any bugs in -@strong{MySQL}, but it means if there are bugs, they are very few and can be +MySQL, but it means if there are bugs, they are very few and can be hard to find. If you have a problem, it will always help if you try to find out exactly what crashes your system, as you will have a much better chance of getting this fixed quickly. @@ -42694,14 +42694,14 @@ executing @code{mysqladmin version}. If @code{mysqld} has died, you may find the reason for this in the file @file{mysql-data-directory/`hostname`.err}. @xref{Error log}. -Many crashes of @strong{MySQL} are caused by corrupted index / data -files. @strong{MySQL} will update the data on disk, with the +Many crashes of MySQL are caused by corrupted index / data +files. MySQL will update the data on disk, with the @code{write()} system call, after every SQL statement and before the client is notified about the result. (This is not true if you are running with @code{delayed_key_writes}, in which case only the data is written.) This means that the data is safe even if @code{mysqld} crashes, as the OS will ensure that the not flushed data is written to disk. You can force -@strong{MySQL} to sync everything to disk after every SQL command by +MySQL to sync everything to disk after every SQL command by starting @code{mysqld} with @code{--flush}. The above means that normally you shouldn't get corrupted tables unless: @@ -42746,8 +42746,8 @@ state. @xref{MySQL Database Administration}. Use @code{mysqld --log} and try to determine from the information in the log whether or not some specific query kills the server. About 95% of all bugs are related to a particular query! Normally this is one of the last queries in -the log file just before @strong{MySQL} restarted. @xref{Query log}. -If you can repeatadly kill @strong{MySQL} with one of the queries, even +the log file just before MySQL restarted. @xref{Query log}. +If you can repeatadly kill MySQL with one of the queries, even when you have checked all tables just before doing the query, then you have been able to locate the bug and should do a bug report for this! @xref{Bug reports}. @@ -42757,26 +42757,26 @@ Try to make a test case that we can use to reproduce the problem. @xref{Reproduceable test case}. @item -Try running the included mysql-test test and the @strong{MySQL} -benchmarks. @xref{MySQL test suite}. They should test @strong{MySQL} +Try running the included mysql-test test and the MySQL +benchmarks. @xref{MySQL test suite}. They should test MySQL rather well. You can also add code that to the benchmarks to simulates your application! The benchmarks can be found in the @file{bench} directory in the source distribution or, for a binary distribution, in -the @file{sql-bench} directory under your @strong{MySQL} installation +the @file{sql-bench} directory under your MySQL installation directory. @item Try @code{fork_test.pl} and @code{fork2_test.pl}. @item -If you configure @strong{MySQL} for debugging, it will be much easier to +If you configure MySQL for debugging, it will be much easier to gather information about possible errors if something goes wrong. -Reconfigure @strong{MySQL} with the @code{--with-debug} option or +Reconfigure MySQL with the @code{--with-debug} option or @code{--with-debug=full} to @code{configure} and then recompile. @xref{Debugging server}. @item -Configuring @strong{MySQL} for debugging causes a safe memory allocator to be +Configuring MySQL for debugging causes a safe memory allocator to be included that can find some errors. It also provides a lot of output about what is happening. @@ -42836,22 +42836,22 @@ threads} and switch to a specific thread with @code{thread #}, where @item Try to simulate your application with a Perl script to force -@strong{MySQL} to crash or misbehave. +MySQL to crash or misbehave. @item Send a normal bug report. @xref{Bug reports}. Be even more detailed -than usual. Because @strong{MySQL} works for many people, it may be that the +than usual. Because MySQL works for many people, it may be that the crash results from something that exists only on your computer (for example, an error that is related to your particular system libraries). @item If you have a problem with tables with dynamic-length rows and you are not using @code{BLOB/TEXT} columns (but only @code{VARCHAR} columns), you can try to change all @code{VARCHAR} to @code{CHAR} with @code{ALTER -TABLE}. This will force @strong{MySQL} to use fixed-size rows. +TABLE}. This will force MySQL to use fixed-size rows. Fixed-size rows take a little extra space, but are much more tolerant to corruption! -The current dynamic row code has been in use at @strong{MySQL AB} for at +The current dynamic row code has been in use at MySQL AB for at least 3 years without any problems, but by nature dynamic-length rows are more prone to errors, so it may be a good idea to try the above to see if it helps! @@ -42898,7 +42898,7 @@ mf_format.o(.text+0x201): undefined reference to `__lxstat' it usually means that your library is compiled on a system that is not 100 % compatible with yours. In this case you should download the -latest @strong{MySQL} source distribution and compile this yourself. +latest MySQL source distribution and compile this yourself. @xref{Installing source}. If you are trying to run a program and you then get errors for @@ -42923,7 +42923,7 @@ like @file{/lib}, and update the shared library information by executing @end itemize Another way to solve this problem is to link your program statically, with -@code{-static}, or by removing the dynamic @strong{MySQL} libraries +@code{-static}, or by removing the dynamic MySQL libraries before linking your code. In the second case you should be sure that no other programs are using the dynamic libraries! @@ -42979,10 +42979,10 @@ can change the time limit by setting the @code{wait_timeout} variable when you start @code{mysqld}. Another common reason to receive the @code{MySQL server has gone away} error -is because you have issued a ``close'' on your @strong{MySQL} connection +is because you have issued a ``close'' on your MySQL connection and then tried to run a query on the closed connection. -You can check that the @strong{MySQL} hasn't died by executing +You can check that the MySQL hasn't died by executing @code{mysqladmin version} and examining the uptime. If you have a script, you just have to issue the query again for the client @@ -43012,7 +43012,7 @@ return a big result row! @node Can not connect to server, Blocked host, Gone away, Common errors @appendixsubsec @code{Can't connect to [local] MySQL server} error -A @strong{MySQL} client on Unix can connect to the @code{mysqld} server in two +A MySQL client on Unix can connect to the @code{mysqld} server in two different ways: Unix sockets, which connect through a file in the file system (default @file{/tmp/mysqld.sock}) or TCP/IP, which connects through a port number. Unix sockets are faster than TCP/IP but can only @@ -43022,14 +43022,14 @@ hostname @code{localhost}. On Windows you can connect only with TCP/IP if the @code{mysqld} server is running on Win95/Win98. If it's running on NT, you can also connect -with named pipes. The name of the named pipe is @strong{MySQL}. If you -don't give a hostname when connecting to @code{mysqld}, a @strong{MySQL} client +with named pipes. The name of the named pipe is MySQL. If you +don't give a hostname when connecting to @code{mysqld}, a MySQL client will first try to connect to the named pipe, and if this doesn't work it will connect to the TCP/IP port. You can force the use of named pipes on Windows by using @code{.} as the hostname. The error (2002) @code{Can't connect to ...} normally means that there -isn't a @strong{MySQL} server running on the system or that you are +isn't a MySQL server running on the system or that you are using a wrong socket file or TCP/IP port when trying to connect to the @code{mysqld} server. @@ -43075,12 +43075,12 @@ shell> mysqladmin -h `hostname` version @item Someone has removed the Unix socket that @code{mysqld} uses (default @file{/tmp/mysqld.sock}). You might have a @code{cron} job that removes -the @strong{MySQL} socket (for example, a job that removes old files +the MySQL socket (for example, a job that removes old files from the @file{/tmp} directory). You can always run @code{mysqladmin version} and check that the socket @code{mysqladmin} is trying to use really exists. The fix in this case is to change the @code{cron} job to not remove @file{mysqld.sock} or to place the socket somewhere else. You -can specify a different socket location at @strong{MySQL} configuration +can specify a different socket location at MySQL configuration time with this command: @example shell> ./configure --with-unix-socket-path=/path/to/socket @@ -43088,11 +43088,11 @@ shell> ./configure --with-unix-socket-path=/path/to/socket You can also start @code{safe_mysqld} with the @code{--socket=/path/to/socket} option and set the environment variable @code{MYSQL_UNIX_PORT} to the socket pathname before starting your -@strong{MySQL} clients. +MySQL clients. @item You have started the @code{mysqld} server with the @code{--socket=/path/to/socket} option. If you change the socket -pathname for the server, you must also notify the @strong{MySQL} clients +pathname for the server, you must also notify the MySQL clients about the new path. You can do this by setting the environment variable @code{MYSQL_UNIX_PORT} to the socket pathname or by providing the socket path as an argument to the clients. You can test the socket with this command: @@ -43103,7 +43103,7 @@ shell> mysqladmin --socket=/path/to/socket version @item You are using Linux and one thread has died (core dumped). In this case you must kill the other @code{mysqld} threads (for example, with the -@code{mysql_zap} script before you can start a new @strong{MySQL} +@code{mysql_zap} script before you can start a new MySQL server. @xref{Crashing}. @item You may not have read and write privilege to either the directory that holds @@ -43120,8 +43120,8 @@ problem is : @item Check if the server is up by doing @code{telnet your-host-name tcp-ip-port-number} and press @code{RETURN} a couple of times. If there -is a @strong{MySQL} server running on this port you should get a -responses that includes the version number of the running @strong{MySQL} +is a MySQL server running on this port you should get a +responses that includes the version number of the running MySQL server. If you get an error like @code{telnet: Unable to connect to remote host: Connection refused}, then there is no server running on the given port. @@ -43169,7 +43169,7 @@ increase the value of the @code{max_connect_errors} variable! @appendixsubsec @code{Too many connections} Error If you get the error @code{Too many connections} when you try to connect -to @strong{MySQL}, this means that there is already @code{max_connections} +to MySQL, this means that there is already @code{max_connections} clients connected to the @code{mysqld} server. If you need more connections than the default (100), then you should restart @@ -43182,7 +43182,7 @@ users (they shouldn't need this), an administrator with this privilege can log in and use @code{SHOW PROCESSLIST} to find out what could be wrong. @xref{SHOW}. -The maximum number of connects @strong{MySQL} is depending on how good +The maximum number of connects MySQL is depending on how good the thread library is on a given platform. Linux or Solaris should be able to support 500-1000 simultaneous connections, depending on how much RAM you have and what your clients are doing. @@ -43225,7 +43225,7 @@ mysql: needed 8136 byte (8k), memory in use: 12481367 bytes (12189k) ERROR 2008: MySQL client ran out of memory @end example -note that the error refers to the @strong{MySQL} client @code{mysql}. The +note that the error refers to the MySQL client @code{mysql}. The reason for this error is simply that the client does not have enough memory to store the whole result. @@ -43239,7 +43239,7 @@ more on the server). @node Packet too large, Communication errors, Out of memory, Common errors @appendixsubsec @code{Packet too large} Error -When a @strong{MySQL} client or the @code{mysqld} server gets a packet bigger +When a MySQL client or the @code{mysqld} server gets a packet bigger than @code{max_allowed_packet} bytes, it issues a @code{Packet too large} error and closes the connection. @@ -43333,7 +43333,7 @@ properly only by replacing hardware. @cindex table is full -This error occurs in older @strong{MySQL} versions when an in-memory temporary +This error occurs in older MySQL versions when an in-memory temporary table becomes larger than @code{tmp_table_size} bytes. To avoid this problem, you can use the @code{-O tmp_table_size=#} option to @code{mysqld} to increase the temporary table size or use the SQL @@ -43343,7 +43343,7 @@ query. @xref{SET OPTION, , @code{SET OPTION}}. You can also start @code{mysqld} with the @code{--big-tables} option. This is exactly the same as using @code{SQL_BIG_TABLES} for all queries. -In @strong{MySQL} Version 3.23, in-memory temporary tables will automatically be +In MySQL Version 3.23, in-memory temporary tables will automatically be converted to a disk-based @code{MyISAM} table after the table size gets bigger than @code{tmp_table_size}. @@ -43359,7 +43359,7 @@ If you get an error for some queries of type: Can't create/write to file '\\sqla3fe_0.ism'. @end example -this means that @strong{MySQL} can't create a temporary file for the +this means that MySQL can't create a temporary file for the result set in the given temporary directory. (The above error is a typical error message on Windows, and the Unix error message is similar.) The fix is to start @code{mysqld} with @code{--tmpdir=path} or to add to your option @@ -43444,7 +43444,7 @@ If you get the error @code{Table 'xxx' doesn't exist} or @code{Can't find file: 'xxx' (errno: 2)}, this means that no table exists in the current database with the name @code{xxx}. -Note that as @strong{MySQL} uses directories and files to store databases and +Note that as MySQL uses directories and files to store databases and tables, the database and table names are @strong{case sensitive}! (On Windows the databases and tables names are not case sensitive, but all references to a given table within a query must use the same case!) @@ -43475,7 +43475,7 @@ In this case you need to recompile the client with @code{--with-charset=xxx} or with @code{--with-extra-charsets=xxx}. @xref{configure options}. -All standard @strong{MySQL} binaries are compiled with +All standard MySQL binaries are compiled with @code{--with-extra-character-sets=complex} which will enable support for all multi-byte character sets. @xref{Character sets}. @@ -43508,7 +43508,7 @@ to be. @cindex disk full @noindent -When a disk-full condition occurs, @strong{MySQL} does the following: +When a disk-full condition occurs, MySQL does the following: @itemize @bullet @item @@ -43570,7 +43570,7 @@ Exceptions to the above behaveour is when you use @code{REPAIR} or All of the above commands may use big temporary files that left to themself would cause big problems for the rest of the system. If -@strong{MySQL} gets disk full while doing any of the above operations, +MySQL gets disk full while doing any of the above operations, it will remove the big temporary files and mark the table as crashed (except for @code{ALTER TABLE}, in which the old table will be left unchanged). @@ -43579,22 +43579,22 @@ unchanged). @node Temporary files, Problems with mysql.sock, Full disk, Problems @appendixsec Where MySQL Stores Temporary Files -@strong{MySQL} uses the value of the @code{TMPDIR} environment variable as +MySQL uses the value of the @code{TMPDIR} environment variable as the pathname of the directory in which to store temporary files. If you don't -have @code{TMPDIR} set, @strong{MySQL} uses the system default, which is +have @code{TMPDIR} set, MySQL uses the system default, which is normally @file{/tmp} or @file{/usr/tmp}. If the file system containing your temporary file directory is too small, you should edit @code{safe_mysqld} to set @code{TMPDIR} to point to a directory in a file system where you have enough space! You can also set the temporary directory using the @code{--tmpdir} option to @code{mysqld}. -@strong{MySQL} creates all temporary files as hidden files. This ensures +MySQL creates all temporary files as hidden files. This ensures that the temporary files will be removed if @code{mysqld} is terminated. The disadvantage of using hidden files is that you will not see a big temporary file that fills up the file system in which the temporary file directory is located. -When sorting (@code{ORDER BY} or @code{GROUP BY}), @strong{MySQL} normally +When sorting (@code{ORDER BY} or @code{GROUP BY}), MySQL normally uses one or two temporary files. The maximum disk-space needed is: @example @@ -43606,7 +43606,7 @@ uses one or two temporary files. The maximum disk-space needed is: @code{sizeof(database pointer)} is usually 4, but may grow in the future for really big tables. -For some @code{SELECT} queries, @strong{MySQL} also creates temporary SQL +For some @code{SELECT} queries, MySQL also creates temporary SQL tables. These are not hidden and have names of the form @file{SQL_*}. @code{ALTER TABLE} creates a temporary table in the same directory as @@ -43620,7 +43620,7 @@ the original table. @cindex deletion, @code{mysql.sock} If you have problems with the fact that anyone can delete the -@strong{MySQL} communication socket @file{/tmp/mysql.sock}, you can, +MySQL communication socket @file{/tmp/mysql.sock}, you can, on most versions of Unix, protect your @file{/tmp} file system by setting the @code{sticky} bit on it. Log in as @code{root} and do the following: @@ -43641,7 +43641,7 @@ If the last permission bit is @code{t}, the bit is set. @cindex starting, @code{mysqld} @cindex @code{mysqld}, starting -The @strong{MySQL} server @code{mysqld} can be started and run by any user. +The MySQL server @code{mysqld} can be started and run by any user. In order to change @code{mysqld} to run as a Unix user @code{user_name}, you must do the following: @@ -43658,14 +43658,14 @@ the Unix @code{root} user): shell> chown -R user_name /path/to/mysql/datadir @end example -If directories or files within the @strong{MySQL} data directory are +If directories or files within the MySQL data directory are symlinks, you'll also need to follow those links and change the directories and files they point to. @code{chown -R} may not follow symlinks for you. @item Start the server as user @code{user_name}, or, if you are using -@strong{MySQL} Version 3.22 or later, start @code{mysqld} as the Unix @code{root} +MySQL Version 3.22 or later, start @code{mysqld} as the Unix @code{root} user and use the @code{--user=user_name} option. @code{mysqld} will switch to run as the Unix user @code{user_name} before accepting any connections. @@ -43684,25 +43684,25 @@ user=user_name At this point, your @code{mysqld} process should be running fine and dandy as the Unix user @code{user_name}. One thing hasn't changed, though: the contents of the permissions tables. By default (right after running the -permissions table install script @code{mysql_install_db}), the @strong{MySQL} +permissions table install script @code{mysql_install_db}), the MySQL user @code{root} is the only user with permission to access the @code{mysql} database or to create or drop databases. Unless you have changed those permissions, they still hold. This shouldn't stop you from accessing -@strong{MySQL} as the @strong{MySQL} @code{root} user when you're logged in +MySQL as the MySQL @code{root} user when you're logged in as a Unix user other than @code{root}; just specify the @code{-u root} option to the client program. -Note that accessing @strong{MySQL} as @code{root}, by supplying @code{-u -root} on the command line, has @emph{nothing} to do with @strong{MySQL} running +Note that accessing MySQL as @code{root}, by supplying @code{-u +root} on the command line, has @emph{nothing} to do with MySQL running as the Unix @code{root} user, or, indeed, as another Unix user. The access -permissions and user names of @strong{MySQL} are completely separate from +permissions and user names of MySQL are completely separate from Unix user names. The only connection with Unix user names is that if you don't provide a @code{-u} option when you invoke a client program, the client -will try to connect using your Unix login name as your @strong{MySQL} user +will try to connect using your Unix login name as your MySQL user name. If your Unix box itself isn't secured, you should probably at least put a -password on the @strong{MySQL} @code{root} users in the access tables. +password on the MySQL @code{root} users in the access tables. Otherwise, any user with an account on that machine can run @code{mysql -u root db_name} and do whatever he likes. @@ -43714,14 +43714,14 @@ root db_name} and do whatever he likes. @cindex passwords, resetting @cindex root user, password resetting -If you have forgotten the @code{root} user password for @strong{MySQL}, you +If you have forgotten the @code{root} user password for MySQL, you can restore it with the following procedure: @enumerate @item Take down the @code{mysqld} server by sending a @code{kill} (not @code{kill -9}) to the @code{mysqld} server. The pid is stored in a @code{.pid} -file, which is normally in the @strong{MySQL} database directory: +file, which is normally in the MySQL database directory: @example kill `cat /mysql-data-directory/hostname.pid` @@ -43775,7 +43775,7 @@ shell> /path/to/safe_mysqld & @tindex UMASK_DIR environment variable @tindex Environment variable, UMASK_DIR -By default @strong{MySQL} will create database and @code{RAID} +By default MySQL will create database and @code{RAID} directories with permission type 0700. You can modify this behavior by setting the @code{UMASK_DIR} variable. If you set this, new directories are created with the combined @code{UMASK} and @@ -43788,7 +43788,7 @@ shell> export UMASK_DIR shell> /path/to/safe_mysqld & @end example -In @strong{MySQL} Version 3.23.25 and above, @strong{MySQL} assumes that the +In MySQL Version 3.23.25 and above, MySQL assumes that the value for @code{UMASK} and @code{UMASK_DIR} is in octal if it starts with a zero. @@ -43800,8 +43800,8 @@ with a zero. If you get @code{ERROR '...' not found (errno: 23)}, @code{Can't open file: ... (errno: 24)}, or any other error with @code{errno 23} or -@code{errno 24} from @strong{MySQL}, it means that you haven't allocated -enough file descriptors for @strong{MySQL}. You can use the +@code{errno 24} from MySQL, it means that you haven't allocated +enough file descriptors for MySQL. You can use the @code{perror} utility to get a description of what the error number means: @@ -43868,13 +43868,13 @@ example: mysql> SELECT * FROM tbl_name WHERE date >= '1997-05-05'; @end example -As a convenience, @strong{MySQL} automatically converts a date to a number if +As a convenience, MySQL automatically converts a date to a number if the date is used in a numeric context (and vice versa). It is also smart enough to allow a ``relaxed'' string form when updating and in a @code{WHERE} clause that compares a date to a @code{TIMESTAMP}, @code{DATE}, or a @code{DATETIME} column. (Relaxed form means that any punctuation character may be used as the separator between parts. For example, @code{'1998-08-15'} -and @code{'1998#08#15'} are equivalent.) @strong{MySQL} can also convert a +and @code{'1998#08#15'} are equivalent.) MySQL can also convert a string containing no separators (such as @code{'19980815'}), provided it makes sense as a date. @@ -43884,7 +43884,7 @@ The special date @code{'0000-00-00'} can be stored and retrieved as @strong{MyODBC} Version 2.50.12 and above, because ODBC can't handle this kind of date. -Because @strong{MySQL} performs the conversions described above, the following +Because MySQL performs the conversions described above, the following statements work: @example @@ -43912,7 +43912,7 @@ mysql> SELECT idate FROM tbl_name WHERE STRCMP(idate,'19970505')=0; a string and performs a string comparison. It does not convert @code{'19970505'} to a date and perform a date comparison. -Note that @strong{MySQL} does no checking whether or not the date is +Note that MySQL does no checking whether or not the date is correct. If you store an incorrect date, such as @code{'1998-2-31'}, the wrong date will be stored. If the date cannot be converted to any reasonable value, a @code{0} is stored in the @code{DATE} field. This is mainly a speed @@ -43944,7 +43944,7 @@ the server runs, for example, in @code{safe_mysqld} or @code{mysql.server}. @cindex Chinese @cindex Big5 Chinese character encoding -By default, @strong{MySQL} searches are case-insensitive (although there are +By default, MySQL searches are case-insensitive (although there are some character sets that are never case insensitive, such as @code{czech}). That means that if you search with @code{col_name LIKE 'a%'}, you will get all column values that start with @code{A} or @code{a}. If you want to make this @@ -43956,9 +43956,9 @@ Simple comparison operations (@code{>=, >, = , < , <=}, sorting and grouping) are based on each character's ``sort value''. Characters with the same sort value (like E, e and é) are treated as the same character! -In older @strong{MySQL} versions @code{LIKE} comparisons where done on +In older MySQL versions @code{LIKE} comparisons where done on the uppercase value of each character (E == e but E <> é). In newer -@strong{MySQL} versions @code{LIKE} works just like the other comparison +MySQL versions @code{LIKE} works just like the other comparison operators. If you want a column always to be treated in case-sensitive fashion, @@ -44018,7 +44018,7 @@ mysql> SELECT * FROM my_table WHERE phone IS NULL; mysql> SELECT * FROM my_table WHERE phone = ""; @end example -In @strong{MySQL}, as in many other SQL servers, you can't index +In MySQL, as in many other SQL servers, you can't index columns that can have @code{NULL} values. You must declare such columns @code{NOT NULL}. Conversely, you cannot insert @code{NULL} into an indexed column. @@ -44084,7 +44084,7 @@ decide which rows from the result set should be used. @cindex rows, deleting @cindex tables, deleting rows -As @strong{MySQL} doesn't support sub-selects or use of more than one table +As MySQL doesn't support sub-selects or use of more than one table in the @code{DELETE} statement, you should use the following approach to delete rows from 2 related tables: @@ -44179,9 +44179,9 @@ If @code{ALTER TABLE} dies with an error like this: Error on rename of './database/name.frm' to './database/B-a.frm' (Errcode: 17) @end example -the problem may be that @strong{MySQL} has crashed in a previous @code{ALTER +the problem may be that MySQL has crashed in a previous @code{ALTER TABLE} and there is an old table named @file{A-something} or -@file{B-something} lying around. In this case, go to the @strong{MySQL} data +@file{B-something} lying around. In this case, go to the MySQL data directory and delete all files that have names starting with @code{A-} or @code{B-}. (You may want to move them elsewhere instead of deleting them.) @@ -44195,9 +44195,9 @@ directory and delete all files that have names starting with @code{A-} or @item @file{B-xxx} is deleted. @end itemize -If something goes wrong with the renaming operation, @strong{MySQL} tries to +If something goes wrong with the renaming operation, MySQL tries to undo the changes. If something goes seriously wrong (this shouldn't happen, -of course), @strong{MySQL} may leave the old table as @file{B-xxx}, but a +of course), MySQL may leave the old table as @file{B-xxx}, but a simple rename on the system level should get your data back. @@ -44283,7 +44283,7 @@ We plan to fix the above in 4.0. @appendix Environment Variables Here is a list of all the environment variables that are used directly or -indirectly by @strong{MySQL}. Most of these can also be found in other +indirectly by MySQL. Most of these can also be found in other places in this manual. Note that any options on the command line will take precedence over @@ -44292,7 +44292,7 @@ values in configuration files take precedence over values in environment variables. In many cases it's preferable to use a configure file instead of environment -variables to modify the behavior of @strong{MySQL}. @xref{Option files}. +variables to modify the behavior of MySQL. @xref{Option files}. @tindex CCX environment variable @tindex Environment variable, CCX @@ -44350,7 +44350,7 @@ variables to modify the behavior of @strong{MySQL}. @xref{Option files}. @item @code{MYSQL_PWD} @tab The default password when connecting to @code{mysqld}. Note that use of this is insecure! @item @code{MYSQL_TCP_PORT} @tab The default TCP/IP port. @item @code{MYSQL_UNIX_PORT} @tab The default socket; used for connections to @code{localhost}. -@item @code{PATH} @tab Used by the shell to finds the @strong{MySQL} programs. +@item @code{PATH} @tab Used by the shell to finds the MySQL programs. @item @code{TMPDIR} @tab The directory where temporary tables/files are created. @item @code{TZ} @tab This should be set to your local time zone. @xref{Timezone problems}. @item @code{UMASK_DIR} @tab The user-directory creation mask when creating directories. Note that this is ANDed with @code{UMASK}! @@ -44364,9 +44364,9 @@ variables to modify the behavior of @strong{MySQL}. @xref{Option files}. @node Users, MySQL customer usage, Environment variables, Top @appendix Some MySQL Users -This appendix lists some users of @strong{MySQL} that have given us permission +This appendix lists some users of MySQL that have given us permission to list them in our documentation. It is by far not a complete list, but -should give you a general idea of who uses @strong{MySQL} and what it can +should give you a general idea of who uses MySQL and what it can be used for. @appendixsec General News Sites @@ -44491,7 +44491,7 @@ An online magazine featuring music, literature, arts, and design content. @item @uref{http://pgss.iss.uw.edu.pl/en_index.ISS, Polish General Social Survey} @item @uref{http://www.expo2000.com, Expo2000} World-wide distribution of -tickets for this event is implemented using @strong{MySQL} and tcl/tk. More than +tickets for this event is implemented using MySQL and tcl/tk. More than 5000 travel agencies all over the world have access to it. @item @uref{http://www.freevote.com/, FreeVote.com is a free voting @@ -44509,7 +44509,7 @@ service with millions of users.} @itemize @bullet @item @uref{http://www.wix.com/mysql-hosting, Registry of Web providers that -support @strong{MySQL}} +support MySQL} @item @uref{http://www.yi.org/, Dynamic DNS Services} @@ -44570,8 +44570,8 @@ everybody who wants to find friends over the internet.} @c @item @uref{http://cabinboy.powersurfr.com, An Internet RFC search engine} @item @uref{http://www.dslreports.com, DSL-provider search with reviews}. -Made with @strong{MySQL} and Modperl, all pages are generated dynamically out of -the @strong{MySQL} database +Made with MySQL and Modperl, all pages are generated dynamically out of +the MySQL database @end itemize @cindex PHP, web sites @@ -44582,7 +44582,7 @@ the @strong{MySQL} database @item @uref{http://support.jgaa.com/, Jgaa's Internet - Official Support Site} -@item @uref{http://io.incluso.com, Ionline - online publication:} @strong{MySQL}, +@item @uref{http://io.incluso.com, Ionline - online publication:} MySQL, PHP, Java, Web programming, DB development @item @uref{http://www.baboo.com, BaBoo(Browse and bookmark). Free Web-based bookmark manager and Calendar} @@ -44621,9 +44621,9 @@ Ecommerce site that is selling computers. @item @uref{http://worldcommunity.com/, Online Database} -@item @uref{http://www2.dataguard.no/,DataGuard (Uses @strong{MySQL} and PHP)} +@item @uref{http://www2.dataguard.no/,DataGuard (Uses MySQL and PHP)} -@item @uref{http://wwits.net/programs/mysql.phtml, WWITS (Uses @strong{MySQL} and PHP)} +@item @uref{http://wwits.net/programs/mysql.phtml, WWITS (Uses MySQL and PHP)} @item @uref{http://www.worldcommunity.com/, WCN - The World Community Network} @@ -44694,7 +44694,7 @@ Weather World 2010 Technical Credits} @* @item @uref{http://gimp.foebud.org/registry/doc/, About The Gimp plugin registry} @item @uref{http://www.fast-inc.com/Products/Archiver/database.html, Java tool -Archiver technical detail (Slightly optimistic about @strong{MySQL} +Archiver technical detail (Slightly optimistic about MySQL ANSI-92 compliance)} @item @uref{http://www.gamesdomain.com/cheats/usrcheat.phtml, Games Domain Cheats Database} @@ -44729,7 +44729,7 @@ ANSI-92 compliance)} @item @uref{http://www.nbi.nl, Elsevier Bussines Information} -@item @uref{http://vaccination.medicallink.se/, Medical Links (Using ColdFusion and @strong{MySQL})} +@item @uref{http://vaccination.medicallink.se/, Medical Links (Using ColdFusion and MySQL)} @item @uref{http://www.joblink-usa.com, Search for jobs & people at JobLink-USA} @@ -44782,15 +44782,15 @@ Send any additions to this list to @email{webmaster@@mysql.com}. @appendix MySQL customer usage The section 'Some MySQL Users' contains a lot of different links to -@strong{MySQL} users but doesn't provide that much information about how -they are using @strong{MySQL}. @xref{Users}. This manual section is to -give you an idea of how other @strong{MySQL} users are using -@strong{MySQL} to solve their problems. +MySQL users but doesn't provide that much information about how +they are using MySQL. @xref{Users}. This manual section is to +give you an idea of how other MySQL users are using +MySQL to solve their problems. This manual section is very new and we plan to add more stories here shortly. If you are interested in contributing of how you use -@strong{MySQL} in a unique environment or have success store about how you -use @strong{MySQL}, you can write to @code{docs@@mysql.com} with +MySQL in a unique environment or have success store about how you +use MySQL, you can write to @code{docs@@mysql.com} with subject @code{Success:}. Note that as we are very busy it may take some time before you get some feedback for your story. @@ -44806,7 +44806,7 @@ as soon as I'll move to 2.4 kernel with large files. Currently I have to delete much of logs for large sites to hold table sizes in 2Gb. @item -@strong{Texas Instruments} is using @strong{MySQL} for handling tables +@strong{Texas Instruments} is using MySQL for handling tables that contain up to 2,000 million rows in a validation regression database. @end itemize @@ -44816,13 +44816,13 @@ that contain up to 2,000 million rows in a validation regression database. @node Contrib, Credits, MySQL customer usage, Top @appendix Contributed Programs -Many users of @strong{MySQL} have contributed @emph{very} useful support +Many users of MySQL have contributed @emph{very} useful support tools and add-ons. @ifclear web A list of what is available at @uref{http://www.mysql.com/Downloads/Contrib/} (or any mirror) is shown below. -If you want to build @strong{MySQL} support for the Perl @code{DBI}/@code{DBD} +If you want to build MySQL support for the Perl @code{DBI}/@code{DBD} interface, you should fetch the @code{Data-Dumper}, @code{DBI}, and @code{Msql-Mysql-modules} files and install them. @xref{Perl support}. @@ -44842,13 +44842,13 @@ older Perl installations. Perl @code{DBI} module. @item @uref{http://www.mysql.com/Downloads/Contrib/KAMXbase1.2.tar.gz,KAMXbase1.2.tar.gz} -Convert between @file{.dbf} files and @strong{MySQL} tables. Perl +Convert between @file{.dbf} files and MySQL tables. Perl module written by Pratap Pereira @email{pereira@@ee.eng.ohio-state.edu}, extended by Kevin A. McGrail @email{kmcgrail@@digital1.peregrinehw.com}. This converter can handle MEMO fields. @item @uref{http://www.mysql.com/Downloads/Contrib/Msql-Mysql-modules-1.2216.tar.gz, Msql-Mysql-modules-1.2216.tar.gz} -Perl @code{DBD} module to access mSQL and @strong{MySQL} databases. +Perl @code{DBD} module to access mSQL and MySQL databases. @item @uref{http://www.mysql.com/Downloads/Contrib/Data-ShowTable-3.3.tar.gz, Data-ShowTable-3.3.tar.gz} Perl @code{Data-ShowTable} module. Useful with @code{DBI}/@code{DBD} support. @@ -44863,12 +44863,12 @@ approximately 20% faster than regular DBI. @item JDBC @itemize @bullet @item @uref{http://www.mysql.com/Downloads/Contrib/mm.mysql.jdbc-1.2c.tar.gz, mm.mysql.jdbc-1.2c.tar.gz} -The mm JDBC driver for @strong{MySQL}. This is a production release +The mm JDBC driver for MySQL. This is a production release and is actively developed. By Mark Matthews (@email{mmatthew@@ecn.purdue.edu}). @item @uref{http://www.mysql.com/Downloads/Contrib/mm.mysql.jdbc-2.0pre5.tar.gz, mm.mysql.jdbc-2.0pre5.tar.gz} -The mm JDBC driver for @strong{MySQL}. This is a pre-release beta version +The mm JDBC driver for MySQL. This is a pre-release beta version and is actively developed. By Mark Matthews (@email{mmatthew@@ecn.purdue.edu}). The two drivers above have an LGPL @@ -44887,7 +44887,7 @@ private and educational use. (Not supported anymore.) @c no answer from server 990830 @c You can always find the latest driver at @uref{http://www.voicenet.com/~zellert/tjFM/}. @item @uref{http://www.mysql.com/Downloads/Contrib/pmdamysql.tgz,pmdamysql.tgz} -A @strong{MySQL} PMDA. Provides @strong{MySQL} server status and configuration +A MySQL PMDA. Provides MySQL server status and configuration variables. @end itemize @@ -44895,7 +44895,7 @@ variables. @item OLEDB @itemize @bullet @item @uref{http://www.mysql.com/Downloads/Win32/MyOLEDB.exe, MyOLEDB.exe} -OLEDB handler for @strong{MySQL}. By SWsoft. +OLEDB handler for MySQL. By SWsoft. @item @uref{http://www.mysql.com/Downloads/Win32/MySamples.zip, MySamples.zip} Examples and documentation for MyOLEDB. By SWsoft. @item @uref{http://www.mysql.com/Downloads/Win32/Myoledb.zip, Myoledb.zip} @@ -44911,19 +44911,19 @@ Static MyODBC library used for build MyOLEDB. Based on MyODBC code. @itemize @bullet @item @uref{http://www.mysql.com/Downloads/Contrib/mysql-c++-0.02.tar.gz, mysql-c++-0.02.tar.gz} -@strong{MySQL} C++ wrapper library. By Roland Haenel, +MySQL C++ wrapper library. By Roland Haenel, @email{rh@@ginster.net}. @item @uref{http://www.mysql.com/Downloads/Contrib/MyDAO.tar.gz, MyDAO} -@strong{MySQL} C++ API. By Satish @email{spitfire@@pn3.vsnl.net.in}. Inspired +MySQL C++ API. By Satish @email{spitfire@@pn3.vsnl.net.in}. Inspired by Roland Haenel's C++ API and Ed Carp's MyC library. @item @uref{http://www.mysql.com/download_mysql++.html, mysql++} -@strong{MySQL} C++ API (More than just a wrapper library.) Originally by -@email{kevina@@clark.net}. Nowadays maintained by Sinisa at @strong{MySQL AB}. +MySQL C++ API (More than just a wrapper library.) Originally by +@email{kevina@@clark.net}. Nowadays maintained by Sinisa at MySQL AB. @item @uref{http://nelsonjr.homepage.com/NJrAPI,NJrAPI} -A C++ database independent library that supports @strong{MySQL}. +A C++ database independent library that supports MySQL. @end itemize @cindex Delphi @@ -44939,11 +44939,11 @@ Delphi interface to @code{libmysql.dll}, by @email{bsilva@@umesd.k12.or.us}. @item @uref{http://www.mysql.com/Downloads/Contrib/Udmysel.pas, Udmysql.pas} A wrapper for libmysql.dll for usage in Delphi. By Reiner Sombrowsky. -@item @uref{http://www.fichtner.net/delphi/mysql.delphi.phtml, A Delphi interface to @strong{MySQL}.} +@item @uref{http://www.fichtner.net/delphi/mysql.delphi.phtml, A Delphi interface to MySQL.} With source code. By Matthias Fichtner. @item @uref{http://www.productivity.org/projects/mysql/, @strong{TmySQL} -A library to use @strong{MySQL} with Delphi}. +A library to use MySQL with Delphi}. @item @uref{http://www.geocities.com/CapeCanaveral/2064/mysql.html, Delphi TDataset-component}. @item @@ -44951,18 +44951,18 @@ A library to use @strong{MySQL} with Delphi}. @end itemize @item @uref{http://www.mysql.com/Downloads/Contrib/mysql-ruby-2.2.0.tar.gz, mysql-ruby-2.2.0.tar.gz} -@strong{MySQL} Ruby module. By TOMITA Masahiro @email{tommy@@tmtm.org} +MySQL Ruby module. By TOMITA Masahiro @email{tommy@@tmtm.org} @uref{http://www.netlab.co.jp/ruby/. Ruby} is an Object-Oriented Interpreter Language. @item @uref{http://www.mysql.com/Downloads/Contrib/JdmMysqlDriver-0.1.0.tar.gz,JdmMysqlDriver-0.1.0.tar.gz} -A VisualWorks 3.0 Smalltalk driver for @strong{MySQL}. By +A VisualWorks 3.0 Smalltalk driver for MySQL. By @email{joshmiller@@earthlink.net}. @item @uref{http://www.mysql.com/Downloads/Contrib/Db.py, Db.py} Python module with caching. By @email{gandalf@@rosmail.com}. @item @uref{http://www.mysql.com/Downloads/Contrib/MySQLmodule-1.4.tar.gz, MySQLmodule-1.4.tar.gz} -Python interface for @strong{MySQL}. By Joseph Skinner @email{joe@@earthlight.co.nz}. Modified by Joerg Senekowitsch @email{senekow@@ibm.net}. +Python interface for MySQL. By Joseph Skinner @email{joe@@earthlight.co.nz}. Modified by Joerg Senekowitsch @email{senekow@@ibm.net}. @item @uref{http://www.mysql.com/Downloads/Contrib/MySQL-python-0.3.0.tar.gz, MySQL-python-0.3.0.tar.gz} MySQLdb Python is an DB-API v2.0-compliant interface to MySQL. Transactions @@ -44977,7 +44977,7 @@ Check @uref{http://boojum.hut.fi/~kuutela/mysqlmex.html,mysqlmex.html} for more information. @item @uref{http://www.mysql.com/Downloads/Contrib/mysqltcl-1.53.tar.gz, mysqltcl-1.53.tar.gz} -Tcl interface for @strong{MySQL}. Based on @file{msqltcl-1.50.tar.gz}. +Tcl interface for MySQL. Based on @file{msqltcl-1.50.tar.gz}. Updated by Tobias Ritzau, @email{tobri@@ida.liu.se}. @item @uref{http://www.mysql.com/Downloads/Contrib/MyC-0.1.tar.gz, MyC-0.1.tar.gz} @@ -44995,12 +44995,12 @@ implementing one file for the new backend without making any changes to your applications. By @email{damian@@cablenet.net}. @item @uref{http://www.mysql.com/Downloads/Contrib/DbFramework-1.10.tar.gz, DbFramework-1.10.tar.gz} -DbFramework is a collection of classes for manipulating @strong{MySQL} +DbFramework is a collection of classes for manipulating MySQL databases. The classes are loosely based on the CDIF Data Model Subject Area. By Paul Sharpe @email{paul@@miraclefish.com}. @item @uref{http://www.mysql.com/Downloads/Contrib/pike-mysql-1.4.tar.gz, pike-mysql-1.4.tar.gz} -@strong{MySQL} module for pike. For use with the Roxen web server. +MySQL module for pike. For use with the Roxen web server. @item @uref{http://www.mysql.com/Downloads/Contrib/squile.tar.gz, squile.tar.gz} Module for @code{guile} that allows @code{guile} to interact with SQL @@ -45024,27 +45024,27 @@ and remove the DSN registry file for the MyODBC driver in Coldfusion applications. By Miguel Angel Solórzano. @item @uref{http://www.mysql.com/Downloads/Contrib/MySQL-ADA95_API.zip, MySQL-ADA95_API.zip} -An ADA95 interface to the @strong{MySQL} API. By Francois Fabien. +An ADA95 interface to the MySQL API. By Francois Fabien. @item @uref{http://www.mysql.com/Downloads/Contrib/MyTool-DLL_for_VB_and_MySQL.zip, MyTool-DLL_for_VB_and_MySQL.zip} -A DLL with @strong{MySQL} C API for Visual Basic. +A DLL with MySQL C API for Visual Basic. By Ken Menzel @email{kenm@@icarz.com}. @item @uref{http://www.mysql.com/Downloads/Contrib/MYSQLX.EXE, MYSQL.EXE} -@strong{MySQL} ActiveX Object for directly accessing your @strong{MySQL} +MySQL ActiveX Object for directly accessing your MySQL servers from IIS/ASP, VB, VC++ skipping the slower ODBC methods. Fully -updatable, multithreaded with full support for all @strong{MySQL} fieldtypes +updatable, multithreaded with full support for all MySQL fieldtypes (version 2001.1.1). By SciBit @uref{http://www.scibit.com/}. @item @uref{http://www.fastflow.it/mylua/, MyLUA home page} -How to use the LUA language to write @strong{MySQL} @code{PROCEDURE} that can +How to use the LUA language to write MySQL @code{PROCEDURE} that can be loaded runtime. @itemize @bullet @item @uref{http://www.mysql.com/Downloads/Contrib/lua-4.0.tar.gz, Lua 4.0} LUA 4.0 @item @uref{http://www.mysql.com/Downloads/Contrib/mylua-3.23.32.1.tar.gz, mylua-3.23.32.1.tar.gz} -Patch for @strong{MySQL} 3.23.32 to use LUA 4.0. By Cristian Giussani. +Patch for MySQL 3.23.32 to use LUA 4.0. By Cristian Giussani. @end itemize @item @uref{http://www.mysql.com/Downloads/Contrib/patched_myodbc.zip, patched_myodbc.zip} @@ -45063,11 +45063,11 @@ Freeware JDBC client to graphically visualize the data and structure of several databases simultaneously. By Innovative-IT Development AB. @item @uref{http://www.mysql.com/downloads/gui-clients.html, MySQLGUI} -The @strong{MySQL} GUI client homepage. By Sinisa at @strong{MySQL AB}. +The MySQL GUI client homepage. By Sinisa at MySQL AB. @item @uref{http://www.mysql.com/Downloads/Contrib/mysql_navigator_0.9.0.tar.gz, MySQL navigator 0.9} -MySQL Navigator is a @strong{MySQL} database server GUI client program. The purpose -of MySQL Navigator is to provide a useful client interface to @strong{MySQL} +MySQL Navigator is a MySQL database server GUI client program. The purpose +of MySQL Navigator is to provide a useful client interface to MySQL database servers, whilst supporting multiple operating systems and languages. You can currently import/export database, enter queries, get result sets, edit scripts, run scripts, add, alter, and delete users, @@ -45075,14 +45075,14 @@ and retrieve client and server information. Uses QT 2.2. GPL @uref{http://sql.kldp.org/mysql, Home page for MySQL Navigator}. @item @uref{http://www.mysql.com/Downloads/Win32/secman.zip, MySQL Security GUI} -A user and security management GUI for @strong{MySQL} on Windows. +A user and security management GUI for MySQL on Windows. By Martin Jeremic. @uref{http://jsoft.webjump.com/, Home page for MySQL Security GUI}. @item @uref{http://www.mysql.com/Downloads/Contrib/kmysqladmin-0.4.1.tar.gz, kmysqladmin-0.4.1.tar.gz}. @item @uref{http://www.mysql.com/Downloads/Contrib/kmysqladmin-0.4.1-1.src.rpm, kmysqladmin-0.4.1-1.src.rpm}. @item @uref{http://www.mysql.com/Downloads/Contrib/kmysqladmin-0.4.1-1.i386.rpm, kmysqladmin-0.4.1-1.i386.rpm} -An administration tool for the @strong{MySQL} server using QT / KDE. Tested +An administration tool for the MySQL server using QT / KDE. Tested only on Linux. @item @uref{http://www.mysql.com/Downloads/Contrib/mysql-admin-using-java+swing.tar.gz, Java client using Swing} By Fredy Fischer, @email{se-afs@@dial.eunet.ch}. @@ -45090,7 +45090,7 @@ You can always find the latest version @uref{http://www.trash.net/~ffischer/admin/index.html, here}. @item @uref{http://www.mysql.com/Downloads/Win32/MySQL-Maker-1.0.zip,MySQL-Maker 1.0}. -Shareware @strong{MySQL} client for Windows. It's a WYSIWYG tool which allows +Shareware MySQL client for Windows. It's a WYSIWYG tool which allows you to create, change and delete databases and tables. You can change field - structure and add, change and delete data in these tables directly without ODBC-driver. @@ -45101,18 +45101,18 @@ Windows GUI (binary only) to administrate a database, by David B. Mansel, @email{david@@zhadum.org}. @item @uref{http://home.online.no/~runeberg/myqa, MyQA} -is a Linux-based query client for the @strong{MySQL} database server. MyQA +is a Linux-based query client for the MySQL database server. MyQA lets you enter SQL queries, execute them, and view the results, all in a graphical user interface. The GUI is roughly similar to that of the 'Query Analyzer' client that comes with MS SQL Server. @item @uref{http://members.xoom.com/_opex_/mysqlmanager/index.html, MySQL Manager} -a graphical @strong{MySQL} server manager for @strong{MySQL} server written in Java, for Windows +a graphical MySQL server manager for MySQL server written in Java, for Windows @item @uref{http://www.mysql.com/Downloads/Win32/netadmin.zip, netadmin.zip} -An administrator tool for @strong{MySQL} on Windows 95/98 and Windows NT -4.0. Only tested with @strong{MySQL} Versions 3.23.5 - 3.23.7. Written +An administrator tool for MySQL on Windows 95/98 and Windows NT +4.0. Only tested with MySQL Versions 3.23.5 - 3.23.7. Written using the Tmysql components. You can write queries and show tables, indexes, table syntax, and @@ -45124,7 +45124,7 @@ URL @url{http://www.it-netservice.de/pages/software/index.html}. @item @uref{http://www.mysql.com/Downloads/Win32/netadmin2.zip, netadmin2.zip} New version of netadmin. See above for details. -@item @uref{http://www.mysql.com/Downloads/Win32/ARTADMIN203.EXE,Atronic's @strong{MySQL} client for Windows 2.0.3.0}. +@item @uref{http://www.mysql.com/Downloads/Win32/ARTADMIN203.EXE,Atronic's MySQL client for Windows 2.0.3.0}. Home page for this can be found at: @uref{http://www.artronic.hr}. @item @uref{http://www.mysql.com/Downloads/Win32/mysqlfront.zip, mysqlfront} @@ -45137,41 +45137,41 @@ import-/export-files. (Freeware). By Ansgar Becker. @item @uref{http://bardo.hyperlink.cz/mysqlmon,a light weight GUI client for Windows}. @item @uref{http://dbtools.vila.bol.com.br/, Dbtools} -A tool to manage @strong{MySQL} databases. Currently only for Windows. +A tool to manage MySQL databases. Currently only for Windows. Some features: @itemize @bullet @item Manage servers, databases, tables, columns, indexes, and users @item Import wizard to import structure and data from MS Access, MS Excel, Dbase, FoxPro, Paradox, and ODBC Databases. @item @uref{http://www.mysql.com/Downloads/Contrib/KMYENG113.zip,KMYENG113.zip} -An administrator GUI for @strong{MySQL}. Works only on windows, no source. +An administrator GUI for MySQL. Works only on windows, no source. Available in English and Japanese. By Mitunobu Kaneko. Home page: @uref{http://sql.jnts.ne.jp/} @end itemize @item @uref{http://www.mysql.com/Downloads/Contrib/xmysqladmin-1.0.tar.gz, xmysqladmin-1.0.tar.gz} -An X-based front end to the @strong{MySQL} database engine. It allows reloads, +An X-based front end to the MySQL database engine. It allows reloads, status check, process control, myisamchk, grant/revoke privileges, creating databases, dropping databases, create, alter, browse, and drop tables. Originally by Gilbert Therrien, @email{gilbert@@ican.net} but -now in public domain and supported by @strong{MySQL AB}. +now in public domain and supported by MySQL AB. @item @uref{http://www.mysql.com/Downloads/Contrib/xmysql-1.9.tar.gz, xmysql-1.9.tar.gz}. @item @uref{http://web.wt.net/~dblhack, xmysql home page} -A front end to the @strong{MySQL} database engine. It allows for simple +A front end to the MySQL database engine. It allows for simple queries and table maintenance, as well as batch queries. By Rick Mehalick, @email{dblhack@@wt.net}. Requires @uref{http://bragg.phys.uwm.edu/xforms,xforms 0.88} to work. @item @uref{http://www.tamos.net/sw/dbMetrix,dbMetrix} An open source client for exploring databases and executing SQL. Supports -@strong{MySQL}, Oracle, PostgreSQL, and mSQL. +MySQL, Oracle, PostgreSQL, and mSQL. @item @uref{http://www.multimania.com/bbrox/GtkSQL,GtkSQL} -A query tool for @strong{MySQL} and PostgreSQL. +A query tool for MySQL and PostgreSQL. @item @uref{http://dbman.linux.cz/,dbMan} A query tool written in Perl. Uses DBI and Tk. @item @uref{http://www.mysql.com/Downloads/Win32/Msc201.EXE, Mascon 202} @item @uref{http://www.mysql.com/Downloads/Win32/FrMsc202.EXE, Free Mascon 202} -Mascon is a powerful Win32 GUI for the administering @strong{MySQL} server +Mascon is a powerful Win32 GUI for the administering MySQL server databases. Mascon's features include visual table design, connections to multiple servers, data and blob editing of tables, security setting, SQL color coding, dump functionality and much more. @@ -45186,7 +45186,7 @@ databases written with Java 2. JRetriever displays database tables/views in a Windows explorer-like front end. Users can retrieve data either by clicking on the table folder or by composing their own SQL statements with our built-in SQL editor. The tool has been tested with -Oracle 8 and @strong{MySQL} as the back-end databases. It requires JDK 1.3 from +Oracle 8 and MySQL as the back-end databases. It requires JDK 1.3 from JavaSoft. @item @uref{http://www.jetools.com/products/databrowser/, DataBrowser} The DataBrowser is a cross-database, cross-platform data access tool. It is more @@ -45212,18 +45212,18 @@ by Query Analysis. @item Web Clients @itemize @minus @item @uref{http://www.mysql.com/Downloads/Contrib/mysqladmin-atif-1.0.tar.gz, mysqladmin-atif-1.0.tar.gz} -WWW @strong{MySQL} administrator for the @code{user,} @code{db} and +WWW MySQL administrator for the @code{user,} @code{db} and @code{host} tables. By Tim Sailer, modified by Atif Ghaffar @email{aghaffar@@artemedia.ch}. @item @uref{http://www.mysql.com/Downloads/Contrib/mysql-webadmin-1.0a8-rz.tar.gz, mysql-webadmin-1.0a8-rz.tar.gz} -A tool written in PHP-FI to administrate @strong{MySQL} databases +A tool written in PHP-FI to administrate MySQL databases remotely over the web within a Web-Browser. By Peter Kuppelwieser, @email{peter.kuppelwieser@@kantea.it}. Updated by Wim Bonis, @email{bonis@@kiss.de}. Not maintained anymore! @item @uref{http://www.mysql.com/Downloads/Contrib/mysqladm.tar.gz, mysqladm.tar.gz} -@strong{MySQL} Web Database Administration written in Perl. By Tim Sailer. +MySQL Web Database Administration written in Perl. By Tim Sailer. @item @uref{http://www.mysql.com/Downloads/Contrib/mysqladm-2.tar.gz, mysqladm-2.tar.gz} Updated version of @file{mysqladm.tar.gz}, by High Tide. @@ -45234,16 +45234,16 @@ newest version from @uref{http://civeng.com/sqldemo/, the home site}. @item @uref{http://www.mysql.com/Downloads/Contrib/myadmin-0.4.tar.gz, myadmin-0.4.tar.gz}. @item @uref{http://myadmin.cheapnet.net/, MyAdmin home page} -A Web-based @strong{MySQL} administrator by Mike Machado. +A Web-based MySQL administrator by Mike Machado. @item @uref{http://www.mysql.com/Downloads/Contrib/phpMyAdmin_2.0.1.tar.gz,phpMyAdmin_2.0.1.tar.gz} -A set of PHP3-scripts to adminstrate @strong{MySQL} over the WWW. +A set of PHP3-scripts to adminstrate MySQL over the WWW. @item @uref{http://www.phpwizard.net/projects/phpMyAdmin/, phpMyAdmin home page} A PHP3 tool in the spirit of mysql-webadmin, by Tobias Ratschiller, tobias@@dnet.it. @item @uref{http://www.mysql.com/Downloads/Contrib/useradm.tar.gz, useradm.tar.gz} -@strong{MySQL} administrator in PHP. By Ofni Thomas +MySQL administrator in PHP. By Ofni Thomas @email{othomas@@vaidsystems.com}. @item @uref{http://gossamer-threads.com/perl/mysqlman/mysql.cgi, MySQLMan} @@ -45258,10 +45258,10 @@ database. By Tomas Zeman. @uref{http://worldcommunity.com/opensource/futuresql, FutureSQL Web Database Administration Tool}. FutureSQL by Peter F. Brown, is a free, open source rapid application development Web database administration tool, written in Perl, -using @strong{MySQL}. It uses @code{DBI:DBD} and @code{CGI.pm}. +using MySQL. It uses @code{DBI:DBD} and @code{CGI.pm}. FutureSQL allows one to easily set up config files to view, edit, delete, -and otherwise process records from a @strong{MySQL} database. It uses a data +and otherwise process records from a MySQL database. It uses a data dictionary, configuration files and templates, and allows "pre-processing" and "post-processing" on both fields, records, and operations. @end itemize @@ -45273,12 +45273,12 @@ and "post-processing" on both fields, records, and operations. @itemize @bullet @item @uref{http://www.mysql.com/Downloads/Contrib/mod_mysql_include_1.0.tar.gz, mod_mysql_include_1.0.tar.gz} -Apache module to include HTML from @strong{MySQL} queries into your pages, +Apache module to include HTML from MySQL queries into your pages, and run update queries. Originally written to implement a simple fast low-overhead banner-rotation system. By Sasha Pachev. @item @uref{http://htcheck.sourceforge.net, htCheck} - URL checker with -@strong{MySQL} backend. Spidered URLs can later be queried using SQL to retrieve +MySQL backend. Spidered URLs can later be queried using SQL to retrieve various kinds of information, eg. broken links. Written by Gabriele Bartolini. @item @uref{http://www.odbsoft.com/cook/sources.htm} @@ -45289,7 +45289,7 @@ interface to a SQL database (query, add, update, delete) without any programming! By Marc Beneteau, @email{marc@@odbsoft.com}. @item @uref{http://www.mysql.com/Downloads/Contrib/sqlhtml.tar.gz, sqlhtml.tar.gz} -SQL/HTML is an HTML database manager for @strong{MySQL} using @code{DBI} 1.06. +SQL/HTML is an HTML database manager for MySQL using @code{DBI} 1.06. @item @uref{http://www.mysql.com/Downloads/Contrib/udmsearch-3.0.23.tar.gz, UdmSearch 3.0.23 (stable version)}. @item @uref{http://www.mysql.com/Downloads/Contrib/mnogosearch-3.1.12.tar.gz, mnogosearch 3.1.12 (development but recommended version)}. @@ -45305,7 +45305,7 @@ With this you can write HTML files with inclusions of Tcl code. By @item @uref{http://www.mysql.com/Downloads/Contrib/www-sql-0.5.7.lsm, www-sql-0.5.7.lsm}. @item @uref{http://www.mysql.com/Downloads/Contrib/www-sql-0.5.7.tar.gz, www-sql-0.5.7.tar.gz} A CGI program that parses an HTML file containing special tags, parses -them, and inserts data from a @strong{MySQL} database. +them, and inserts data from a MySQL database. @item @uref{http://www.mysql.com/Downloads/Contrib/genquery.zip, genquery.zip} Perl SQL database interface package for html. @@ -45327,7 +45327,7 @@ Full-text searching with Perl on @code{BLOB}/@code{TEXT} columns by Daniel Koch. @itemize @bullet @item @uref{http://www.mysql.com/Downloads/super-smack/super-smack-1.0.tar.gz, super-smack} -Multi-threaded benchmarking tool for @strong{MySQL} and +Multi-threaded benchmarking tool for MySQL and @strong{PostgreSQL}. Written in C++. Easy to extend to support other databases that have C/C++ client libraries. By Sasha Pachev. @end itemize @@ -45338,7 +45338,7 @@ databases that have C/C++ client libraries. By Sasha Pachev. @itemize @bullet @item @uref{http://www.mysql.com/Downloads/Contrib/ascend-radius-mysql-0.7.2.patch.gz,ascend-radius-mysql-0.7.2.patch.gz} -This is an authentication and logging patch using @strong{MySQL} for +This is an authentication and logging patch using MySQL for Ascend-Radius. By @email{takeshi@@SoftAgency.co.jp}. @item @uref{http://www.mysql.com/Downloads/Contrib/icradius-0.10.tar.gz, icradius 0.10} @@ -45346,16 +45346,16 @@ Ascend-Radius. By @email{takeshi@@SoftAgency.co.jp}. @item @uref{http://www.mysql.com/Downloads/Contrib/checkpassword-0.81-mysql-0.6.6.patch.gz, checkpassword-0.81-mysql-0.6.6.patch.gz} -@strong{MySQL} authentication patch for QMAIL and checkpassword. These are -useful for management user (mail, pop account) by @strong{MySQL}. +MySQL authentication patch for QMAIL and checkpassword. These are +useful for management user (mail, pop account) by MySQL. By @email{takeshi@@SoftAgency.co.jp}. @item @uref{http://www.mysql.com/Downloads/Contrib/jradius-diff.gz, jradius-diff.gz} -@strong{MySQL} support for Livingston's Radius 2.01. Authentication and +MySQL support for Livingston's Radius 2.01. Authentication and Accounting. By Jose de Leon, @email{jdl@@thevision.net}. @item @uref{http://www.mysql.com/Downloads/Contrib/mod_auth_mysql-2.20.tar.gz, mod_auth_mysql-2.20.tar.gz} -Apache authentication module for @strong{MySQL}. By Zeev Suraski, +Apache authentication module for MySQL. By Zeev Suraski, @email{bourbon@@netvision.net.il}. @c @strong{Please} register this module at: @@ -45364,13 +45364,13 @@ Apache authentication module for @strong{MySQL}. By Zeev Suraski, @c encourage further development of this module! @item @uref{http://www.mysql.com/Downloads/Contrib/mod_log_mysql-1.05.tar.gz, mod_log_mysql-1.05.tar.gz} -@strong{MySQL} logging module for Apache. By Zeev Suraski, +MySQL logging module for Apache. By Zeev Suraski, @email{bourbon@@netvision.net.il}. @item @uref{http://www.mysql.com/Downloads/Contrib/mypasswd-2.0.tar.gz, mypasswd-2.0.tar.gz} Extra for @code{mod_auth_mysql}. This is a little tool that allows you to add/change user records storing group and/or password entries in -@strong{MySQL} tables. By Harry Brueckner, @email{brueckner@@respublica.de}. +MySQL tables. By Harry Brueckner, @email{brueckner@@respublica.de}. @item @uref{http://www.mysql.com/Downloads/Contrib/mysql-passwd.README, mysql-passwd.README}. @item @uref{http://www.mysql.com/Downloads/Contrib/mysql-passwd-1.2.tar.gz, mysql-passwd-1.2.tar.gz} @@ -45378,14 +45378,14 @@ Extra for @code{mod_auth_mysql}. This is a two-part system for use with @code{mod_auth_mysql}. @item @uref{http://www.mysql.com/Downloads/Contrib/pam_mysql.tar.gz, pam_mysql.tar.gz} -This module authenticates users via @code{pam}, using @strong{MySQL}. +This module authenticates users via @code{pam}, using MySQL. @item @uref{http://www.mysql.com/Downloads/Contrib/nsapi_auth_mysql.tar, nsapi_auth_mysql.tar} Netscape Web Server API (NSAPI) functions to authenticate (BASIC) users -against @strong{MySQL} tables. By Yuan John Jiang. +against MySQL tables. By Yuan John Jiang. @item @uref{http://www.mysql.com/Downloads/Contrib/qmail-1.03-mysql-0.6.6.patch.gz,qmail-1.03-mysql-0.6.6.patch.gz} -Patch for qmail to authenticate users from a @strong{MySQL} table. +Patch for qmail to authenticate users from a MySQL table. By @email{takeshi@@SoftAgency.co.jp}. @item @uref{http://www.mysql.com/Downloads/Contrib/proftpd-1.2.0rc2-fix-mysql.patch, proftpd-1.2.0rc2-fix-mysql.patch} @@ -45406,23 +45406,23 @@ Converter from MS-SQL to MySQL. By Michael Kofler. @uref{http://www.kofler.cc/mysql/mssql2mysql.html, mssql2mysql home page}. @item @uref{http://www.mysql.com/Downloads/Contrib/dbf2mysql-1.14.tar.gz, dbf2mysql-1.14.tar.gz} -Convert between @file{.dbf} files and @strong{MySQL} tables. By Maarten +Convert between @file{.dbf} files and MySQL tables. By Maarten Boekhold (@email{boekhold@@cindy.et.tudelft.nl}), William Volkman, and Michael Widenius. This converter includes rudimentary read-only support for MEMO fields. @item @uref{http://www.mysql.com/Downloads/Contrib/dbf2mysql-1.13.tgz, dbf2mysql-1.13.tgz} -Convert between @file{.dbf} files and @strong{MySQL} tables. By Maarten +Convert between @file{.dbf} files and MySQL tables. By Maarten Boekhold, @email{boekhold@@cindy.et.tudelft.nl}, and Michael Widenius. This converter can't handle MEMO fields. @item @uref{http://www.mysql.com/Downloads/Contrib/dbf2mysql.zip, dbf2mysql.zip} -Convert between FoxPro @file{.dbf} files and @strong{MySQL} tables on Windows. +Convert between FoxPro @file{.dbf} files and MySQL tables on Windows. By Alexander Eltsyn, @email{ae@@nica.ru} or @email{ae@@usa.net}. @item @uref{http://www.mysql.com/Downloads/Contrib/dbf2sql.zip, dbf2sql.zip} Short and simple prg that can help you transport your data from foxpro -table into @strong{MySQL} table. By Danko Josic. +table into MySQL table. By Danko Josic. @item @uref{http://www.mysql.com/Downloads/Contrib/dump2h-1.20.gz, dump2h-1.20.gz} Convert from @code{mysqldump} output to a C header file. By Harry Brueckner, @@ -45445,22 +45445,22 @@ NOTE: Doesn't work with Access2! @item @uref{http://www.mysql.com/Downloads/Contrib/importsql.txt, importsql.txt} A script that does the exact reverse of @code{exportsql.txt}. That is, -it imports data from @strong{MySQL} into an Access database via +it imports data from MySQL into an Access database via ODBC. This is very handy when combined with exportsql, because it lets you use Access for all DB design and administration, and synchronize with -your actual @strong{MySQL} server either way. Free of charge. See +your actual MySQL server either way. Free of charge. See @uref{http://www.netdive.com/freebies/importsql/} for any updates. Created by Laurent Bossavit of NetDIVE. @strong{NOTE:} Doesn't work with Access2! @item @uref{http://www.mysql.com/Downloads/Contrib/mdb2sql.bas, mdb2sql.bas} -Converter from Access97 to @strong{MySQL} by Moshe Gurvich. +Converter from Access97 to MySQL by Moshe Gurvich. @item @uref{http://www.mysql.com/Downloads/Contrib/msql2mysqlWrapper-1.0.tgz, msql2mysqlWrapper 1.0} -A C wrapper from @code{mSQL} to @strong{MySQL}. By @email{alfred@@sb.net} +A C wrapper from @code{mSQL} to MySQL. By @email{alfred@@sb.net} @item @uref{http://www.mysql.com/Downloads/Contrib/sqlconv.pl, sqlconv.pl} -A simple script that can be used to copy fields from one @strong{MySQL} table +A simple script that can be used to copy fields from one MySQL table to another in bulk. Basically, you can run @code{mysqldump} and pipe it to the @code{sqlconv.pl} script. The script will parse through the @code{mysqldump} output and will rearrange the fields so they can be @@ -45469,14 +45469,14 @@ table for a different site you are working on, but the table is just a bit different (that is - fields in different order, etc.). By Steve Shreeve. @item @uref{http://www.mysql.com/Downloads/Contrib/oracledump, oracledump} -Perl program to convert Oracle databases to @strong{MySQL}. Has same +Perl program to convert Oracle databases to MySQL. Has same output format as mysqldump. By Johan Andersson. @item @uref{http://www.mysql.com/Downloads/Contrib/excel2mysql, excel2mysql} -Perl program to import Excel spreadsheets into a @strong{MySQL} database. By Stephen Hurd @email{shurd@@sk.sympatico.ca} +Perl program to import Excel spreadsheets into a MySQL database. By Stephen Hurd @email{shurd@@sk.sympatico.ca} @item @uref{http://www.mysql.com/Downloads/Contrib/T2S_100.ZIP, T2S_100.ZIP}. -Windows program to convert text files to @strong{MySQL} databases. By +Windows program to convert text files to MySQL databases. By Asaf Azulay. @end itemize @@ -45487,13 +45487,13 @@ Asaf Azulay. @item @uref{http://www.mysql.com/Downloads/Contrib/emacs-sql-mode.tar.gz, emacs-sql-mode.tar.gz} Raw port of a SQL mode for XEmacs. Supports completion. Original by Peter D. Pezaris @email{pez@@atlantic2.sbi.com} and partial -@strong{MySQL} port by David Axmark. +MySQL port by David Axmark. @item @uref{http://www.mysql.com/Downloads/Win32/myaccess97_1_4.zip, MyAccess97 1.4}. @item @uref{http://www.mysql.com/Downloads/Win32/myaccess2000_1_4.zip, MyAccess2000 1.4}. MyAccess is an AddIn for MS Access 97/2000 that allows you to manage -@strong{MySQL} databases from within Access. Main functions are: +MySQL databases from within Access. Main functions are: @itemize @minus @item Create/Modify Tables @item Execute Queries against MySQL @@ -45506,7 +45506,7 @@ MyAccess is an AddIn for MS Access 97/2000 that allows you to manage Written by Hubertus Hiden. @uref{http://www.accessmysql.com, MyAccess homepage}. @item @uref{http://www.mysql.com/Downloads/Contrib/radius-0.3.tar.gz, radius-0.3.tar.gz} -Patches for @code{radiusd} to make it support @strong{MySQL}. By Wim Bonis, +Patches for @code{radiusd} to make it support MySQL. By Wim Bonis, @email{bonis@@kiss.de}. @end itemize @@ -45520,12 +45520,12 @@ A backup script for MySQL. By Peter F. Brown. @item @uref{http://www.mysql.com/Downloads/Contrib/mytop, mytop} @item @uref{http://public.yahoo.com/~jzawodn/mytop/, mytop home page} -mytop is a Perl program that allows you to monitor @strong{MySQL} servers by +mytop is a Perl program that allows you to monitor MySQL servers by viewing active threads, queries, and overall server performance numbers. By Jeremy D. Zawodny. @item @uref{http://www.mysql.com/Downloads/Contrib/mysql_watchdog.pl, mysql_watchdog.pl} -Monitor the @strong{MySQL} daemon for possible lockups. By Yermo Lamers, +Monitor the MySQL daemon for possible lockups. By Yermo Lamers, @email{yml@@yml.com}. @item @uref{http://www.mysql.com/Downloads/Contrib/mysqltop.tar.gz, mysqltop.tar.gz} @@ -45538,14 +45538,14 @@ Prints out the structure of the all tables in a database. By Thomas Wana. Prints the structure of every table in a database. By Thomas Wana. @item @uref{http://www.mysql.com/Downloads/Contrib/mysqlsync, mysqlsync-1.0-alpha.tar.gz}. -A Perl script to keep remote copies of a @strong{MySQL} database in sync with a +A Perl script to keep remote copies of a MySQL database in sync with a central master copy. By Mark Jeftovic. @email{markjr@@easydns.com}. @item @uref{http://www.mysql.com/Downloads/Contrib/MySQLTutor-0.2.tar.gz, MySQLTutor}. -MySQLTutor. A @strong{MySQL} tutorial for beginners. +MySQLTutor. A MySQL tutorial for beginners. @item @uref{http://www.mysql.com/Downloads/Contrib/MySQLDB.zip, MySQLDB.zip} -A COM library for @strong{MySQL} by Alok Singh. +A COM library for MySQL by Alok Singh. @item @uref{http://www.mysql.com/Downloads/Contrib/MySQLDB-readme.html, MySQLDB-readme.html}. @item @uref{http://www.mysql.com/Downloads/Contrib/mysql_replicate.pl, mysql_replicate.pl} @@ -45564,7 +45564,7 @@ By Elizabeth. Wrapper for mysqldump to backup all databases. By Marc Swanson. @item @uref{http://www.mysql.com/Downloads/Contrib/mdu.pl.gz,mdu.pl.gz} -Prints the storage usage of a @strong{MySQL} database. +Prints the storage usage of a MySQL database. @end itemize @cindex RPMs, for common tools @@ -45590,7 +45590,7 @@ sprintf() function for SQL queries that can escape blobs. By Chunhua Liu. @appendixsec Windows programs @itemize @bullet @item @uref{http://www.mysql.com/Downloads/Contrib/LaunchMySQL.zip, LaunchMySQL.zip} -The program launches the @strong{MySQL} server, shuts it down, and +The program launches the MySQL server, shuts it down, and display status information. By Bill Thompson @end itemize @@ -45606,18 +45606,18 @@ Performance handicapping system for yachts. Uses PHP. By @email{rhill@@stobyn.ml.org}. @item @uref{http://www.mysql.com/Downloads/Contrib/hylalog-1.0.tar.gz, hylalog-1.0.tar.gz} -Store @code{hylafax} outgoing faxes in a @strong{MySQL} database. By Sinisa +Store @code{hylafax} outgoing faxes in a MySQL database. By Sinisa Milivojevic, @email{sinisa@@mysql.com}. @item @uref{http://www.mysql.com/Downloads/Contrib/mrtg-mysql-1.0.tar.gz, mrtg-mysql-1.0.tar.gz} -@strong{MySQL} status plotting with MRTG, by Luuk de Boer, @email{luuk@@wxs.nl}. +MySQL status plotting with MRTG, by Luuk de Boer, @email{luuk@@wxs.nl}. @item @uref{http://www.mysql.com/Downloads/Contrib/wuftpd-2.4.2.18-mysql_support.2.tar.gz, wuftpd-2.4.2.18-mysql_support.2.tar.gz} -Patches to add logging to @strong{MySQL} for WU-ftpd. By Zeev Suraski, +Patches to add logging to MySQL for WU-ftpd. By Zeev Suraski, @email{bourbon@@netvision.net.il}. @item @uref{http://www.mysql.com/Downloads/Contrib/wu-ftpd-2.6.0-mysql.4.tar.gz,wu-ftpd-2.6.0-mysql.4.tar.gz} -Patches to add logging to @strong{MySQL} for WU-ftpd 2.6.0. By +Patches to add logging to MySQL for WU-ftpd 2.6.0. By @email{takeshi@@SoftAgency.co.jp}, based on Zeev Suraski wuftpd patches. @item @uref{http://www.mysql.com/Downloads/Contrib/Old-Versions, Old-Versions} @@ -45630,7 +45630,7 @@ interested in. @appendix Credits This appendix lists the developers, contributors, and supporters that have -helped to make @strong{MySQL} what it is today. +helped to make MySQL what it is today. @cindex developers, list of @menu @@ -45642,14 +45642,14 @@ helped to make @strong{MySQL} what it is today. @node Developers, Contributors, Credits, Credits @appendixsec Developers at MySQL AB -These are the developers that are or have been employed by @strong{MySQL AB} -to work on @strong{MySQL}, roughly in the order they started to work with us. +These are the developers that are or have been employed by MySQL AB +to work on MySQL, roughly in the order they started to work with us. Following each developer is a small list of the tasks that the developer is responsible for, or the accomplishments they have made. @table @asis @item Michael (Monty) Widenius -Has written the following parts of @strong{MySQL}: +Has written the following parts of MySQL: @itemize @bullet @item All the main code in @code{mysqld}. @@ -45668,13 +45668,13 @@ The @code{replace} program (look into it, it's COOL!). @item @strong{MyODBC}, the ODBC driver for Windows95. @item -Fixing bugs in MIT-pthreads to get it to work for @strong{MySQL}. And +Fixing bugs in MIT-pthreads to get it to work for MySQL. And also Unireg, a curses-based application tool with many utilities. @item Porting of @code{mSQL} tools like @code{msqlperl}, @code{DBD}/@code{DBI}, and @code{DB2mysql}. @item -Most of crash-me and the foundation for the @strong{MySQL} benchmarks. +Most of crash-me and the foundation for the MySQL benchmarks. @end itemize @item David Axmark @@ -45734,7 +45734,7 @@ Our security expert. @item Vio interface (The foundation for the encrypted client/server protocol). @item -@strong{MySQL} Filesystem (A way to use @strong{MySQL} databases as files +MySQL Filesystem (A way to use MySQL databases as files and directories). @item The CASE Expression. @@ -45761,7 +45761,7 @@ mysql-bench @item Matt Wagner @itemize @bullet @item -@strong{MySQL} test suite. +MySQL test suite. @item Our webmaster. @end itemize @@ -45777,7 +45777,7 @@ Winmysqladmin. @item Dynamic character support. @item -Responsible for @strong{MySQL} configure. +Responsible for MySQL configure. @end itemize @item Sergei Golubchik @@ -45803,7 +45803,7 @@ Proofreading and editing this fine manual. @item John Dean @itemize @bullet @item -The new @strong{MySQL} GUI client. +The new MySQL GUI client. @end itemize @item Indrek Siitan @@ -45813,17 +45813,17 @@ Designer/programmer of our web interface. @end itemize @end table -The following non-developers are also working in/with @strong{MySQL AB}: +The following non-developers are also working in/with MySQL AB: @table @asis @item -Hans Kierkegaard - Responsible for @strong{MySQL} license handling. +Hans Kierkegaard - Responsible for MySQL license handling. @item Antti Halonen - Sales manager. @item Jonas Norrman - Handles licensing questions sent to @email{info@@mysql.com}. @item -Erik Granberg - Handles @strong{MySQL} partners (and a lot of other stuff). +Erik Granberg - Handles MySQL partners (and a lot of other stuff). @item Allan Larsson (The BOSS for TCX DataKonsult AB). @end table @@ -45832,7 +45832,7 @@ Allan Larsson (The BOSS for TCX DataKonsult AB). @node Contributors, Supporters, Developers, Credits @appendixsec Contributors to MySQL -Contributors to the @strong{MySQL} distribution are listed here, in +Contributors to the MySQL distribution are listed here, in somewhat random order: @table @asis @@ -45857,13 +45857,13 @@ For the effort to make a shareware SQL database. We at TcX started with wrote a SQL interface to our application builder Unireg. @code{mysqladmin} and @code{mysql} are programs that were largely influenced by their @code{mSQL} counterparts. We have put a lot of effort into making the -@strong{MySQL} syntax a superset of @code{mSQL}. Many of the API's ideas are +MySQL syntax a superset of @code{mSQL}. Many of the API's ideas are borrowed from @code{mSQL} to make it easy to port free @code{mSQL} programs -to @strong{MySQL}. @strong{MySQL} doesn't contain any code from @code{mSQL}. +to MySQL. MySQL doesn't contain any code from @code{mSQL}. Two files in the distribution (@file{client/insert_test.c} and @file{client/select_test.c}) are based on the corresponding (non-copyrighted) files in the @code{mSQL} distribution, but are modified as examples showing -the changes necessary to convert code from @code{mSQL} to @strong{MySQL}. +the changes necessary to convert code from @code{mSQL} to MySQL. (@code{mSQL} is copyrighted David J. Hughes.) @item Fred Fish For his excellent C debugging and trace library. Monty has made a number @@ -45882,8 +45882,8 @@ TcX/MySQL AB/detron. @item Patrick Lynch For helping us acquire @code{http://www.mysql.com/}. @item Fred Lindberg -For setting up qmail to handle the @strong{MySQL} mailing list and for the -incredible help we got in managing the @strong{MySQL} mailing lists. +For setting up qmail to handle the MySQL mailing list and for the +incredible help we got in managing the MySQL mailing lists. @item Igor Romanenko @email{igor@@frog.kiev.ua} @code{mysqldump} (previously @code{msqldump}, but ported and enhanced by Monty). @@ -45892,15 +45892,15 @@ For the @code{DBD} (Perl) interface. @item Tim Bunce Author of @code{mysqlhotcopy}. @item Andreas Koenig @email{a.koenig@@mind.de} -For the Perl interface to @strong{MySQL}. +For the Perl interface to MySQL. @item Eugene Chan @email{eugene@@acenet.com.sg} -For porting PHP to @strong{MySQL}. +For porting PHP to MySQL. @item Michael J. Miller Jr. @email{mke@@terrapin.turbolift.com} -For the first @strong{MySQL} manual. And a lot of spelling/language -fixes for the FAQ (that turned into the @strong{MySQL} manual a long +For the first MySQL manual. And a lot of spelling/language +fixes for the FAQ (that turned into the MySQL manual a long time ago). @item Yan Cailin -First translator of the @strong{MySQL} Reference Manual into simplified +First translator of the MySQL Reference Manual into simplified chinese in early 2000 on which the Big5 and HK coded (@uref{http://mysql.hitstar.com, mysql.hitstar.com}) versions were based. @uref{http://linuxdb.yeah.net, Personal home page at @@ -45913,7 +45913,7 @@ software developed by Chris Provenzano, the University of California, Berkeley, and contributors. We are currently using version 1_60_beta6 patched by Monty (see @file{mit-pthreads/Changes-mysql}). @item Xavier Leroy @email{Xavier.Leroy@@inria.fr} -The author of LinuxThreads (used by @strong{MySQL} on Linux). +The author of LinuxThreads (used by MySQL on Linux). @item Zarko Mocnik @email{zarko.mocnik@@dem.si} Sorting for Slovenian language and the @file{cset.tar.gz} module that makes it easier to add other character sets. @@ -45921,28 +45921,28 @@ it easier to add other character sets. The @code{_MB} character set macros and the ujis and sjis character sets. @item Joshua Chamas @email{joshua@@chamas.com} Base for concurrent insert, extended date syntax, debugging on NT, and -answering on the @strong{MySQL} mailing list. +answering on the MySQL mailing list. @item Yves Carlier @email{Yves.Carlier@@rug.ac.be} @code{mysqlaccess}, a program to show the access rights for a user. @item Rhys Jones @email{rhys@@wales.com} (And GWE Technologies Limited) -For the JDBC, a module to extract data from @strong{MySQL} with a Java +For the JDBC, a module to extract data from MySQL with a Java client. @item Dr Xiaokun Kelvin ZHU @email{X.Zhu@@brad.ac.uk} -Further development of the JDBC driver and other @strong{MySQL}-related +Further development of the JDBC driver and other MySQL-related Java tools. @item James Cooper @email{pixel@@organic.com} For setting up a searchable mailing list archive at his site. @item Rick Mehalick @email{Rick_Mehalick@@i-o.com} -For @code{xmysql}, a graphical X client for @strong{MySQL}. +For @code{xmysql}, a graphical X client for MySQL. @item Doug Sisk @email{sisk@@wix.com} -For providing RPM packages of @strong{MySQL} for RedHat Linux. +For providing RPM packages of MySQL for RedHat Linux. @item Diemand Alexander V. @email{axeld@@vial.ethz.ch} -For providing RPM packages of @strong{MySQL} for RedHat Linux-Alpha. +For providing RPM packages of MySQL for RedHat Linux-Alpha. @item Antoni Pamies Olive @email{toni@@readysoft.es} -For providing RPM versions of a lot of @strong{MySQL} clients for Intel +For providing RPM versions of a lot of MySQL clients for Intel and SPARC. @item Jay Bloodworth @email{jay@@pathways.sde.state.sc.us} -For providing RPM versions for @strong{MySQL} Version 3.21. +For providing RPM versions for MySQL Version 3.21. @item Jochen Wiedmann @email{wiedmann@@neckar-alb.de} For maintaining the Perl @code{DBD::mysql} module. @item Therrien Gilbert @email{gilbert@@ican.net}, Jean-Marc Pouyot @email{jmp@@scalaire.fr} @@ -45995,22 +45995,22 @@ User-definable functions (UDFs); @code{CREATE FUNCTION} and @item Andreas F. Bobak @email{bobak@@relog.ch} The @code{AGGREGATE} extension to UDF functions. @item Ross Wakelin @email{R.Wakelin@@march.co.uk} -Help to set up InstallShield for @strong{MySQL}-Win32. +Help to set up InstallShield for MySQL-Win32. @item Jethro Wright III @email{jetman@@li.net} The @file{libmysql.dll} library. @item James Pereria @email{jpereira@@iafrica.com} -Mysqlmanager, a Win32 GUI tool for administrating @strong{MySQL}. +Mysqlmanager, a Win32 GUI tool for administrating MySQL. @item Curt Sampson @email{cjs@@portal.ca} Porting of MIT-pthreads to NetBSD/Alpha and NetBSD 1.3/i386. @item Antony T. Curtis @email{antony.curtis@@olcs.net} -Porting of @strong{MySQL} to OS/2. +Porting of MySQL to OS/2. @item Martin Ramsch @email{m.ramsch@@computer.org} -Examples in the @strong{MySQL} Tutorial. +Examples in the MySQL Tutorial. @item Steve Harvey For making @code{mysqlaccess} more secure. @item Konark IA-64 Centre of Persistent Systems Private Limited @uref{http://www.pspl.co.in/konark/}. Help with the Win64 port of the -@strong{MySQL} server. +MySQL server. @item Albert Chin-A-Young. Configure updates for Tru64, large file support and better TCP wrappers support. @@ -46047,12 +46047,12 @@ General questions. Questions pertaining to OS-specifics with Linux, SQL syntax, and other things that might need some work. @item David Sklar @email{sklar@@student.net} -Using @strong{MySQL} from PHP and Perl. +Using MySQL from PHP and Perl. @item Alistair MacDonald @email{A.MacDonald@@uel.ac.uk} Not yet specified, but is flexible and can handle Linux and maybe HP-UX. Will try to get user to use @code{mysqlbug}. @item John Lyon @email{jlyon@@imag.net} -Questions about installing @strong{MySQL} on Linux systems, using either +Questions about installing MySQL on Linux systems, using either @file{.rpm} files or compiling from source. @item Lorvid Ltd. @email{lorvid@@WOLFENET.com} Simple billing/license/support/copyright issues. @@ -46067,17 +46067,17 @@ ODBC and VisualC++ interface questions. @appendixsec Supporters to MySQL The following companies has helped us finance development of -@strong{MySQL} by either paying us for developing a new feature, -developed a @strong{MySQL} feature themselves or by giving us hardware for -@strong{MySQL} development. +MySQL by either paying us for developing a new feature, +developed a MySQL feature themselves or by giving us hardware for +MySQL development. @table @asis @item VA Linux / Andover.net Funded replication. @item NuSphere -Editing of the @strong{MySQL} manual. +Editing of the MySQL manual. @item Stork Design studio -The @strong{MySQL} web site in use between 1998-2000. +The MySQL web site in use between 1998-2000. @item Intel Contributed to development on Windows and Linux platforms. @item Compaq @@ -46091,13 +46091,13 @@ Development on the embedded @code{mysqld} version. @node News, Porting, Credits, Top @appendix MySQL change history -This appendix lists the changes from version to version in the @strong{MySQL} +This appendix lists the changes from version to version in the MySQL source code. Note that we tend to update the manual at the same time we make changes to -@strong{MySQL}. If you find a version listed below that you can't +MySQL. If you find a version listed below that you can't find on the -@uref{http://www.mysql.com/downloads/,@strong{MySQL} download page}, +@uref{http://www.mysql.com/downloads/,MySQL download page}, this means that the version has not yet been released! @menu @@ -46112,7 +46112,7 @@ this means that the version has not yet been released! @node News-4.0.x, News-3.23.x, News, News @appendixsec Changes in release 4.0.x (Development; Alpha) -We have now started to work on @strong{MySQL} 4.0. We will update this +We have now started to work on MySQL 4.0. We will update this section as we add new features, so that others can follow our development. Our TODO section contains what we plan to have in 4.0. @xref{TODO MySQL 4.0}. @@ -46128,7 +46128,7 @@ Our TODO section contains what we plan to have in 4.0. @xref{TODO MySQL 4.0}. @item Multi-table @code{DELETE}. @item -Don't support old client protocols prior to @strong{MySQL} 3.21 any more. +Don't support old client protocols prior to MySQL 3.21 any more. @item Don't include the old C API functions @code{mysql_drop_db}, @code{mysql_create_db} and @code{mysql_connect}, unless compiled with @@ -46200,7 +46200,7 @@ The replication code and BerkeleyDB code is still not as tested and as the rest of the code, so we will probably need to do a couple of future releases of 3.23 with small fixes for this part of the code. As long as you don't use these features, you should be quite safe with -@strong{MySQL} 3.23! +MySQL 3.23! Note that the above doesn't mean that replication or Berkeley DB don't work; We have done a lot of testing of all code, including replication @@ -46375,7 +46375,7 @@ that only had the open count wrong. Added functions to handle symbolic links to make life easier in 4.0. @item We are now using the @code{-lcma} thread library on HP-UX 10.20 so -that @strong{MySQL} will be more stable on HP-UX. +that MySQL will be more stable on HP-UX. @item Fixed problem with @code{IF()} and number of decimals in the result. @item @@ -46576,7 +46576,7 @@ to be compiled. @itemize @bullet @item Added the @code{INNOBASE} table handler and the @code{BDB} table handler -to the @strong{MySQL} source distribution. +to the MySQL source distribution. @item Updated the documentation about @code{GEMINI} tables. @item @@ -46783,7 +46783,7 @@ testing we found and fixed many errors in the interface code. Using @code{HAVING} on an empty table could produce one result row when it shouldn't. @item -Fixed that the @strong{MySQL} RPM is not dependent on Perl5 anymore. +Fixed that the MySQL RPM is not dependent on Perl5 anymore. @item Fixed some problems with @code{HEAP} tables on Windows. @item @@ -46800,7 +46800,7 @@ Fixed problem when using @code{DECIMAL()} keys on negative numbers. always returned @code{NULL}. @item Fixed security bug in something (please upgrade if you are using a earlier -@strong{MySQL} 3.23 version). +MySQL 3.23 version). @item Fixed buffer overflow bug when writing a certain error message. @item @@ -46911,7 +46911,7 @@ When creating a table, put @code{PRIMARY} keys first, followed by @item Fixed a bug in @code{UPDATE} involving multi-part keys where one specified all key parts both in the update and the @code{WHERE} part. In -this case @strong{MySQL} could try to update a record that didn't match +this case MySQL could try to update a record that didn't match the whole @code{WHERE} part. @item Changed drop table to first drop the tables and then the @file{.frm} file. @@ -47001,7 +47001,7 @@ Changed @code{mi_create()} to use less stack space. Fixed bug with optimizer trying to over-optimize @code{MATCH} when used with @code{UNIQUE} key. @item -Changed @code{crash-me} and the @strong{MySQL} benchmarks to also work +Changed @code{crash-me} and the MySQL benchmarks to also work with FrontBase. @item Allow @code{RESTRICT} and @code{CASCADE} after @code{DROP TABLE} to make @@ -47214,7 +47214,7 @@ Allow floating-point numbers where there is no sign after the exponent @item @code{SHOW GRANTS} didn't always show all column grants. @item -Added @code{--default-extra-file=#} to all @strong{MySQL} clients. +Added @code{--default-extra-file=#} to all MySQL clients. @item Columns referenced in @code{INSERT} statements now are initialized properly. @item @@ -47274,7 +47274,7 @@ The slave now logs when it connects to the master. Fixed a core dump bug when doing @code{FLUSH MASTER} if you didn't specify a filename argument to @code{--log-bin}. @item -Added missing @file{ha_berkeley.x} files to the @strong{MySQL} Windows +Added missing @file{ha_berkeley.x} files to the MySQL Windows @item Fixed some mutex bugs in the log code that could cause thread blocks if new log files couldn't be created. @@ -47322,10 +47322,10 @@ Added file mutexes to make @code{pwrite()} safe on Windows. Added @code{mysqld} variable @code{created_tmp_disk_tables}. @item To make it possible to reliably dump and restore tables with -@code{TIMESTAMP(X)} columns, @strong{MySQL} now reports columns with @code{X} +@code{TIMESTAMP(X)} columns, MySQL now reports columns with @code{X} other than 14 or 8 to be strings. @item -Changed sort order for latin1 as it was before @strong{MySQL} Version 3.23.23. +Changed sort order for latin1 as it was before MySQL Version 3.23.23. Any table with @code{CHAR} columns that may have characters with ASCII values greater than 128 that was created or modified with 3.23.22 must be repaired! @@ -47348,7 +47348,7 @@ must be repaired with @code{REPAIR TABLE} or @code{myisamchk} before use! Added option @code{--core-file} to @code{mysqld} to get a core file on Linux if @code{mysqld} dies on the SIGSEGV signal. @item -@strong{MySQL} client @code{mysql} now starts with option +MySQL client @code{mysql} now starts with option @code{--no-named-commands} (@code{-g}) by default. This option can be disabled with @code{--enable-named-commands} (@code{-G}). This may cause incompatibility problems in some cases, for example, in SQL scripts that @@ -47450,7 +47450,7 @@ Full text search via the @code{MATCH} function and @code{FULLTEXT} index type. @appendixsubsec Changes in release 3.23.22 @itemize @bullet @item -Fixed that @code{lex_hash.h} is created properly for each @strong{MySQL} +Fixed that @code{lex_hash.h} is created properly for each MySQL distribution. @item Fixed that @code{MASTER} and @code{COLLECTION} are not reserved words. @@ -47493,7 +47493,7 @@ Added @code{SHOW MASTER STATUS} and @code{SHOW SLAVE STATUS}. @itemize @bullet @item Added @code{mysql_character_set_name(MYSQL *mysql)} function to the -@strong{MySQL} C API. +MySQL C API. @item Made the update log @code{ASCII 0} safe. @item @@ -47550,9 +47550,9 @@ Fixed bug where all rows matching weren't updated on a @code{MyISAM} table when doing update based on key on a table with many keys and some key changed values. @item -The Linux @strong{MySQL} RPM's and binaries are now statically linked with +The Linux MySQL RPM's and binaries are now statically linked with a linuxthread version that has faster mutex handling when used with -@strong{MySQL}. +MySQL. @item @code{ORDER BY} can now uses @code{REF} keys to find subset the rows that needs to be sorted. @@ -47568,7 +47568,7 @@ parameters to @code{mysqld}. Fixed bug that destroyed index when doing @code{myisamchk --sort-records} on a table with prefix compressed index. @item -Added pack_isam and myisampack to the standard @strong{MySQL} distribution. +Added pack_isam and myisampack to the standard MySQL distribution. @item Added the syntax @code{BEGIN WORK} (the same as @code{BEGIN}). @item @@ -47585,7 +47585,7 @@ Fixed core dump bug when using @code{ORDER BY} on a @code{CONV()} expression. Fixed a problem from 3.23.17 when choosing character set on the client side. @item Added @code{FLUSH TABLES WITH READ LOCK} to make a global lock suitable to -make a copy of @strong{MySQL} data files. +make a copy of MySQL data files. @item @code{CREATE TABLE ... SELECT ... PROCEDURE} now works. @item @@ -47663,7 +47663,7 @@ Added option @code{TYPE=QUICK} to @code{CHECK} and @code{REPAIR}. @item Fixed bug in @code{REPAIR TABLE} when the table was in use by other threads. @item -Added a thread cache to make it possible to debug @strong{MySQL} with +Added a thread cache to make it possible to debug MySQL with @code{gdb} when one does a lot of reconnects. This will also improve systems where you can't use persistent connections. @item @@ -47720,7 +47720,7 @@ Fixed bug in locking code that could result it locking problems with concurrent inserts under high load. @item Fixed a problem with @code{DELETE} of many rows on a table with -compressed keys where @strong{MySQL} scanned the index to find the rows. +compressed keys where MySQL scanned the index to find the rows. @item Fixed problem with @code{CHECK} on table with deleted keyblocks. @item @@ -47737,7 +47737,7 @@ Fixed bug when using @code{LOAD DATA INFILE} on a table with @item Optimised MyISAM to be faster when inserting keys in sorted order. @item -@code{EXPLAIN SELECT ...} now also prints out whether @strong{MySQL} needs to +@code{EXPLAIN SELECT ...} now also prints out whether MySQL needs to create a temporary table or use file sorting when resolving the @code{SELECT}. @item Added optimization to skip @code{ORDER BY} parts where the part is a @@ -47835,7 +47835,7 @@ give a corrupted table. @item Fixed bug in @code{myisamchk} where it wrongly reset the auto_increment value. @item -LOTS of patches for Linux Alpha. @strong{MySQL} now appears to be relatively +LOTS of patches for Linux Alpha. MySQL now appears to be relatively stable on Alpha. @item Changed @code{DISTINCT} on @code{HEAP} temporary tables to use hashed @@ -47844,7 +47844,7 @@ type @code{SELECT DISTINCT ... GROUP BY ...}. This fixes a problem where not all duplicates were removed in queries of the above type. In addition, the new code is MUCH faster. @item -Added patches to make @strong{MySQL} compile on Mac OS X. +Added patches to make MySQL compile on Mac OS X. @item Added option @code{IF NOT EXISTS} to @code{CREATE DATABASE}. @item @@ -47865,7 +47865,7 @@ Fixed that @code{myisamchk} works properly with RAID:ed tables. Fixed problem with @code{LEFT JOIN} and @code{key_field IS NULL}. @item Fixed bug in @code{net_clear()} which could give the error @code{Aborted -connection} in the @strong{MySQL} clients. +connection} in the MySQL clients. @item Added options @code{USE INDEX (key_list)} and @code{IGNORE INDEX (key_list)} as join parameters in @code{SELECT}. @@ -47893,7 +47893,7 @@ Fix problem with timezones that have half hour offsets. Allow the syntax @code{UNIQUE INDEX} in @code{CREATE} statements. @item @code{mysqlhotcopy} - fast on-line hot-backup utility for local -@strong{MySQL} databases. By Tim Bunce. +MySQL databases. By Tim Bunce. @item New more secure @code{mysqlaccess}. Thanks to Steve Harvey for this. @item @@ -47956,7 +47956,7 @@ Added VIO wrapper (needed for SSL support ; By Andrei Errapart and Tõnu Samuel). @item Fixed optimizer problem on @code{SELECT} when using many overlapping indexes. -@strong{MySQL} should now be able to choose keys even better when there +MySQL should now be able to choose keys even better when there is many keys to choose from. @item Changed optimizer to prefer a range key instead of a ref key when the @@ -48020,7 +48020,7 @@ Fixed problem with @code{BLOB NULL} keys and @code{LIKE} "prefix%". @item Fixed problem with @code{MyISAM} and fixed-length rows < 5 bytes. @item -Fixed problem that could cause @strong{MySQL} to touch freed memory when +Fixed problem that could cause MySQL to touch freed memory when doing very complicated @code{GROUP BY} queries. @item Fixed core dump if you got a crashed table where an @code{ENUM} field value @@ -48420,7 +48420,7 @@ Check if a row has changed in an @code{UPDATE} now also works with Added the @code{INNER} join syntax. @strong{NOTE}: This made @code{INNER} a reserved word! @item -Added support for netmasks to the hostname in the @strong{MySQL} tables. +Added support for netmasks to the hostname in the MySQL tables. You can specify a netmask using the @code{IP/NETMASK} syntax. @item If you compare a @code{NOT NULL DATE/DATETIME} column with @code{IS @@ -48461,7 +48461,7 @@ Added aggregate UDF functions. Thanks to Andreas F. Bobak Some small changes to the join table optimizer to make some joins faster. @item @code{SELECT DISTINCT} is much faster; It uses the new @code{UNIQUE} -functionality in @code{MyISAM}. One difference compared to @strong{MySQL} Version 3.22 +functionality in @code{MyISAM}. One difference compared to MySQL Version 3.22 is that the output of @code{DISTINCT} is not sorted anymore. @item All C client API macros are now functions to make shared libraries more @@ -48582,7 +48582,7 @@ Fixed problem when storing numbers in timestamps. @item Fix problem with timezones that have half hour offsets. @item -@code{mysqlhotcopy} - fast on-line hot-backup utility for local @strong{MySQL} +@code{mysqlhotcopy} - fast on-line hot-backup utility for local MySQL databases. By Tim Bunce. @item New more secure @code{mysqlaccess}. Thanks to Steve Harvey for this. @@ -48635,7 +48635,7 @@ Fixed problem with timezones that are < GMT -11. @item Fixed a bug when deleting packed keys in NISAM. @item -Fixed problem that could cause @strong{MySQL} to touch freed memory when +Fixed problem that could cause MySQL to touch freed memory when doing very complicated @code{GROUP BY} queries. @item Fixed core dump if you got a crashed table where an @code{ENUM} field value @@ -48743,7 +48743,7 @@ Better support for SCO in @code{configure}. Added option @code{--defaults-file=###} to option file handling to force use of only one specific option file. @item -Extended @code{CREATE} syntax to ignore @strong{MySQL} Version 3.23 keywords. +Extended @code{CREATE} syntax to ignore MySQL Version 3.23 keywords. @item Fixed deadlock problem when using @code{INSERT DELAYED} on a table locked with @code{LOCK TABLES}. @@ -48775,12 +48775,12 @@ Fixed bug in @code{CONCAT()} with many arguments. @item Added patches for DEC 3.2 and SCO. @item -Fixed path-bug when installing @strong{MySQL} as a service on NT. +Fixed path-bug when installing MySQL as a service on NT. @item -The @strong{MySQL}-Windows version is now compiled with VC++ 6.0 instead of +The MySQL-Windows version is now compiled with VC++ 6.0 instead of with VC++ 5.0. @item -New installation setup for @strong{MySQL}-Windows. +New installation setup for MySQL-Windows. @end itemize @node News-3.22.21, News-3.22.20, News-3.22.22, News-3.22.x @@ -48800,7 +48800,7 @@ Changed the @code{mysql.db} column from @code{char(32)} to @code{char(60)}. Fixed a bug when storing days in a @code{TIME} column. @item Fixed a problem with @code{Host '...' is not allowed to connect to this MySQL -server} after one had inserted a new @strong{MySQL} user with a @code{GRANT} +server} after one had inserted a new MySQL user with a @code{GRANT} command. @item Changed to use @code{TCP_NODELAY} also on Linux (Should give faster TCP/IP @@ -48841,7 +48841,7 @@ Fixes a fatal problem in 3.22.17 on Linux; After @code{shutdown} all threads didn't die properly. @item Added option @code{-O flush_time=#} to @code{mysqld}. This is mostly -useful on Windows and tells how often @strong{MySQL} should close all +useful on Windows and tells how often MySQL should close all unused tables and flush all updated tables to disk. @item Fixed problem that a @code{VARCHAR} column compared with @code{CHAR} column @@ -48948,7 +48948,7 @@ Added escape of @code{^Z} (ASCII 26) to @code{\Z} as @code{^Z} doesn't work with pipes on Windows. @item @code{mysql_fix_privileges} adds a new column to the @code{mysql.func} to -support aggregate UDF functions in future @strong{MySQL} releases. +support aggregate UDF functions in future MySQL releases. @end itemize @node News-3.22.13, News-3.22.12, News-3.22.14, News-3.22.x @@ -48961,7 +48961,7 @@ column didn't work. @item @code{SELECT COUNT(*) ... LEFT JOIN ...} didn't work with no @code{WHERE} part. @item -Updated @file{config.guess} to allow @strong{MySQL} to configure on +Updated @file{config.guess} to allow MySQL to configure on UnixWare 7.0.x. @item Changed the implementation of @code{pthread_cond()} on the Windows version. @@ -49038,7 +49038,7 @@ Configuration and portability fixes. Added option @code{SET SQL_WARNINGS=1} to get a warning count also for simple inserts. @item -@strong{MySQL} now uses @code{SIGTERM} instead of @code{SIGQUIT} with +MySQL now uses @code{SIGTERM} instead of @code{SIGQUIT} with shutdown to work better on FreeBSD. @item Added option @code{\G} (print vertically) to @code{mysql}. @@ -49056,20 +49056,20 @@ New function @code{MAKE_SET()}. @itemize @bullet @item -@code{mysql_install_db} no longer starts the @strong{MySQL} server! You +@code{mysql_install_db} no longer starts the MySQL server! You should start @code{mysqld} with @code{safe_mysqld} after installing it! The -@strong{MySQL} RPM will, however, start the server as before. +MySQL RPM will, however, start the server as before. @item Added @code{--bootstrap} option to @code{mysqld} and recoded @code{mysql_install_db} to use it. This will make it easier to install -@strong{MySQL} with RPMs. +MySQL with RPMs. @item Changed @code{+}, @code{-} (sign and minus), @code{*}, @code{/}, @code{%}, @code{ABS()} and @code{MOD()} to be @code{BIGINT} aware (64-bit safe). @item Fixed a bug in @code{ALTER TABLE} that caused @code{mysqld} to crash. @item -@strong{MySQL} now always reports the conflicting key values when a +MySQL now always reports the conflicting key values when a duplicate key entry occurs. (Before this was only reported for @code{INSERT}). @item New syntax: @code{INSERT INTO tbl_name SET col_name=value, col_name=value, ...} @@ -49081,7 +49081,7 @@ a query on connect or reconnect. @item Added option @code{MYSQL_READ_DEFAULT_FILE} and @code{MYSQL_READ_DEFAULT_GROUP} to @code{mysql_options()} to read the -following parameters from the @strong{MySQL} option files: @code{port}, +following parameters from the MySQL option files: @code{port}, @code{socket}, @code{compress}, @code{password}, @code{pipe}, @code{timeout}, @code{user}, @code{init-command}, @code{host} and @code{database}. @item @@ -49119,7 +49119,7 @@ New SQL command: @code{FLUSH [ TABLES | HOSTS | LOGS | PRIVILEGES ] [, ...]} @item New SQL command: @code{KILL} @code{thread_id}. @item -Added casts and changed include files to make @strong{MySQL} easier to +Added casts and changed include files to make MySQL easier to compile on AIX and DEC OSF1 4.x @item Fixed conversion problem when using @code{ALTER TABLE} from a @code{INT} @@ -49164,7 +49164,7 @@ was a key and the rest of the @code{ORDER BY} columns wasn't part of the key. @item Fixed a big problem with @code{OPTIMIZE TABLE}. @item -@strong{MySQL} clients on NT will now by default first try to connect with +MySQL clients on NT will now by default first try to connect with named pipes and after this with TCP/IP. @item Fixed a problem with @code{DROP TABLE} and @code{mysqladmin shutdown} on Windows @@ -49175,7 +49175,7 @@ Fixed problems with @code{TIME columns} and negative strings. Added an extra thread signal loop on shutdown to avoid some error messages from the client. @item -@strong{MySQL} now uses the next available number as extension for the update +MySQL now uses the next available number as extension for the update log file. @item Added patches for UNIXWARE 7. @@ -49188,8 +49188,8 @@ Added patches for UNIXWARE 7. @item Added @code{LIMIT} clause for the @code{DELETE} statement. @item -You can now use the @code{/*! ... */} syntax to hide @strong{MySQL}-specific -keywords when you write portable code. @strong{MySQL} will parse the code +You can now use the @code{/*! ... */} syntax to hide MySQL-specific +keywords when you write portable code. MySQL will parse the code inside the comments as if the surrounding @code{/*!} and @code{*/} comment characters didn't exist. @item @@ -49242,8 +49242,8 @@ Fixed small optimize problem when updating keys. @item Changed makefiles to support shared libraries. @item -@strong{MySQL}-NT can now use named pipes, which means that you can now use -@strong{MySQL}-NT without having to install TCP/IP. +MySQL-NT can now use named pipes, which means that you can now use +MySQL-NT without having to install TCP/IP. @end itemize @node News-3.22.5, News-3.22.4, News-3.22.6, News-3.22.x @@ -49265,7 +49265,7 @@ try to use an old error message file.) All count structures in the client (@code{affected_rows()}, @code{insert_id()}, ...) are now of type @code{BIGINT} to allow 64-bit values to be used. -This required a minor change in the @strong{MySQL} protocol which should affect +This required a minor change in the MySQL protocol which should affect only old clients when using tables with @code{AUTO_INCREMENT} values > 16M. @item The return type of @code{mysql_fetch_lengths()} has changed from @code{uint *} @@ -49288,7 +49288,7 @@ You can now store values in the range @code{-838:59:59} <= x <= @code{838:59:59} in a @code{TIME} column. @item @strong{WARNING: INCOMPATIBLE CHANGE!!} -If you set a @code{TIME} column to too short a value, @strong{MySQL} now +If you set a @code{TIME} column to too short a value, MySQL now assumes the value is given as: @code{[[[D ]HH:]MM:]SS} instead of @code{HH[:MM[:SS]]}. @item @@ -49353,8 +49353,8 @@ Added @code{--vertical} option to @code{mysql}, for printing results in vertical mode. @item Index-only optimization; some queries are now resolved using -only indexes. Until @strong{MySQL} 4.0, this works only for numeric columns. -@xref{MySQL indexes, , @strong{MySQL} indexes}. +only indexes. Until MySQL 4.0, this works only for numeric columns. +@xref{MySQL indexes, , MySQL indexes}. @item Lots of new benchmarks. @item @@ -49369,7 +49369,7 @@ A new C API chapter and lots of other improvements in the manual. Added @code{--tmpdir} option to @code{mysqld}, for specifying the location of the temporary file directory. @item -@strong{MySQL} now automatically changes a query from an ODBC client: +MySQL now automatically changes a query from an ODBC client: @example SELECT ... FROM table WHERE auto_increment_column IS NULL @end example @@ -49417,11 +49417,11 @@ Added @code{DATE_ADD()} and @code{DATE_SUB()} functions. @itemize @bullet @item -Fixed a lock problem (bug in @strong{MySQL} Version 3.22.1) when closing temporary tables. +Fixed a lock problem (bug in MySQL Version 3.22.1) when closing temporary tables. @item Added missing @code{mysql_ping()} to the client library. @item -Added @code{--compress} option to all @strong{MySQL} clients. +Added @code{--compress} option to all MySQL clients. @item Changed @code{byte} to @code{char} in @file{mysql.h} and @file{mysql_com.h}. @end itemize @@ -49440,7 +49440,7 @@ You can now save default options (like passwords) in a configuration file (@file{my.cnf}). @item Lots of small changes to get @code{ORDER BY} to work when no records are found -when using fields that are not in @code{GROUP BY} (@strong{MySQL} extension). +when using fields that are not in @code{GROUP BY} (MySQL extension). @item Added @code{--chroot} option to @code{mysqld}, to start @code{mysqld} in a chroot environment (by Nikki Chumakov @email{nikkic@@cityline.ru}). @@ -49465,7 +49465,7 @@ Server error messages are now in @file{mysqld_error.h}. @item The server/client protocol now supports compression. @item -All bug fixes from @strong{MySQL} Version 3.21.32. +All bug fixes from MySQL Version 3.21.32. @end itemize @node News-3.22.1, News-3.22.0, News-3.22.2, News-3.22.x @@ -49496,7 +49496,7 @@ within a row in an existing table. the week starts on Monday (some European countries). By default, @code{WEEK()} assumes the week starts on Sunday. @item -@code{TIME} columns weren't stored properly (bug in @strong{MySQL} Version 3.22.0). +@code{TIME} columns weren't stored properly (bug in MySQL Version 3.22.0). @item @code{UPDATE} now returns information about how many rows were matched and updated, and how many ``warnings'' occurred when doing the update. @@ -49548,7 +49548,7 @@ Added caching of users and access rights (for faster access rights checking) @item Normal users (not anonymous ones) can change their password with @code{mysqladmin password 'new_password'}. This uses encrypted passwords -that are not logged in the normal @strong{MySQL} log! +that are not logged in the normal MySQL log! @item All important string functions are now coded in assembler for x86 Linux machines. This gives a speedup of 10% in many cases. @@ -49586,7 +49586,7 @@ to join them in a specific order. String functions now return @code{VARCHAR} rather than @code{CHAR} and the column type is now @code{VARCHAR} for fields saved as @code{VARCHAR}. This should make the @strong{MyODBC} driver better, but may break some old -@strong{MySQL} clients that don't handle @code{FIELD_TYPE_VARCHAR} the same +MySQL clients that don't handle @code{FIELD_TYPE_VARCHAR} the same way as @code{FIELD_TYPE_CHAR}. @item @code{CREATE INDEX} and @code{DROP INDEX} are now implemented through @@ -49942,21 +49942,21 @@ Added command @code{variables} to @code{mysqladmin}. @item A lot of small changes to the binary releases. @item -Fixed a bug in the new protocol from @strong{MySQL} Version 3.21.20. +Fixed a bug in the new protocol from MySQL Version 3.21.20. @item Changed @code{ALTER TABLE} to work with Windows (Windows can't rename open files). Also fixed a couple of small bugs in the Windows version. @item -All standard @strong{MySQL} clients are now ported to @strong{MySQL}-Windows. +All standard MySQL clients are now ported to MySQL-Windows. @item -@strong{MySQL} can now be started as a service on NT. +MySQL can now be started as a service on NT. @end itemize @node News-3.21.22, News-3.21.21a, News-3.21.23, News-3.21.x @appendixsubsec Changes in release 3.21.22 @itemize @bullet @item -Starting with this version, all @strong{MySQL} distributions will be +Starting with this version, all MySQL distributions will be configured, compiled and tested with @code{crash-me} and the benchmarks on the following platforms: SunOS 5.6 sun4u, SunOS 5.5.1 sun4u, SunOS 4.14 sun4c, SunOS 5.6 i86pc, Irix 6.3 mips5k, HP-UX 10.20 hppa, AIX 4.2.1 ppc, @@ -50072,7 +50072,7 @@ Fixed a couple of problems with @code{LEFT OUTER JOIN}. Added @code{CROSS JOIN} syntax. @code{CROSS} is now a reserved word. @item Recoded @code{yacc}/@code{bison} stack allocation to be even safer and to allow -@strong{MySQL} to handle even bigger expressions. +MySQL to handle even bigger expressions. @item Fixed a couple of problems with the update log. @item @@ -50160,16 +50160,16 @@ A new sortorder german-1. That is a normal ISO-Latin1 with a german sort order. @item Perl @code{DBI}/@code{DBD} is now included in the distribution. @code{DBI} -is now the recommended way to connect to @strong{MySQL} from Perl. +is now the recommended way to connect to MySQL from Perl. @item New portable benchmark suite with @code{DBD}, with test results from -@code{mSQL} 2.0.3, @strong{MySQL}, PostgreSQL 6.2.1 and Solid server 2.2. +@code{mSQL} 2.0.3, MySQL, PostgreSQL 6.2.1 and Solid server 2.2. @item @code{crash-me} is now included with the benchmarks; This is a Perl program designed to find as many limits as possible in a SQL server. Tested with -@code{mSQL}, PostgreSQL, Solid and @strong{MySQL}. +@code{mSQL}, PostgreSQL, Solid and MySQL. @item -Fixed bug in range-optimizer that crashed @strong{MySQL} on some queries. +Fixed bug in range-optimizer that crashed MySQL on some queries. @item Table and column name completion for @code{mysql} command line tool, by Zeev Suraski and Andi Gutmans. @@ -50195,7 +50195,7 @@ conflict with Sybase. @cindex Compatibility, with ODBC New function @code{DAYOFWEEK()} compatible with ODBC. @item -Stack checking and @code{bison} memory overrun checking to make @strong{MySQL} +Stack checking and @code{bison} memory overrun checking to make MySQL safer with weird queries. @end itemize @@ -50240,7 +50240,7 @@ Sorting on calculated @code{DOUBLE} values sorted on integer results instead. @code{mysql} no longer needs a database argument. @item Changed the place where @code{HAVING} should be. According to ANSI, it should -be after @code{GROUP BY} but before @code{ORDER BY}. @strong{MySQL} Version 3.20 +be after @code{GROUP BY} but before @code{ORDER BY}. MySQL Version 3.20 incorrectly had it last. @item Added Sybase command @code{USE DATABASE} to start using another database. @@ -50324,7 +50324,7 @@ easily portable to Win95. Changed the @code{CREATE COLUMN} syntax of @code{NOT NULL} columns to be after the @code{DEFAULT} value, as specified in the ANSI SQL standard. This will make @code{mysqldump} with @code{NOT NULL} and default values incompatible with -@strong{MySQL} Version 3.20. +MySQL Version 3.20. @item Added many function name aliases so the functions can be used with ODBC or ANSI SQL92 syntax. @@ -50353,7 +50353,7 @@ Added Russian error messages. @item Configure changes. @item -@strong{MySQL} now works with the new thread library on BSD/OS 3.0. +MySQL now works with the new thread library on BSD/OS 3.0. @item Added new group functions @code{BIT_OR()} and @code{BIT_AND()}. @item @@ -50421,7 +50421,7 @@ Fixed a couple of portability problems with include files. Fixed bug in range calculation that could return empty set when searching on multiple key with only one entry (very rare). @item -Most things ported to FSU Pthreads, which should allow @strong{MySQL} to +Most things ported to FSU Pthreads, which should allow MySQL to run on SCO. @xref{SCO}. @end itemize @@ -50643,7 +50643,7 @@ New function @code{ASCII()}. Removed function @code{BETWEEN(a,b,c)}. Use the standard ANSI syntax instead: @code{expr BETWEEN expr AND expr}. @item -@strong{MySQL} no longer has to use an extra temporary table when sorting +MySQL no longer has to use an extra temporary table when sorting on functions or @code{SUM()} functions. @item Fixed bug that you couldn't use @code{tbl_name.field_name} in @code{UPDATE}. @@ -50921,7 +50921,7 @@ an argument, the user is solicited for the password from the tty. Added default password from @code{MYSQL_PWD} (by Elmar Haneke). @item Added command @code{kill} to @code{mysqladmin} to kill a specific -@strong{MySQL} thread. +MySQL thread. @item Sometimes when doing a reconnect on a down connection this succeeded first on second try. @@ -51085,7 +51085,7 @@ Added new field @strong{file_priv} to @code{mysql/user} table. New script @code{add_file_priv} which adds the new field @strong{file_priv} to the @code{user} table. This script must be executed if you want to use the new @code{SELECT ... INTO} and @code{LOAD DATA INFILE ...} commands -with a version of @strong{MySQL} earlier than 3.20.7. +with a version of MySQL earlier than 3.20.7. @item Fixed bug in locking code, which made @code{lock_test.pl} test fail. @item @@ -51221,10 +51221,10 @@ Changed SQL function @code{INTERVALL()} to @code{INTERVAL()}. @item Made @code{SHOW COLUMNS} a synonym for @code{SHOW FIELDS}. Added compatibility syntax @code{FRIEND KEY} to @code{CREATE TABLE}. In -@strong{MySQL}, this creates a non-unique key on the given columns. +MySQL, this creates a non-unique key on the given columns. @item Added @code{CREATE INDEX} and @code{DROP INDEX} as compatibility functions. -In @strong{MySQL}, @code{CREATE INDEX} only checks if the index exists and +In MySQL, @code{CREATE INDEX} only checks if the index exists and issues an error if it doesn't exist. @code{DROP INDEX} always succeeds. @item @file{mysqladmin.c}: added client version to version information. @@ -51387,7 +51387,7 @@ thread support is probably to port MIT-pthreads. See @file{mit-pthreads/README} and @uref{http://www.humanfactor.com/pthreads/, Programming POSIX Threads}. -The @strong{MySQL} distribution includes a patched version of +The MySQL distribution includes a patched version of Provenzano's Pthreads from MIT (see @uref{http://www.mit.edu:8001/people/proven/pthreads.html, MIT Pthreads web page}). This can be used for some operating systems that do not @@ -51432,7 +51432,7 @@ gmake clean all install init-db @end example If you run into problems with a new port, you may have to do some debugging -of @strong{MySQL}! +of MySQL! @xref{Debugging server}. @strong{NOTE:} Before you start debugging @code{mysqld}, first get the test @@ -51440,8 +51440,8 @@ programs @code{mysys/thr_alarm} and @code{mysys/thr_lock} to work. This will ensure that your thread installation has even a remote chance to work! @menu -* Debugging server:: Debugging a @strong{MySQL} server -* Debugging client:: Debugging a @strong{MySQL} client +* Debugging server:: Debugging a MySQL server +* Debugging client:: Debugging a MySQL client * The DBUG package:: The DBUG package * Locking methods:: Locking methods * RTS-threads:: Comments about RTS threads @@ -51454,7 +51454,7 @@ will ensure that your thread installation has even a remote chance to work! @node Debugging server, Debugging client, Porting, Porting @appendixsec Debugging a MySQL server -If you are using some functionality that is very new in @strong{MySQL}, +If you are using some functionality that is very new in MySQL, you can try to run @code{mysqld} with the @code{--skip-new} (which will disable all new, potentially unsafe functionality) or with @code{--safe-mode} which disables a lot of optimization that may cause problems. @@ -51474,7 +51474,7 @@ experiencing performance problems or problems when new clients can't connect. The command @code{mysqladmin debug} will dump some information about locks in use, used memory and query usage to the mysql log file. This may help solve some problems. This command also provides some useful -information even if you haven't compiled @strong{MySQL} for debugging! +information even if you haven't compiled MySQL for debugging! If the problem is that some tables are getting slower and slower you should try to optimize the table with @code{OPTIMIZE TABLE} or @@ -51498,9 +51498,9 @@ problems that may be unique to your environment. @appendixsubsec Compiling MYSQL for debugging. If you have some very specific problem, you can always try to debug -@strong{MySQL}. To do this you must configure @strong{MySQL} with the +MySQL. To do this you must configure MySQL with the @code{--with-debug} or the @code{--with-debug=full} option. You can check -whether or not @strong{MySQL} was compiled with debugging by doing: +whether or not MySQL was compiled with debugging by doing: @code{mysqld --help}. If the @code{--debug} flag is listed with the options then you have debugging enabled. @code{mysqladmin ver} also lists the @code{mysqld} version as @code{mysql ... --debug} in this case. @@ -51513,9 +51513,9 @@ CC=gcc CFLAGS="-O2" CXX=gcc CXXFLAGS="-O2 -felide-constructors -fno-exceptions - This will avoid problems with the @code{libstdc++} library and with C++ exceptions (many compilers have problems with C++ exceptions in threaded -code) and compile a @strong{MySQL} version with support for all character sets. +code) and compile a MySQL version with support for all character sets. -If you suspect a memory overrun error, you can configure @strong{MySQL} +If you suspect a memory overrun error, you can configure MySQL with @code{--with-debug=full}, which will install a memory allocation (@code{SAFEMALLOC}) checker. Running with @code{SAFEMALLOC} is however quite slow, so if you get performance problems you should start @@ -51525,24 +51525,24 @@ disable the memory overrun checks for each call to @code{malloc} and If @code{mysqld} stops crashing when you compile it with @code{--with-debug}, you have probably found a compiler bug or a timing -bug within @strong{MySQL}. In this case you can try to add @code{-g} to +bug within MySQL. In this case you can try to add @code{-g} to the @code{CFLAGS} and @code{CXXFLAGS} variables above and not use @code{--with-debug}. If @code{mysqld} now dies, you can at least attach to it with @code{gdb} or use @code{gdb} on the core file to find out what happened. -When you configure @strong{MySQL} for debugging you automatically enable a +When you configure MySQL for debugging you automatically enable a lot of extra safety check functions that monitor the health of @code{mysqld}. If they find something ``unexpected,'' an entry will be written to @code{stderr}, which @code{safe_mysqld} directs to the error log! This also -means that if you are having some unexpected problems with @strong{MySQL} and +means that if you are having some unexpected problems with MySQL and are using a source distribution, the first thing you should do is to -configure @strong{MySQL} for debugging! (The second thing, of course, is to +configure MySQL for debugging! (The second thing, of course, is to send mail to @email{mysql@@lists.mysql.com} and ask for help. Please use the @code{mysqlbug} script for all bug reports or questions regarding the -@strong{MySQL} version you are using! +MySQL version you are using! -In the Windows @strong{MySQL} distribution, @code{mysqld.exe} is by +In the Windows MySQL distribution, @code{mysqld.exe} is by default compiled with support for trace files. @node Making trace files, Using gdb on mysqld, Compiling for debugging, Debugging server @@ -51576,7 +51576,7 @@ If you make a bug report about this, please only send the lines from the trace file to the appropriate mailing list where something seems to go wrong! If you can't locate the wrong place, you can ftp the trace file, together with a full bug report, to -@uref{ftp://support.mysql.com/pub/mysql/secret} so that a @strong{MySQL} +@uref{ftp://support.mysql.com/pub/mysql/secret} so that a MySQL developer can take a look a this. The trace file is made with the @strong{DBUG} package by Fred Fish. @@ -51596,7 +51596,7 @@ this case you can only have one thread active at a time. When running @code{mysqld} under gdb, you should disable the stack trace with @code{--skip-stack-trace} to be able to catch segfaults within gdb. -It's very hard to debug @strong{MySQL} under @code{gdb} if you do a lot of +It's very hard to debug MySQL under @code{gdb} if you do a lot of new connections the whole time as @code{gdb} doesn't free the memory for old threads. You can avoid this problem by starting @code{mysqld} with @code{-O thread_cache_size= 'max_connections +1'}. In most cases just @@ -51711,7 +51711,7 @@ Make a symbol file for the @code{mysqld} server: nm -n libexec/mysqld > /tmp/mysqld.sym @end example -Note that many @strong{MySQL} binary distributions comes with the above +Note that many MySQL binary distributions comes with the above file, named @code{mysqld.sym.gz}. In this case you must unpack this by doing: @example @@ -51761,18 +51761,18 @@ If you find the text @code{mysqld restarted} in the error log file (normally named @file{hostname.err}) you have probably found a query that causes @code{mysqld} to fail. If this happens you should check all your tables with @code{myisamchk} (@pxref{MySQL Database Administration}), -and test the queries in the @strong{MySQL} log files to see if one doesn't +and test the queries in the MySQL log files to see if one doesn't work. If you find such a query, try first upgrading to the newest -@strong{MySQL} version. If this doesn't help and you can't find anything +MySQL version. If this doesn't help and you can't find anything in the @code{mysql} mail archive, you should report the bug to @email{mysql@@lists.mysql.com}. Links to mail archives are available -online at the @uref{http://www.mysql.com/documentation/, @strong{MySQL} +online at the @uref{http://www.mysql.com/documentation/, MySQL documentation page}. If you have started @code{mysqld} with @code{--with-myisam-recover}, -@strong{MySQL} will automatically check and try to repair @code{MyISAM} +MySQL will automatically check and try to repair @code{MyISAM} tables if they are marked as 'not closed properly' or 'crashed'. If -this happens, @strong{MySQL} will write an entry in the +this happens, MySQL will write an entry in the @code{hostname.err} file @code{'Warning: Checking table ...'} which is followed by @code{Warning: Repairing table} if the table needs to be repaired. If you get a lot of these errors, without @code{mysqld} having @@ -51792,7 +51792,7 @@ following: @itemize @bullet @item -Take down the @strong{MySQL} daemon (with @code{mysqladmin shutdown}). +Take down the MySQL daemon (with @code{mysqladmin shutdown}). @item Make a backup of the tables (to guard against the very unlikely case that the repair will do something bad). @@ -51802,7 +51802,7 @@ wrong tables with @code{myisamchk -r database/table.MYI}. @item Make a second backup of the tables. @item -Remove (or move away) any old log files from the @strong{MySQL} data +Remove (or move away) any old log files from the MySQL data directory if you need more space. @item Start @code{mysqld} with @code{--log-binary}. @xref{Binary log}. @@ -51816,7 +51816,7 @@ Restore the backup. Restart the @code{mysqld} server @strong{without} @code{--log-binary} @item Re-execute the commands with @code{mysqlbinlog update-log-file | mysql}. -The update log is saved in the @strong{MySQL} database directory with +The update log is saved in the MySQL database directory with the name @code{hostname-bin.#}. @item If the tables are corrupted again or you can get @code{mysqld} to die with the @@ -51824,7 +51824,7 @@ above command, you have found reproducible bug that should be easy to fix! FTP the tables and the binary log to @uref{ftp://support.mysql.com/pub/mysql/secret} and send a mail to @email{bugs@@lists.mysql.com} or (if you are a support customer) to -@email{support@@mysql.com} about the problem and the @strong{MySQL} team +@email{support@@mysql.com} about the problem and the MySQL team will fix it as soon as possible. @end itemize @@ -51836,8 +51836,8 @@ update statements if you want to narrow down the problem. @node Debugging client, The DBUG package, Debugging server, Porting @appendixsec Debugging a MySQL client -To be able to debug a @strong{MySQL} client with the integrated debug package, -you should configure @strong{MySQL} with @code{--with-debug}. +To be able to debug a MySQL client with the integrated debug package, +you should configure MySQL with @code{--with-debug}. @xref{configure options}. @tindex MYSQL_DEBUG environment variable @@ -51855,7 +51855,7 @@ This causes clients to generate a trace file in @file{/tmp/client.trace}. If you have problems with your own client code, you should attempt to connect to the server and run your query using a client that is known to work. Do this by running @code{mysql} in debugging mode (assuming you -have compiled @strong{MySQL} with debugging on): +have compiled MySQL with debugging on): @example shell> mysql --debug=d:t:O,/tmp/client.trace @@ -51867,22 +51867,22 @@ This will provide useful information in case you mail a bug report. If your client crashes at some 'legal' looking code, you should check that your @file{mysql.h} include file matches your mysql library file. A very common mistake is to use an old @file{mysql.h} file from an old -@strong{MySQL} installation with new @strong{MySQL} library. +MySQL installation with new MySQL library. @cindex DBUG package @node The DBUG package, Locking methods, Debugging client, Porting @appendixsec The DBUG package. -The @strong{MySQL} server and most @strong{MySQL} clients are compiled +The MySQL server and most MySQL clients are compiled with the DBUG package originally made by Fred Fish. When one has configured -@strong{MySQL} for debugging, this package makes it possible to get a trace +MySQL for debugging, this package makes it possible to get a trace file of what the program is debugging. @xref{Making trace files}. One uses the debug package by invoking the program with the @code{--debug="..."} or the @code{-#...} option. -Most @strong{MySQL} programs has a default debug string that will be +Most MySQL programs has a default debug string that will be used if you don't specify an option to @code{--debug}. The default trace file is usually @code{/tmp/programname.trace} on Unix and @code{\programname.trace} on Windows. @@ -51933,7 +51933,7 @@ to an application program) are: -#d:t:i:O,\\mysqld.trace @end example -In @strong{MySQL}, common tags to print (with the @code{d} option) are: +In MySQL, common tags to print (with the @code{d} option) are: @code{enter},@code{exit},@code{error},@code{warning},@code{info} and @code{loop}. @@ -51942,7 +51942,7 @@ In @strong{MySQL}, common tags to print (with the @code{d} option) are: @node Locking methods, RTS-threads, The DBUG package, Porting @appendixsec Locking methods -Currently @strong{MySQL} only supports table locking for +Currently MySQL only supports table locking for @code{ISAM}/@code{MyISAM} and @code{HEAP} tables and page level locking for @code{BDB} tables. @xref{Internal locking}. With @code{MyISAM} tables one can freely mix @code{INSERT} and @code{SELECT} without locks @@ -51952,7 +51952,7 @@ Starting in version 3.23.33, you can analyze the table lock contention on your system by checking @code{Table_locks_waited} and @code{Table_locks_immediate} environment variables. -Some database users claim that @strong{MySQL} cannot support near the +Some database users claim that MySQL cannot support near the number of concurrent users because it lacks row-level locking. This may be true for some specific applications, but is not generally true. As always this depends totally on what the application does and what @@ -52008,7 +52008,7 @@ Many scans / @code{GROUP BY} on the whole table without any writers. Other options than row / page level locking: -Versioning (like we use in @strong{MySQL} for concurrent inserts) where +Versioning (like we use in MySQL for concurrent inserts) where you can have one writer at the same time as many readers. This means that the database/table supports different views for the data depending on when one started to access it. Other names for this are time travel, @@ -52019,7 +52019,7 @@ locking; The worst case does, however, use much more memory than when using normal locks. Instead of using row level locks one can use application level locks. -(Like get_lock/release_lock in @strong{MySQL}). This works of course +(Like get_lock/release_lock in MySQL). This works of course only in well-behaved applications. In many cases one can do an educated guess which locking type is best @@ -52027,11 +52027,11 @@ for the application but generally it's very hard to say that a given lock type is better than another; Everything depends on the application and different part of the application may require different lock types. -Here are some tips about locking in @strong{MySQL}: +Here are some tips about locking in MySQL: On web application most applications do lots of selects, very few deletes, updates mainly on keys and inserts in some specific tables. -The base @strong{MySQL} setup is VERY tuned for this. +The base MySQL setup is VERY tuned for this. Concurrent users is not a problem if one doesn't mix updates and selects that needs to examine many rows in the same table. @@ -52043,7 +52043,7 @@ One can also use @code{LOCK TABLES} to speed up things (many updates within a single lock is much faster than updates without locks). Splitting thing to different tables will also helps. -If you get speed problems with the table locks in @strong{MySQL}, you +If you get speed problems with the table locks in MySQL, you may be able to solve these to convert some of your tables to @code{BDB} tables. @xref{BDB}. @@ -52055,7 +52055,7 @@ how to tune ones application. @xref{Tips}. @node RTS-threads, Thread packages, Locking methods, Porting @appendixsec Comments about RTS threads -I have tried to use the RTS thread packages with @strong{MySQL} but +I have tried to use the RTS thread packages with MySQL but stumbled on the following problems: They use an old version of a lot of POSIX calls and it is very tedious to @@ -52075,7 +52075,7 @@ should return the error code on error. Now they return -1 and set @code{errno}. Another problem is that user-level threads use the @code{ALRM} signal and this aborts a lot of functions (@code{read}, @code{write}, @code{open}...). -@strong{MySQL} should do a retry on interrupt on all of these but it is +MySQL should do a retry on interrupt on all of these but it is not that easy to verify it. The biggest unsolved problem is the following: @@ -52085,12 +52085,12 @@ alarms with @code{pthread_cond_timedwait()}, but this aborts with error @code{EINTR}. I tried to debug the thread library as to why this happens, but couldn't find any easy solution. -If someone wants to try @strong{MySQL} with RTS threads I suggest the +If someone wants to try MySQL with RTS threads I suggest the following: @itemize @bullet @item -Change functions @strong{MySQL} uses from the thread library to POSIX. +Change functions MySQL uses from the thread library to POSIX. This shouldn't take that long. @item Compile all libraries with the @code{-DHAVE_rts_threads}. @@ -52150,8 +52150,8 @@ end @node Thread packages, , RTS-threads, Porting @appendixsec Differences between different thread packages -@strong{MySQL} is very dependent on the thread package used. So when -choosing a good platform for @strong{MySQL}, the thread package is very +MySQL is very dependent on the thread package used. So when +choosing a good platform for MySQL, the thread package is very important. There are at least three types of thread packages: @@ -52202,9 +52202,9 @@ really ``thread aware''. A regular expression (regex) is a powerful way of specifying a complex search. -@strong{MySQL} uses Henry Spencer's implementation of regular +MySQL uses Henry Spencer's implementation of regular expressions, which is aimed at conformance with POSIX -1003.2. @strong{MySQL} uses the extended version. +1003.2. MySQL uses the extended version. This is a simplistic reference that skips the details. To get more exact information, see Henry Spencer's @code{regex(7)} manual page that is @@ -52383,7 +52383,7 @@ mysql> select "weeknights" REGEXP "^(wee|week)(knights|nights)$"; -> 1 @appendix What is Unireg? Unireg is our tty interface builder, but it uses a low-level connection -to our ISAM (which is used by @strong{MySQL}) and because of this it is +to our ISAM (which is used by MySQL) and because of this it is very quick. It has existed since 1979 (on Unix in C since ~1986). Unireg has the following components: @@ -52394,7 +52394,7 @@ One table viewer with updates/browsing. @item Multi table viewer (with one scrolling region). @item -Table creator. (With lots of column tags you can't create with @strong{MySQL}) +Table creator. (With lots of column tags you can't create with MySQL) This is WYSIWYG (for a tty). You design a screen and Unireg prompts for the column specification. @item @@ -52419,13 +52419,13 @@ The @code{convform} utility. Converts @file{.frm} and text files between different character sets. @item The @code{myisampack} utility. Packs an ISAM table (makes it 50-80% -smaller). The table can be read by @strong{MySQL} like an ordinary +smaller). The table can be read by MySQL like an ordinary table. Only one record has to be decompressed per access. Cannot handle @code{BLOB} or @code{TEXT} columns or updates (yet). @end itemize We update most of our production databases with the Unireg interface and -serve web pages through @strong{MySQL} (and in some extreme cases the Unireg +serve web pages through MySQL (and in some extreme cases the Unireg report generator). Unireg takes about 3M of disk space and works on at least the following @@ -52436,10 +52436,10 @@ Unireg is currently only available in Swedish and Finnish. The price tag for Unireg is 10,000 Swedish kr (about $1500 US), but this includes support. Unireg is distributed as a binary. (But all the ISAM -sources can be found in @strong{MySQL}). Usually we compile the binary for the +sources can be found in MySQL). Usually we compile the binary for the customer at their site. -All new development is concentrated to @strong{MySQL}. +All new development is concentrated to MySQL. @page @c This node name is special @@ -53431,7 +53431,7 @@ That's all there is to it! * Building clients:: Building client programs @end menu -You need the following tools to install a @strong{MySQL} binary distribution: +You need the following tools to install a MySQL binary distribution: @itemize @bullet @item @@ -53456,7 +53456,7 @@ of getting a solution to your problem! You will find @code{mysqlbug} in the @file{bin} directory after you unpack the distribution. @xref{Bug reports}. @cindex commands, for binary distribution -The basic commands you must execute to install and use a @strong{MySQL} +The basic commands you must execute to install and use a MySQL binary distribution are: @example @@ -53491,15 +53491,15 @@ to @ref{Post-installation}, for post-installation setup and testing: Pick the directory under which you want to unpack the distribution, and move into it. In the example below, we unpack the distribution under @file{/usr/local} and create a directory @file{/usr/local/mysql} into which -@strong{MySQL} is installed. (The following instructions therefore assume +MySQL is installed. (The following instructions therefore assume you have permission to create files in @file{/usr/local}. If that directory is protected, you will need to perform the installation as @code{root}.) @item Obtain a distribution file from one of the sites listed in -@ref{Getting MySQL, , Getting @strong{MySQL}}. +@ref{Getting MySQL, , Getting MySQL}. -@strong{MySQL} binary distributions are provided as compressed @code{tar} +MySQL binary distributions are provided as compressed @code{tar} archives and have names like @file{mysql-VERSION-OS.tar.gz}, where @code{VERSION} is a number (for example, @code{3.21.15}), and @code{OS} indicates the type of operating system for which the distribution is intended @@ -53509,7 +53509,7 @@ indicates the type of operating system for which the distribution is intended If you see a binary distribution marked with the @code{-max} prefix, this means that the binary has support for transaction-safe tables and other features. @xref{mysqld-max, , @code{mysqld-max}}. Note that all binaries -are built from the same @strong{MySQL} source distribution. +are built from the same MySQL source distribution. @item Add a user and group for @code{mysqld} to run as: @@ -53560,7 +53560,7 @@ The most important for installation purposes are the @file{bin} and @tindex environment variable, PATH This directory contains client programs and the server You should add the full pathname of this directory to your -@code{PATH} environment variable so that your shell finds the @strong{MySQL} +@code{PATH} environment variable so that your shell finds the MySQL programs properly. @xref{Environment variables}. @item scripts @@ -53570,7 +53570,7 @@ access permissions. @end table @item -If you would like to use @code{mysqlaccess} and have the @strong{MySQL} +If you would like to use @code{mysqlaccess} and have the MySQL distribution in some non-standard place, you must change the location where @code{mysqlaccess} expects to find the @code{mysql} client. Edit the @file{bin/mysqlaccess} script at approximately line 18. Search for a line @@ -53585,14 +53585,14 @@ stored on your system. If you do not do this, you will get a @code{Broken pipe} error when you run @code{mysqlaccess}. @item -Create the @strong{MySQL} grant tables (necessary only if you haven't -installed @strong{MySQL} before): +Create the MySQL grant tables (necessary only if you haven't +installed MySQL before): @example shell> scripts/mysql_install_db @end example -Note that @strong{MySQL} versions older than Version 3.22.10 started the -@strong{MySQL} server when you run @code{mysql_install_db}. This is no +Note that MySQL versions older than Version 3.22.10 started the +MySQL server when you run @code{mysql_install_db}. This is no longer true! @item @@ -53615,7 +53615,7 @@ If you want to install support for the Perl @code{DBI}/@code{DBD} interface, see @ref{Perl support}. @item -If you would like @strong{MySQL} to start automatically when you boot your +If you would like MySQL to start automatically when you boot your machine, you can copy @code{support-files/mysql.server} to the location where your system has its startup files. More information can be found in the @code{support-files/mysql.server} script itself and in @@ -53626,7 +53626,7 @@ your system has its startup files. More information can be found in the After everything has been unpacked and installed, you should initialize and test your distribution. -You can start the @strong{MySQL} server with the following command: +You can start the MySQL server with the following command: @example shell> bin/safe_mysqld --user=mysql & @@ -53651,25 +53651,25 @@ shell> bin/safe_mysqld --user=mysql & @menu * Perl installation:: Installing Perl on Unix * ActiveState Perl:: Installing ActiveState Perl on Windows -* Windows Perl:: Installing the @strong{MySQL} Perl distribution on Windows +* Windows Perl:: Installing the MySQL Perl distribution on Windows * Perl support problems:: Problems using the Perl @code{DBI}/@code{DBD} interface @end menu @node Perl installation, ActiveState Perl, Perl support, Perl support @appendixsubsec Installing Perl on Unix -Perl support for @strong{MySQL} is provided by means of the +Perl support for MySQL is provided by means of the @code{DBI}/@code{DBD} client interface. @xref{Perl}. The Perl @code{DBD}/@code{DBI} client code requires Perl Version 5.004 or later. The interface @strong{will not work} if you have an older version of Perl. -@strong{MySQL} Perl support also requires that you've installed -@strong{MySQL} client programming support. If you installed @strong{MySQL} +MySQL Perl support also requires that you've installed +MySQL client programming support. If you installed MySQL from RPM files, client programs are in the client RPM, but client programming support is in the developer RPM. Make sure you've installed the latter RPM. As of Version 3.22.8, Perl support is distributed separately from the main -@strong{MySQL} distribution. If you want to install Perl support, the files +MySQL distribution. If you want to install Perl support, the files you will need can be obtained from @uref{http://www.mysql.com/Downloads/Contrib/}. @@ -53708,12 +53708,12 @@ shell> make install The @code{make test} command is important because it verifies that the module is working. Note that when you run that command during the @code{Msql-Mysql-modules} installation to exercise the interface code, the -@strong{MySQL} server must be running or the test will fail. +MySQL server must be running or the test will fail. It is a good idea to rebuild and reinstall the @code{Msql-Mysql-modules} -distribution whenever you install a new release of @strong{MySQL}, +distribution whenever you install a new release of MySQL, particularly if you notice symptoms such as all your @code{DBI} scripts -dumping core after you upgrade @strong{MySQL}. +dumping core after you upgrade MySQL. If you don't have the right to install Perl modules in the system directory or if you to install local Perl modules, the following reference may help @@ -53733,7 +53733,7 @@ Look under the heading @cindex Perl, installing on Windows @cindex ActiveState Perl -To install the @strong{MySQL} @code{DBD} module with ActiveState Perl on +To install the MySQL @code{DBD} module with ActiveState Perl on Windows, you should do the following: @itemize @bullet @@ -53777,7 +53777,7 @@ install ftp://ftp.de.uu.net/pub/CPAN/authors/id/JWIED/DBD-mysql-1.2212.x86.ppd The above should work at least with ActiveState Perl Version 5.6. If you can't get the above to work, you should instead install the -@strong{MyODBC} driver and connect to @strong{MySQL} server through +@strong{MyODBC} driver and connect to MySQL server through ODBC: @example @@ -53789,7 +53789,7 @@ $dbh= DBI->connect("DBI:ODBC:$dsn","$user","$password") || @node Windows Perl, Perl support problems, ActiveState Perl, Perl support @appendixsubsec Installing the MySQL Perl Distribution on Windows -The @strong{MySQL} Perl distribution contains @code{DBI}, +The MySQL Perl distribution contains @code{DBI}, @code{DBD:MySQL} and @code{DBD:ODBC}. @itemize @bullet @@ -53857,7 +53857,7 @@ Add @code{-L/usr/lib/gcc-lib/... -lgcc} to the link command when the should specify the pathname of the directory where @file{libgcc.a} is located on your system. -Another cause of this problem may be that Perl and @strong{MySQL} aren't both +Another cause of this problem may be that Perl and MySQL aren't both compiled with @code{gcc}. In this case, you can solve the mismatch by compiling both with @code{gcc}. @@ -53976,7 +53976,7 @@ Returns a count of the number of different non-@code{NULL} values: mysql> select COUNT(DISTINCT results) from student; @end example -In @strong{MySQL} you can get the number of distinct expression +In MySQL you can get the number of distinct expression combinations that don't contain NULL by giving a list of expressions. In ANSI SQL you would have to do a concatenation of all expressions inside @code{CODE(DISTINCT ..)}. @@ -54032,7 +54032,7 @@ performed with 64-bit (@code{BIGINT}) precision. @end table @cindex @code{GROUP BY}, extensions to ANSI SQL -@strong{MySQL} has extended the use of @code{GROUP BY}. You can use columns or +MySQL has extended the use of @code{GROUP BY}. You can use columns or calculations in the @code{SELECT} expressions that don't appear in the @code{GROUP BY} part. This stands for @emph{any possible value for this group}. You can use this to get better performance by avoiding sorting and @@ -54047,7 +54047,7 @@ mysql> select order.custid,customer.name,max(payments) @end example In ANSI SQL, you would have to add @code{customer.name} to the @code{GROUP -BY} clause. In @strong{MySQL}, the name is redundant if you don't run in +BY} clause. In MySQL, the name is redundant if you don't run in ANSI mode. @strong{Don't use this feature} if the columns you omit from the @@ -54071,7 +54071,7 @@ substr(MIN(concat(rpad(sort,6,' '),column)),7) @cindex aliases, in @code{GROUP BY} clauses @cindex expression aliases @cindex aliases, for expressions -Note that if you are using @strong{MySQL} Version 3.22 (or earlier) or if +Note that if you are using MySQL Version 3.22 (or earlier) or if you are trying to follow ANSI SQL, you can't use expressions in @code{GROUP BY} or @code{ORDER BY} clauses. You can work around this limitation by using an alias for the expression: @@ -54081,7 +54081,7 @@ mysql> SELECT id,FLOOR(value/100) AS val FROM tbl_name GROUP BY id,val ORDER BY val; @end example -In @strong{MySQL} Version 3.23 you can do: +In MySQL Version 3.23 you can do: @example mysql> SELECT id,FLOOR(value/100) FROM tbl_name ORDER BY RAND(); |