标题：mySQL
简介
MySQL是一个开放源码的小型关联式数据库管理系统，开发者为瑞典MySQL AB公司。目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低，尤其是开放源码这一特点，许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。
背景
MySQL最初的开发者的意图是用mSQL和他们自己的快速低级例程(ISAM)去连接表格。经过一些测试后，开发者得出结论：mSQL并没有他们需要的那么快和灵活。这导致了一个使用几乎和mSQL一样的API接口的用于他们的数据库的新的SQL接口的产生，这样，这个API被设计成允许为用于mSQL而写的第三方代码更容易移植到MySQL。
MySQL这个名字是怎么来的已经不清楚了。基本指南和大量的库和工具带有前缀“my”已经有10年以上，而且不管怎样，MySQL AB创始人之一的  MySQL AB创始人之一Monty Widenius女儿也叫My。这两个到底是哪一个给出了MySQL这个名字至今依然是个迷，包括开发者在内也不知道。
MySQL的海豚标志的名字叫“sakila”，它是由MySQL AB的创始人从用户在“海豚命名”的竞赛中建议的大量的名字表中选出的。获胜的名字是由来自非洲斯威士兰的开源软件开发者Ambrose Twebaze提供。根据Ambrose所说，Sakila来自一种叫SiSwati的斯威士兰方言，也是在Ambrose的家乡乌干达附近的坦桑尼亚的Arusha的一个小镇的名字。
2008年1月16号MySQL AB被Sun公司收购。而2009年，SUN又被Oracle收购。就这样如同一个轮回，MySQL成为了Oracle公司的另一个数据库项目。
应用环境
与其他的大型数据库例如Oracle、DB2、SQL Server等相比，MySQL自有它的不足之处，如规模小、功能有限（MySQL Cluster的功能和效率都相对比较差）等，但是这丝毫也没有减少它受欢迎的程度。对于一般的个人使用者和中小型企业来说，MySQL提供的功能已经绰绰有余，而且由于MySQL是开放源码软件，因此可以大大降低总体拥有成本。  LAMP目前Internet上流行的网站构架方式是LAMP（Linux+Apache+MySQL+PHP/Perl/Python）和LNMP（Linux+Nginx+MySQL+php/perl/Python），即使用Linux作为操作系统，Apache和Nginx作为Web服务器，MySQL作为数据库，PHP/Perl/Python作为服务器端脚本解释器。由于这四个软件都是免费或开放源码软件（FLOSS)，因此使用这种方式不用花一分钱（除开人工成本）就可以建立起一个稳定、免费的网站系统。
系统特性
1．使用C和C++编写，并使用了多种编译器进行测试，保证源代码的可移植性 
2．支持AIX、FreeBSD、HP-UX、Linux、Mac OS、NovellNetware、OpenBSD、OS/2 Wrap、Solaris、Windows等多种操作系统
3．为多种编程语言提供了API。这些编程语言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。
4．支持多线程，充分利用CPU资源
5．优化的SQL查询算法，有效地提高查询速度 
6．既能够作为一个单独的应用程序应用在客户端服务器网络环境中，也能够作为一个库而嵌入到其他的软件中。
7．提供多语言支持，常见的编码如中文的GB 2312、BIG5，日文的Shift_JIS等都可以用作数据表名和数据列名。
8．提供TCP/IP、ODBC和JDBC等多种数据库连接途径。 
9．提供用于管理、检查、优化数据库操作的管理工具。
10．支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
11．支持多种存储引擎。
存储引擎
MyISAMMysql5.5之前的默认数据库引擎，最为常用。拥有较高的插入，查询速度，但不支持事务
InnoDB事务型数据库的首选引擎，支持ACID事务，支持行级锁定, MySQL 5.5起成为默认数据库引擎
BDB源自Berkeley DB，事务型数据库的另一种选择，支持COMMIT和ROLLBACK等其他事务特性
Memory所有数据置于内存的存储引擎，拥有极高的插入，更新和查询效率。但是会占用和数据量成正比的内存空间。并且其内容会在Mysql重新启动时丢失
Merge将一定数量的MyISAM表联合而成一个整体，在超大规模数据存储时很有用
Archive非常适合存储大量的独立的，作为历史记录的数据。因为它们不经常被读取。Archive拥有高效的插入速度，但其对查询的支持相对较差
Federated将不同的Mysql服务器联合起来，逻辑上组成一个完整的数据库。非常适合分布式应用
Cluster/NDB高冗余的存储引擎，用多台数据机器联合提供服务以提高整体性能和安全性。适合数据量大，安全和性能要求高的应用
CSV： 逻辑上由逗号分割数据的存储引擎。它会在数据库子目录里为每个数据表创建一个.CSV文件。这是一种普通文本文件，每个数据行占用一个文本行。CSV存储引擎不支持索引。 
BlackHole ：黑洞引擎，写入的任何数据都会消失，一般用于记录binlog做复制的中继 
EXAMPLE存储引擎是一个不做任何事情的存根引擎。它的目的是作为MySQL源代码中的一个例子，用来演示如何开始编写一个新存储引擎。同样，它的主要兴趣是对开发者。EXAMPLE存储引擎不支持编索引。
另外，Mysql的存储引擎接口定义良好。有兴趣的开发者可以通过阅读文档编写自己的存储引擎。
应用架构
单点（Single），适合小规模应用
复制（Replication），适合中小规模应用
集群（Cluster），适合大规模应用Mysql架构及应用(3张)
索引功能
索引是一种特殊的文件（InnoDB数据表上的索引是表空间的一个组成部分），它们包含着对数据表里所有记录的引用指针。索引不是万能的，索引可以加快数据检索操作，但会使数据修改操作变慢。每修改数据记录，索引就必须刷新一次。为了在某种程序上弥补这一缺陷，许多SQL命令都有一个DELAY_KEY_WRITE项。这个选项的作用是暂时制止MySQL在该命令每插入一条新记录和每修改一条现有之后立刻对索引进行刷新，对索引的刷新将等到全部记录插入/修改完毕之后再进行。在需要把许多新记录插入某个数据表的场合，DELAY_KEY_WRITE选项的作用将非常明显。另外，索引还会在硬盘上占用相当大的空间。因此应该只为最经常查询和最经常排序的数据列建立索引。注意，如果某个数据列包含许多重复的内容，为它建立索引就没有太大的实际效果。
从理论上讲，完全可以为数据表里的每个字段分别建一个索引，但MySQL把同一个数据表里的索引总数限制为16个。
1．InnoDB数据表的索引
与InnoDB数据表相比，在InnoDB数据表上，索引对InnoDB数据表的重要性要大得多。在InnoDB数据表上，索引不仅会在搜索数据记录时发挥作用，还是数据行级锁定机制的苊、基础。“数据行级锁定”的意思是指在事务操作的执行过程中锁定正在被处理的个别记录，不让其他用户进行访问。这种锁定将影响到（但不限于）SELECT、LOCKINSHAREMODE、SELECT、FORUPDATE命令以及INSERT、UPDATE和DELETE命令。出于效率方面的考虑，InnoDB数据表的数据行级锁定实际发生在它们的索引上，而不是数据表自身上。显然，数据行级锁定机制只有在有关的数据表有一个合适的索引可供锁定的时候才能发挥效力。
2．限制
如果WHERE子句的查询条件里有不等号（WHEREcoloum!=），MySQL将无法使用索引。类似地，如果WHERE子句的查询条件里使用了函数（WHEREDAY（column）=），MySQL也将无法使用索引。在JOIN操作中（需要从多个数据表提取数据时），MySQL只有在主键和外键的数据类型相同时才能使用索引。
如果WHERE子句的查询条件里使用比较操作符LIKE和REGEXP，MySQL只有在搜索模板的第一个字符不是通配符的情况下才能使用索引。比如说，如果查询条件是LIKE'abc%‘，MySQL将使用索引；如果查询条件是LIKE'%abc’，MySQL将不使用索引。
在ORDERBY操作中，MySQL只有在排序条件不是一个查询条件表达式的情况下才使用索引。（虽然如此，在涉及多个数据表查询里，即使有索引可用，那些索引在加快ORDERBY方面也没什么作用）。如果某个数据列里包含许多重复的值，就算为它建立了索引也不会有很好的效果。比如说，如果某个数据列里包含的净是些诸如“0/1”或“Y/N”等值，就没有必要为它创建一个索引。索引类别1．普通索引
普通索引（由关键字KEY或INDEX定义的索引）的唯一任务是加快对数据的访问速度。因此，应该只为那些最经常出现在查询条件（WHEREcolumn=）或排序条件（ORDERBYcolumn）中的数据列创建索引。只要有可能，就应该选择一个数据最整齐、最紧凑的数据列（如一个整数类型的数据列）来创建索引。
2．唯一索引
普通索引允许被索引的数据列包含重复的值。比如说，因为人有可能同名，所以同一个姓名在同一个“员工个人资料”数据表里可能出现两次或更多次。
如果能确定某个数据列将只包含彼此各不相同的值，在为这个数据列创建索引的时候就应该用关键字UNIQUE把它定义为一个唯一索引。这么做的好处：一是简化了MySQL对这个索引的管理工作，这个索引也因此而变得更有效率；二是MySQL会在有新记录插入数据表时，自动检查新记录的这个字段的值是否已经在某个记录的这个字段里出现过了；如果是，MySQL将拒绝插入那条新记录。也就是说，唯一索引可以保证数据记录的唯一性。事实上，在许多场合，人们创建唯一索引的目的往往不是为了提高访问速度，而只是为了避免数据出现重复。
3．主索引
在前面已经反复多次强调过：必须为主键字段创建一个索引，这个索引就是所谓的“主索引”。主索引与唯一索引的唯一区别是：前者在定义时使用的关键字是PRIMARY而不是UNIQUE。
4．外键索引
如果为某个外键字段定义了一个外键约束条件，MySQL就会定义一个内部索引来帮助自己以最有效率的方式去管理和使用外键约束条件。
5．复合索引
索引可以覆盖多个数据列，如像INDEX(columnA,columnB)索引。这种索引的特点是MySQL可以有选择地使用一个这样的索引。如果查询操作只需要用到columnA数据列上的一个索引，就可以使用复合索引INDEX(columnA,columnB)。不过，这种用法仅适用于在复合索引中排列在前的数据列组合。比如说，INDEX(A，B，C)可以当做A或(A,B)的索引来使用，但不能当做B、C或(B,C)的索引来使用。索引长度在为CHAR和VARCHAR类型的数据列定义索引时，可以把索引的长度限制为一个给定的字符个数（这个数字必须小于这个字段所允许的最大字符个数）。这么做的好处是可以生成一个尺寸比较小、检索速度却比较快的索引文件。在绝大多数应用里，数据库中的字符串数据大都以各种各样的名字为主，把索引的长度设置为10~15个字符已经足以把搜索范围缩小到很少的几条数据记录了。在为BLOB和TEXT类型的数据列创建索引时，必须对索引的长度做出限制；MySQL所允许的最大索引全文索引文本字段上的普通索引只能加快对出现在字段内容最前面的字符串（也就是字段内容开头的字符）进行检索操作。如果字段里存放的是由几个、甚至是多个单词构成的较大段文字，普通索引就没什么作用了。这种检索往往以的形式出现，这对MySQL来说很复杂，如果需要处理的数据量很大，响应时间就会很长。
这类场合正是全文索引（full-textindex）可以大显身手的地方。在生成这种类型的索引时，MySQL将把在文本中出现的所有单词创建为一份清单，查询操作将根据这份清单去检索有关的数据记录。全文索引即可以随数据表一同创建，也可以等日后有必要时再使用下面这条命令添加：
ALTERTABLEtablenameADDFULLTEXT（column1，column2）有了全文索引，就可以用SELECT查询命令去检索那些包含着一个或多个给定单词的数据记录了。下面是这类查询命令的基本语法：
SELECT * FROM tablename
WHERE MATCH (column1,column2) AGAINST('word1','word2','word3')
上面这条命令将把column1和column2字段里有word1、word2和word3的数据记录全部查询出来。
注解：InnoDB数据表不支持全文索引。查询和索引只有当数据库里已经有了足够多的测试数据时，它的性能测试结果才有实际参考价值。如果在测试数据库里只有几百条数据记录，它们往往在执行完第一条查询命令之后就被全部加载到内存里，这将使后续的查询命令都执行得非常快--不管有没有使用索引。只有当数据库里的记录超过了1000条、数据总量也超过了MySQL服务器上的内存总量时，数据库的性能测试结果才有意义。
在不确定应该在哪些数据列上创建索引的时候，人们从EXPLAINSELECT命令那里往往可以获得一些帮助。这其实只是简单地给一条普通的SELECT命令加一个EXPLAIN关键字作为前缀而已。有了这个关键字，MySQL将不是去执行那条SELECT命令，而是去对它进行分析。MySQL将以表格的形式把查询的执行过程和用到的索引等信息列出来。
在EXPLAIN命令的输出结果里，第1列是从数据库读取的数据表的名字，它们按被读取的先后顺序排列。type列指定了本数据表与其它数据表之间的关联关系（JOIN）。在各种类型的关联关系当中，效率最高的是system，然后依次是const、eq_ref、ref、range、index和All（All的意思是：对应于上一级数据表里的每一条记录，这个数据表里的所有记录都必须被读取一遍——这种情况往往可以用一索引来避免）。
possible_keys数据列给出了MySQL在搜索数据记录时可选用的各个索引。key数据列是MySQL实际选用的索引，这个索引按字节计算的长度在key_len数据列里给出。比如说，对于一个INTEGER数据列的索引，这个字节长度将是4。如果用到了复合索引，在key_len数据列里还可以看到MySQL具体使用了它的哪些部分。作为一般规律，key_len数据列里的值越小越好。
ref数据列给出了关联关系中另一个数据表里的数据列的名字。row数据列是MySQL在执行这个查询时预计会从这个数据表里读出的数据行的个数。row数据列里的所有数字的乘积可以大致了解这个查询需要处理多少组合。
最后，extra数据列提供了与JOIN操作有关的更多信息，比如说，如果MySQL在执行这个查询时必须创建一个临时数据表，就会在extra列看到usingtemporary字样。
安装教程
打开下载的mysql安装文件mysql-5.0.27-win32.zip，双击解压缩，运行“setup.exe”
mysql安装向导启动，按“Next”继续
选择安装类型，有“Typical（默认）”、“Complete（完全）”、“Custom（用户自定义）”三个选项，我们选择“Custom”，有更多的选项，也方便熟悉安装过程:
在“Developer Components（开发者部分）”上左键单击，选择“This feature, and all subfeatures, will be installed on local hard drive.”，即“此部分，及下属子部分内容，全部安装在本地硬盘上”。在上面的“MySQL Server（mysql服务器）”、“Client Programs（mysql客户端程序）”、“Documentation（文档）”也如此操作，以保证安装所有文件。点选“Change...”，手 动指定安装目录。
填上安装目录，我的是“F:\Server\MySQL\MySQL Server 5.0”，也建议不要放在与操作系统同一分区，这样可以防止系统备份还原的时候，数据被清空。按“OK”继续。
返回刚才的界面，按“Next”继续
确认一下先前的设置，如果有误，按“Back”返回重做。按“Install”开始安装。
正在安装中，请稍候，直到出现下面的界面
这里是询问你是否要注册一个账号，或是使用已有的账号直接登陆，一般不需要了，点选“Skip Sign-Up”，按“Next”略过此步骤。
现在软件安装完成了，出现上面的界面，这里有一个很好的功能，mysql配置向导，不用向 以前一样，自己手动乱七八糟的配置my.ini了，将 “Configure the Mysql Server now”前面的勾打上，点“Finish”结束软件的安装并启动mysql配置向导。
mysql配置向导启动界面，按“Next”继续
选择配置方式，“Detailed Configuration（手动精确配置）”、“Standard Configuration（标准配置）”，我们选择“Detailed Configuration”，方便熟悉配置过程。
选择服务器类型，“Developer Machine（开发测试类，mysql占用很少资源）”、“Server Machine（服务器类型，mysql占用较多资源）”、“Dedicated MySQL Server Machine（专门的数据库服务器，mysql占用所有可用资源）”，大家根据自己的类型选择了，一般选“Server Machine”，不会太少，也不会占满。
选择mysql数据库的大致用途，“Multifunctional Database（通用多功能型，好）”、“Transactional Database Only（服务器类型，专注于事务处理，一般）”、“Non-Transactional Database Only（非事务处理型，较简单，主要做一些监控、记数用，对MyISAM数据类型的支持仅限于non-transactional），随自己的用途而选 择了，我这里选择“Transactional Database Only”，按“Next”继续。
对InnoDB Tablespace进行配置，就是为InnoDB 数据库文件选择一个存储空间，如果修改了，要记住位置，重装的时候要选择一样的地方，否则可能会造成数据库损坏，当然，对数据库做个备份就没问题了，这里 不详述。我这里没有修改，使用用默认位置，直接按“Next”继续
选择您的网站的一般mysql访问量，同时连接的数目，“Decision Support(DSS)/OLAP（20个左右）”、“Online Transaction Processing(OLTP)（500个左右）”、“Manual Setting（手动设置，自己输一个数）”，我这里选“Online Transaction Processing(OLTP)”，自己的服务器，应该够用了，按“Next”继续
是否启用TCP/IP连接，设定端口，如果不启用，就只能在自己的机器上访问mysql数 据库了，我这里启用，把前面的勾打上，Port Number：3306，在这个页面上，您还可以选择“启用标准模式”（Enable Strict Mode），这样MySQL就不会允许细小的语法错误。如果您还是个新手，我建议您取消标准模式以减少麻烦。但熟悉MySQL以后，尽量使用标准模式，因 为它可以降低有害数据进入数据库的可能性。按“Next”继续
西文编码，第二个是多字节的通用utf8编码，都不是我们通用的编码，这里选择第三个，然 后在Character Set那里选择或填入“gbk”，当然也可以用“gb2312”，区别就是gbk的字库容量大，包括了gb2312的所有汉字，并且加上了繁体字、和其它 乱七八糟的字——使用mysql的时候，在执行数据操作命令之前运行一次“SET NAMES GBK;”（运行一次就行了，GBK可以替换为其它值，视这里的设置而定），就可以正常的使用汉字（或其它文字）了，否则不能正常显示汉字。按 “Next”继续。[1]
选择是否将mysql安装为windows服务，还可以指定Service Name（服务标识名称），是否将mysql的bin目录加入到Windows PATH（加入后，就可以直接使用bin下的文件，而不用指出目录名，比如连接，“mysql.exe -uusername -ppassword;”就可以了，不用指出mysql.exe的完整地址，很方便），我这里全部打上了勾，Service Name不变。按“Next”继续。选择是否将mysql安装为windows服务，还可以指定Service Name（服务标识名称），是否将mysql的bin目录加入到Windows PATH（加入后，就可以直接使用bin下的文件，而不用指出目录名，比如连接，“mysql.exe -uusername -ppassword;”就可以了，不用指出mysql.exe的完整地址，很方便），我这里全部打上了勾，Service Name不变。按“Next”继续。
这一步询问是否要修改默认root用户（超级管理）的密码（默认为空），“New root password”如果要修改，就在此填入新密码（如果是重装，并且之前已经设置了密码，在这里更改密码可能会出错，请留空，并将“Modify Security Settings”前面的勾去掉，安装配置完成后另行修改密码），“Confirm（再输一遍）”内再填一次，防止输错。 “Enable root access from remote machines（是否允许root用户在其它的机器上登陆，如果要安全，就不要勾上，如果要方便，就勾上它）”。最后“Create An Anonymous Account（新建一个匿名用户，匿名用户可以连接数据库，不能操作数据，包括查询）”，一般就不用勾了，设置完毕，按“Next”继续。
确认设置无误，如果有误，按“Back”返回检查。按“Execute”使设置生效。
设置完毕，按“Finish”结束mysql的安装与配置——这里有一个比较常见的错误， 就是不能“Start service”，一般出现在以前有安装mysql的服务器上，解决的办法，先保证以前安装的mysql服务器彻底卸载掉了；不行的话，检查是否按上面一 步所说，之前的密码是否有修改，照上面的操作；如果依然不行，将mysql安装目录下的data文件夹备份，然后删除，在安装完成后，将安装生成的 data文件夹删除，备份的data文件夹移回来，再重启mysql服务就可以了，这种情况下，可能需要将数据库检查一下，然后修复一次，防止数据出错。
安装问题
1．如果是用MySQL+Apache，使用的又是FreeBSD网路操作系统的话，安装时候你应按注意到FreeBSD的版本问题，在FreeBSD的3.0以下版本来说，MySQLSource内含的MIT-pthread运行是正常的，但在这版本以上，你必须使用nativethreads，也就是加入一个with-named-thread-libs=-lc_r的选项。
2．如果在COMPILE过程中出了问题，请先检查你的gcc版本是否在2.81版本以上，gmake版本是否在3.75以上。
3．如果不是版本的问题，那可能是你的内存不足，请使用./configure--with-low-memory来加入。
4．如果要重新做你的configure，那么你可以键入rmconfig.cache和makeclean来清除记录。
5．把MySQL安装在/usr/local目录下，这是缺省值，您也可以按照你的需要设定你所安装的目录。
报错解决
[2]1．Starting MySQL.Manager of pid-file quit without updating fi[失败]
关于这个错误原因有很多，最大的可能是没有创建测试数据库，可以用/usr/local/mysql/scripts/mysql_install_db –user=mysql命令进行创建；另外一个原因可能是权限设置问题，需要赋予mysql的data权限，可以用chmod -R 命令。
2．FATAL ERROR: Could not find /home/mysql/bin/my_print_defaults If you are using a binary release,you must run this script from
within the directory the archive extracted into. If you compiled
MySQL yourself you must run ‘make install’ first.
这个错误，是没有指明mysql的date路径导致的，可以很简单的进行解决：
vim /etc/my.cnf
在[mysqld] 后面加上路径：
basedir = /usr/local/mysql
datadir =/opt/data；
3．-bash: mysql: command not found
用mysql命令进行登陆mysql报错，原因是没有设置环境变量，需要设置，或者进入到bin目录进行登陆cd /usr/local/mysql/bin
mysql -u root
4．ERROR 1130: Host ’192.168.1.3′ is not allowed to connect to this MySQL server
用mysql远程工具链接数据库报错，这个错误原因是没有开放远程链接功能，可以在mysql里面输入如下命令进行解决：GRANT ALL PRIVILEGES ON *.* TO ’root‘@’%' IDENTIFIED BY ’password’ WITH GRANT OPTION;
基本命令
[ ]中的内容为可选项
--创建数据库
mysql> create database 数据库名称
--创建表
mysql> create table 表名 (
列的名字（id）类型（int（4））primary key(定义主键) auto_increment（描述 自增），
……，
）；
--查看所有数据库
mysql> show databases ;
--使用某个数据库
mysql> use 数据库名称；
--查看所使用数据库下所有的表
mysql> show tables;
--显示表的属性结构
mysql> desc 表名；
--选择表中数据的显示
--* 代表选择所有列 ，
mysql> select * from 表名 where id=?[and name=？] [or name=?];
mysql> select id,name from 表名order by 某一列的名称 desc(降序，asc为升序)
--删除表中的数据
mysql> delete from table where id=？[or name=? (and name=?)];
--删除表
mysql> drop table;
--删除数据库
mysql> drop database;
初学基础
一、连接MYSQL格式：mysql -h主机地址 -u用户名 －p用户密码
1．例1：连接到本机上的MYSQL。
首先在打开DOS窗口，然后进入目录 mysqlbin，再键入命令mysql -uroot -p，回车后提示你输密码，如果刚安装好MYSQL，超级用户root是没有密码的，故直接回车即可进入到MYSQL中了，MYSQL的提示符是：mysql>
2．例2：连接到远程主机上的MYSQL。假设远程主机的IP为：110.110.110.110，用户名为root,密码为abcd123。则键入以下命令：
mysql -h110.110.110.110 -uroot -pabcd123
（注：u与root可以不用加空格，其它也一样）
3．退出MYSQL命令：exit （回车）
注意：想要成功连接到远程主机，需要在远程主机打开MySQL远程访问权限
方法如下：
在远程主机中以管理员身份进入
输入如下命令
mysql>GRANT ALL PRIVILEGES ON *.* TO 'agui'@%'IDENTIFIEDBY '123' WITH GRANT OPTION; 
FLUSH PRIVILEGES;
//赋予任何主机访问数据的权限
mysql>FLUSH PRIVILEGES 
//修改生效
agui为我们使用的用户名
密码为123
即：在远程主机上作好设置，我们即可通过mysql -h110.110.110.110 -uagui -p123连接进远程主机二、修改密码格式：mysqladmin -u用户名 -p旧密码 password 新密码
1．例1：给root加个密码ab12。首先在DOS下进入目录mysqlbin，然后键入以下命令
mysqladmin -uroot -password ab12
注：因为开始时root没有密码，所以-p旧密码一项就可以省略了。
2．例2：再将root的密码改为djg345。
mysqladmin -uroot -pab12 password djg345三、增加新用户（注意：和上面不同，下面的因为是MYSQL环境中的命令，所以后面都带一个分号作为命令结束符）
格式：grant select on 数据库.* to 用户名@登录主机 identified by “密码”
例1、增加一个用户test1密码为abc，让他可以在任何主机上登录，并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入MYSQL，然后键入以下命令：
grant select,insert,update,delete on *.* to test1@“%” Identified by “abc”；
但例1增加的用户是十分危险的，你想如某个人知道test1的密码，那么他就可以在internet上的任何一台电脑上登录你的mysql数据库并对你的数据可以为所欲为了，解决办法见例2。
例2、增加一个用户test2密码为abc,让他只可以在localhost上登录，并可以对数据库mydb进行查询、插入、修改、删除的操作（localhost指本地主机，即MYSQL数据库所在的那台主机），这样用户即使用知道test2的密码，他也无法从internet上直接访问数据库，只能通过MYSQL主机上的web页来访问了。
grant select,insert,update,delete on mydb.* to test2@localhost identified by “abc”；
如果你不想test2有密码，可以再打一个命令将密码消掉。
grant select,insert,update,delete on mydb.* to test2@localhost identified by “”；
下面来看看MYSQL中有关数据库方面的操作。注意：必须首先登录到MYSQL中，以下操作都是在MYSQL的提示符下进行的，而且每个命令以分号结束。四、操作技巧1．如果你打命令时，回车后发现忘记加分号，你无须重打一遍命令，只要打个分号回车就可以了。也就是说你可以把一个完整的命令分成几行来打，完后用分号作结束标志就OK。
2．你可以使用光标上下键调出以前的命令。但以前我用过的一个MYSQL旧版本不支持。我现在用的是mysql-3.23.27-beta-win。五、显示命令1．显示数据库列表。
show databases;
刚开始时才两个数据库：mysql和test。mysql库很重要它里面有MYSQL的系统信息，我们改密码和新增用户，实际上就是用这个库进行操作。
2．显示库中的数据表：
use mysql； //打开库，学过FOXBASE的一定不会陌生吧
show tables;
3．显示数据表的结构：
describe 表名；
4．建库：
create database 库名；
5．建表：
use 库名；
create table 表名 (字段设定列表)；
6．删库和删表：
drop database 库名；
drop table 表名；
7、将表中记录清空：
delete from 表名；
8．显示表中的记录：
select * from 表名；
9、显示最后一个执行的语句所产生的错误、警告和通知：
show warnings;
10．只显示最后一个执行语句所产生的错误：
show errors;六、实例drop database if exists school; //如果存在SCHOOL则删除
create database school; //建立库SCHOOL
use school; //打开库SCHOOL
create table teacher //建立表TEACHER
(
id int(3) auto_increment not null primary key,
name char(10) not null,
address varchar(50) default ‘深圳',
year date
); //建表结束
//以下为插入字段
insert into teacher values('','glchengang',’XX公司‘，'1976-10-10');
insert into teacher values('','jack',’XX公司‘，'1975-12-23');
注：在建表中：
1．将ID设为长度为3的数字字段：int(3)并让它每个记录自动加一：auto_increment并不能为空：not null而且让他成为主字段primary key。
2．将NAME设为长度为10的字符字段。
3．将ADDRESS设为长度50的字符字段，而且缺省值为深圳。varchar和char有什么区别呢，只有等以后的文章再说了。
4．将YEAR设为日期字段。
如果你在mysql提示符键入上面的命令也可以，但不方便调试。你可以将以上命令原样写入一个文本文件中假设为school.sql，然后复制到c:\下，并在DOS状态进入目录\mysql\bin，然后键入以下命令：
mysql -uroot -p密码 < c:\school.sql
如果成功，空出一行无任何显示；如有错误，会有提示。（以上命令已经调试，你只要将//的注释去掉即可使用）。七、文本转到数据库1．文本数据应符合的格式：字段数据之间用tab键隔开，null值用\n来代替.
例：
3．rose 深圳二中 1976-10-10
4．mike 深圳一中 1975-12-23
2．数据传入命令 load data local infile “文件名” into table 表名；
注意：你最好将文件复制到\mysql\bin目录下，并且要先用use命令打开表所在的数据库。八、备份数据库（命令在DOS的\mysql\bin目录下执行）
mysqldump --opt school>school.bbb
注释：将数据库school备份到school.bbb文件，school.bbb是一个文本文件，文件名任取，打开看看你会有新发现。
自动备份mysql数据库的方法
[3]1、先是建立批处理文件，将以下代码另存为.bat文件，文件名最好为英文。注意下面的路径，以笔者自己的数据库为例，数据库安装在D盘下mysql\mysql下，备份位置在F:\beifen，后面的代码是日期。
[4]@echo off
color 0D
MODE con: COLS=71 LINES=25
title mysql数据库自动备份脚本(任务计划)--脚本作者：http://www。***。com
set sou_dir="D:\mysql\Mysql\data"
set obj_dir=F:\beifen\%date:~0,10%
net stop mysql
md %obj_dir%
xcopy /e /y %sou_dir% %obj_dir%
net start mysql
@echo off&setlocal enabledelayedexpansion
call:D,30
echo. 30天前日期为：%D%
echo. 删除30天以前备份......
if exist F:\beifen\%D% rd /s /q F:\beifen\%D%
echo 自动备份完成，程序将自动退出......九、还原/导入数据库还原/导入数据库[5]，导入过程，进入mysql数据库控制台，如mysql -u root -p
mysql>use 数据库
然后使用source命令，后面参数为脚本文件(如这里用到的.sql)
mysql>source d:\dbname.sql
如果提示找不到文件，输完sourw后，可以用鼠标把文件直接拖进命令行窗口十、启动跟踪文件mysqld --debug十一、关闭MySQL服务器mysqladmin -u root shutdown十二、启动MySQL服务mysqld --console
安全设置
一、内部安全性-保证数据目录访问的安全
1．1 数据库文件。
1．2 日志文件。
二、外部安全性-保证网络访问的安全
2．1 MySQL授权表的结构和内容
2．2 服务器控制客户访问
2．3 避免授权表风险
2．4 不用GRANT设置用户
管理工具
可以使用命令行工具管理MySQL数据库（命令mysql 和 mysqladmin)，也可以从MySQL的网站下载图形管理工具MySQL Administrator,MySQL Query Browser和MySQL Workbench。
phpMyAdmin是由php写成的MySQL资料库系统管理程程序，让管理者可用Web界面管理MySQL资料库。
phpMyBackupPro也是由PHP写成的，可以透过Web界面创建和管理数据库。它可以创建伪cronjobs，可以用来自动在某个时间或周期备份MySQL 数据库。　
另外，还有其他的GUI管理工具，例如mysql-front 以及 ems mysql manager,navicat 等等。
解决方法
MySQL中文排序错误的解决方法一. 方法1在MySQL数据库中，进行中文排序和查找的时候，对汉字的排序和查找结果是错误的。这种情况在MySQL的很多版本中都存在。如果这个问题不解决，那么MySQL将无法实际处理中文。
出现这个问题的原因是：MySQL在查询字符串时是大小写不敏感的，在编绎MySQL时一般以ISO-8859字符集作为默认的字符集，因此在比较过程中中文编码字符大小写转换造成了这种现象，一种解决方法是对于包含中文的字段加上"binary"属性，使之作为二进制比较，例如将"name char(10)"改成"name char(10)binary"。二. 方法2如果你使用源码编译MySQL，可以编译MySQL时使用--with--charset=gbk 参数，这样MySQL就会直接支持中文查找和排序了。[1]
授权问题
mysql遵守的不只是GPL协议，而是双授权模式（dual license）[6] 即你在遵守GPL协议的开源项目使用mysql，需要遵守GPL协议方能使用。如果你在非开源项目使用（即软件不打算开放源代码），且该软件用来销售，则需要向mysql支付相应license费用。[7]