MYSQL导入导出.sql文件

一.MYSQL的命令行模式的设置:
桌面->我的电脑->属性->环境变量->新建->
PATH=“;path\mysql\bin;”其中path为MYSQL的安装路径。
二.简单的介绍一下命令行进入MYSQL的方法:
1.C:\>mysql -h hostname -u username -p
按ENTER键,等待然后输入密码。这里hostname为服务器的名称,如localhost,username为MYSQL的用户名,如root。
进入命令行后可以直接操作MYSQL了。
2.简单介绍一下MYSQL命令:
   mysql->CREATE DATABASE dbname;//创建数据库
   mysql->CREATE TABLE tablename;//创建表
   mysql->SHOW DATABASES;//显示数据库信息,有那些可用的数据库。
  mysql->USE dbname;//选择数据库
   mysql->SHOW TABLES;//显示表信息,有那些可用的表
   mysql->DESCRIBE tablename;//显示创建的表的信息
三.从数据库导出数据库文件:
1.将数据库mydb导出到e:\mysql\mydb.sql文件中:
打开开始->运行->输入cmd    进入命令行模式
c:\>mysqldump -h localhost -u root -p mydb >e:\mysql\mydb.sql
然后输入密码,等待一会导出就成功了,可以到目标文件中检查是否成功。
2.将数据库mydb中的mytable导出到e:\mysql\mytable.sql文件中:
c:\>mysqldump -h localhost -u root -p mydb mytable>e:\mysql\mytable.sql
3.将数据库mydb的结构导出到e:\mysql\mydb_stru.sql文件中:
c:\>mysqldump -h localhost -u root -p mydb –add-drop-table >e:\mysql\mydb_stru.sql
四.从外部文件导入数据到数据库中:
从e:\mysql\mydb2.sql中将文件中的SQL语句导入数据库中:
1.从命令行进入mysql,然后用命令CREATE DATABASE mydb2;创建数据库mydb2。
2.退出mysql 可以输入命令exit;或者quit;
3.在CMD中输入下列命令:
c:\>mysql -h localhost -u root -p mydb2 < e:\mysql\mydb2.sql
然后输入密码,就OK了。
五.下面谈一下关于导入文件大小限制问题的解决:
默认情况下:mysql 对导入文件大小有限制的,最大为2M,所以当文件很大时候,直接无法导入,下面就这个问题的解决列举如下:
1.在php.ini中修改相关参数:
影响mysql导入文件大小的参数有三个:
    memory_limit=128M,upload_max_filesize=2M,post_max_size=8M
修改upload_max_filesize=200 M  这里修改满足你需要的大小,
可以同时修改其他两项memory_limit=250M  post_max_size=200M
这样就可以导入200M以下的.sql文件了。

mysql命令记录

从网络上收集,记性不大好使在此做个记录,呵呵

启动mysql服务

引用
    MySQL注册为服务:installdir\bin\mysqld-nt -install

    启动MySQL服务:net start mysql

    停止MySQL服务:net stop mysql

    卸载MySQL服务:installdir\bin\mysqld-nt -remove

启动mysql服务1067错误处理   

   

引用
在windows安装目录下打开my.ini文件,编辑内容(如果没有该文件

    ,则新建一个),至少包含basedir,datadir这两个基本的配置。

    [mysqld]

    # 设置为MYSQL的安装目录

    basedir=d:\mysql6.0

    # 设置为MYSQL的数据目录

    datadir=d:\mysql6.0\data

修改密码:SET PASSWORD FOR root@localhost=PASSWORD(“garyzhou”);

切换数据库:use dbname;

显示所有数据库:show databases;

显示表:show tables;

显示表结构:describe [tablename];

mysql命令

测试环境:mysql 5.0.45

【注:可以在mysql中通过mysql> SELECT VERSION();来查看数据库版本】

整理:leo

一、连接MYSQL。

格式: mysql -h主机地址 -u用户名 -p用户密码

1、连接到本机上的MYSQL。

首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root -p,回车后提示你输密码.注意用户名前可以有空格也可以没有空格,但是密码前必须没有空格,否则让你重新输入密码.

如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是: mysql>

2、连接到远程主机上的MYSQL。假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。则键入以下命令:

mysql -h110.110.110.110 -u root -p 123;(注:u与root之间可以不用加空格,其它也一样)

3、退出MYSQL命令: exit (回车)

二、修改密码。

格式:mysqladmin -u用户名 -p旧密码 password 新密码

1、给root加个密码ab12。首先在DOS下进入目录mysql\bin,然后键入以下命令

mysqladmin -u root -password ab12

注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。

2、再将root的密码改为djg345。

mysqladmin -u root -p ab12 password djg345

三、增加新用户。

(注意:和上面不同,下面的因为是MYSQL环境中的命令,所以后面都带一个分号作为命令结束符)

格式:grant select on 数据库.* to 用户名@登录主机 identified by “密码”

1、增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用root用户连入MYSQL,然后键入以下命令:

grant select,insert,update,delete on *.* to [email=test1@”%]test1@”%[/email]” Identified by “abc”;

但增加的用户是十分危险的,你想如某个人知道test1的密码,那么他就可以在internet上的任何一台电脑上登录你的mysql数据库并对你的数据可以为所欲为了,解决办法见2。

2、增加一个用户test2密码为abc,让他只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的操作(localhost指本地主机,即MYSQL数据库所在的那台主机),

这样用户即使用知道test2的密码,他也无法从internet上直接访问数据库,只能通过MYSQL主机上的web页来访问了。

grant select,insert,update,delete on mydb.* to [email=test2@localhost]test2@localhost[/email] identified by “abc”;

如果你不想test2有密码,可以再打一个命令将密码消掉。

grant select,insert,update,delete on mydb.* to [email=test2@localhost]test2@localhost[/email] identified by “”;

下篇我是MYSQL中有关数据库方面的操作。注意:你必须首先登录到MYSQL中,以下操作都是在MYSQL的提示符下进行的,而且每个命令以分号结束。

一、操作技巧

1、如果你打命令时,回车后发现忘记加分号,你无须重打一遍命令,只要打个分号回车就可以了。

也就是说你可以把一个完整的命令分成几行来打,完后用分号作结束标志就OK。

2、你可以使用光标上下键调出以前的命令。

二、显示命令

1、显示当前数据库服务器中的数据库列表:

mysql> SHOW DATABASES;

注意:mysql库里面有MYSQL的系统信息,我们改密码和新增用户,实际上就是用这个库进行操作。

2、显示数据库中的数据表:

mysql> USE 库名;

mysql> SHOW TABLES;

3、显示数据表的结构:

mysql> DESCRIBE 表名;

4、建立数据库:

mysql> CREATE DATABASE 库名;

5、建立数据表:

mysql> USE 库名;

mysql> CREATE TABLE 表名 (字段名 VARCHAR(20), 字段名 CHAR(1));

6、删除数据库:

mysql> DROP DATABASE 库名;

7、删除数据表:

mysql> DROP TABLE 表名;

8、将表中记录清空:

mysql> DELETE FROM 表名;

9、显示表中的记录:

mysql> SELECT * FROM 表名;

10、往表中插入记录:

mysql> INSERT INTO 表名 VALUES (”hyq”,”M”);

11、更新表中数据:

mysql-> UPDATE 表名 SET 字段名1=’a’,字段名2=’b’ WHERE 字段名3=’c’;

12、用文本方式将数据装入数据表中:

mysql> LOAD DATA LOCAL INFILE “D:/mysql.txt” INTO TABLE 表名;

13、导入.sql文件命令:

mysql> USE 数据库名;

mysql> SOURCE d:/mysql.sql;

14、命令行修改root密码:

mysql> UPDATE mysql.user SET password=PASSWORD(’新密码’) WHERE User=’root’;

mysql> FLUSH PRIVILEGES;

15、显示use的数据库名:

mysql> SELECT DATABASE();

16、显示当前的user:

mysql> SELECT USER();

三、一个建库和建表以及插入数据的实例

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(”,’allen’,’大连一中’,’1976-10-10′);

insert into teacher values(”,’jack’,’大连二中’,’1975-12-23′);

如果你在mysql提示符键入上面的命令也可以,但不方便调试。

(1)你可以将以上命令原样写入一个文本文件中,假设为school.sql,然后复制到c:\\下,并在DOS状态进入目录\\mysql\\bin,然后键入以下命令:

mysql -uroot -p密码 < c:\\school.sql

如果成功,空出一行无任何显示;如有错误,会有提示。(以上命令已经调试,你只要将//的注释去掉即可使用)。

(2)或者进入命令行后使用 mysql> source c:\\school.sql; 也可以将school.sql文件导入数据库中。

四、将文本数据转到数据库中

1、文本数据应符合的格式:字段数据之间用tab键隔开,null值用\\n来代替.例:

3 rose 大连二中 1976-10-10

4 mike 大连一中 1975-12-23

假设你把这两组数据存为school.txt文件,放在c盘根目录下。

2、数据传入命令 load data local infile “c:\\school.txt” into table 表名;

注意:你最好将文件复制到\\mysql\\bin目录下,并且要先用use命令打表所在的库。

五、备份数据库:(命令在DOS的\\mysql\\bin目录下执行)

1.导出整个数据库

导出文件默认是存在mysql\bin目录下

mysqldump -u 用户名 -p 数据库名 > 导出的文件名

mysqldump -u user_name -p123456 database_name > outfile_name.sql

2.导出一个表

mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名

mysqldump -u user_name -p database_name table_name > outfile_name.sql

3.导出一个数据库结构

mysqldump -u user_name -p -d –add-drop-table database_name > outfile_name.sql

-d 没有数据 –add-drop-table 在每个create语句之前增加一个drop table

4.带语言参数导出

mysqldump -uroot -p –default-character-set=latin1 –set-charset=gbk –skip-opt database_name > outfile_name.sql

转mysql的一些东西。平常不常用。

14.5.3 SET 和 SHOW 语法

SET 可以用于设置各种变量或者选项。

SHOW 可以以各种形式描述数据库系统的信息,诸如数据表,字段,服务器状态等等。大致有以下这些方法:

SHOW [FULL] COLUMNS FROM tbl_name [FROM db_name] [LIKE ‘pattern’]

SHOW CREATE DATABASE db_name

SHOW CREATE TABLE tbl_name

SHOW DATABASES [LIKE ‘pattern’]

SHOW [STORAGE] ENGINES

SHOW ERRORS [LIMIT [offset,] row_count]

SHOW GRANTS FOR user

SHOW INDEX FROM tbl_name [FROM db_name]

SHOW INNODB STATUS

SHOW [BDB] LOGS

SHOW PRIVILEGES

SHOW [FULL] PROCESSLIST

SHOW STATUS [LIKE ‘pattern’]

SHOW TABLE STATUS [FROM db_name] [LIKE ‘pattern’]

SHOW [OPEN] TABLES [FROM db_name] [LIKE ‘pattern’]

SHOW [GLOBAL | SESSION] VARIABLES [LIKE ‘pattern’]

SHOW WARNINGS [LIMIT [offset,] row_count]

如果 SHOW 语法中包括 LIKE ‘pattern’ 分句的话,’pattern’ 是一个可以包括 SQL 语法中‘ % ‘和‘ _ ‘等通配符的字符串。这个模式语句对于取得相应的结果十分有用。

请注意,还有以下几种不同的标识方式:

SET PASSWOR 语句用于设定帐户的密码,详情请看“14.5.1.3 SET PASSWORD Syntax”。

SHOW 语句有以下几种方式用于描述复制主服务器和从服务器的信息:

SHOW BINLOG EVENTS

SHOW MASTER LOGS

SHOW MASTER STATUS

SHOW SLAVE HOSTS

SHOW SLAVE STATUS

   

这些格式的 SHOW 详细描述详情请看“14.6 Replication Statements”。

14.5.3.1 SET 语法

SET variable_assignment [, variable_assignment] …

variable_assignment:

      user_var_name = expr

    | [GLOBAL | SESSION] system_var_name = expr

    | @@[global. | session.]system_var_name = expr

SET 可以设置各种不同的变量类型,这些变量可以影响着服务器或者客户端的参数。它可以帮助你设置用户变量或者是系统变量。

在 MySQL 4.0.3 中,我们增加了 GLOBAL 和 SESSION 选项,并且可以在运行时动态修改系统中最重要的参数。这些可以被动态修改的系统参数详情请看“5.2.3.1 Dynamic System Variables”中会被详细描述到。

在老版本的 MySQL 中,SET 其实是 SET OPTION 的代替,它少了 OPTION 这个参数,不过现在不推荐的使用方法。

以下这个例子演示了几种使用设置变量的方法。

用户变量写成 @var_name,用以下方法来设置:

SET @var_name = expr;

用户变量的特性说明将在章节“10.3 User Variables”中提到。

系统变量在 SET 语法中可以以 var_name 的方式来引用。变量名前面用 GLOBAL 或 @@global. 来表示这是一个全局变量,用 SESSION , @@session. 或 @@ 来表示这是一个会话变量。 LOCAL 和 @@local. 其实 SESSION 和 @@session. 属同义。如果变量名前面没有附加的修饰词的话,那么 SET 只修改会话变量。

以 @@var_name这种格式来表示系统变量,在 MySQL 中是可以支持的,以兼容其它数据库系统。

如果你想在同一个语句中来修改多个系统变量,最后一次出现的 GLOBAL 或 SESSION 将作为该语句中没有修饰词的变量的默认选项。

SET sort_buffer_size=10000;

SET @@local.sort_buffer_size=10000;

SET GLOBAL sort_buffer_size=1000000, SESSION sort_buffer_size=1000000;

SET @@sort_buffer_size=1000000;

SET @@global.sort_buffer_size=1000000, @@local.sort_buffer_size=1000000;

如果你设置了系统变量时用 SESSION (默认的) 选项,那么它的值将在会话结束前或者直到你改变它之前一直有效。如果设置系统变量是用 GLOBAL 选项,这必须要求你具备 SUPER (超级) 权限,它的值从新的连接开始到系统重启前一直有效。如果你想要一个变量永久生效的话,那么可以把它放到配置文件中。详情请看“4.3.2 Using Option Files”。

为了防止操作错误,例如如果你想用 SET GLOBAL 修改一个只能用 SET SESSION 来修改的变量,或者不是用 SET GLOBAL 的方式来修改一个全局变量时, MySQL 就会报告一个错误。

如果你想让一个 SESSION (会话) 变量的值设定成为一个 GLOBAL 变量的值,或者想让 GLOBAL 变量的值变成MySQL内嵌编译的默认值的话,你可以设置它为 DEFAULT (默认值) 。以下的这 2 个例子都是同样的设置会话变量 max_join_size 的值成为全局变量的值:

SET max_join_size=DEFAULT;

SET @@session.max_join_size=@@global.max_join_size;

你可以通过 SHOW VARIABLES 命令列出绝大部分的系统变量。详情请看“14.5.3.20 SHOW VARIABLES Syntax”的语法 。如果想要通过模式匹配的方式来获取变量列表的话,可以使用 LIKE 分句:

SHOW VARIABLES LIKE ‘max_join_size’;

SHOW GLOBAL VARIABLES LIKE ‘max_join_size’;

你还可以使用 SELECT @@[global.|local.]var_name 来取得指定变量的值:

SELECT @@max_join_size, @@global.max_join_size;

在通过 SELECT @@var_name ( 这样的话,就无需指定是 global 还是 session 抑或是 local 了 ) 来取得变量的值时, MySQL 会返回 SESSION 变量的值,如果它不存在,则返回 GLOBAL 变量的值。

以下所列的是那些非标准或者是在章节“5.2.3 Server System Variables”中找没有列出来的变量。尽管这些变量用 SHOW VARIABLES 并不显示出来,但你可以用 SELECT ( CHARACTER SET 和 SET NAMES 除外 ) 来取得它们的值。例如:

mysql> SELECT @@AUTOCOMMIT;

+————–+

| @@autocommit |

+————–+

|            1 |

+————–+

AUTOCOMMIT = {0 | 1}

设置 autocommit (自动提交)模式。若设置为 1 ,则所有对数据表的操作都会立即生效。若设置为 0 ,则必须执行 COMMIT 以提交事务或者执行 ROLLBACK 取消事务。如果把 AUTOCOMMIT 由 0 改成 1 , MySQL 会自动提交任何一个开放的事务。开始一个事务的另一个方法可以是执行 START TRANSACTION 或 BEGIN 语句。详情请看“14.4.1 START TRANSACTION, COMMIT, and ROLLBACK Syntax”。

BIG_TABLES = {0 | 1}

如果被设置为 1,则所有的临时表将存放在磁盘里而非内存。这会使速度变得稍微慢了点,但是在执行 SELECT 操作时需要一个大临时表的情况下就不再会报告 The table tbl_name is full 错误了。对于新连接,它的默认值是 0(在内存中存放临时表) 。从 MySQL 4.0 起,你无需设置这个变量,因为 MySQL 会自动在需要的情况下将内存存储的表转换为硬盘存储的表。这个变量现在的名字是 SQL_BIG_TABLES 。

CHARACTER SET {charset_name | DEFAULT}

它用于将从客户端取得的以及发往客户端的字符串都映射成指定的字符串。在 MySQL 4.1 以前,唯一允许的字符集是 cp1251_koi8 ,不过你也可以通过修改 MySQL 发布的源代码中的 `sql/convert.cc’ 文件来增加新的转换字符集。从 MySQL 4.1.1 开始,SET CHARACTER SET 将设置 3 个会话系统变量: character_set_client 和 character_set_results 会被设置成指定的字符集, character_set_connection 的值被设置成 character_set_database 的值。默认的转换字符集可以被重置为值 DEFAULT (默认值) 。请注意,SET CHARACTER SET 的语法和其它大多数设置选项的语法不一样。

FOREIGN_KEY_CHECKS = {0 | 1}

如果它设置为 1 (默认值) ,则 InnoDB 表都会检查外键约束关系。如果设置为 0 ,则会略过,不做检查。禁止外键约束关系检查在重新加载和实际所要求的父子关系顺序不一致顺序的 InnoDB 表时非常有用。这个变量是在 MySQL 3.23.52 中新增的。详情请看“16.7.4 FOREIGN KEY Constraints”。

IDENTITY = value

这个变量和变量 LAST_INSERT_ID 实际上是一样的。它的存在是为了与其它数据库系统兼容。从 MySQL 3.23.25 开始,可以通过执行 SELECT @@IDENTITY 来获得它的值。从 MySQL 4.0.3 开始,还可以执行 SET IDENTITY 来改变它的值。

INSERT_ID = value

修改它的值可以作为在执行 INSERT 或 ALTER TABLE 语句中要插入一个 AUTO_INCREMENT 值时的下一个值。它主要用于二进制日志(binary log)。

LAST_INSERT_ID = value

修改它的值可以作为 LAST_INSERT_ID() 的返回值。当数据表被更新时它的值会存放在二进制日志中,可以执行 LAST_INSERT_ID() 语句来取得它的值。设置它的值不会改变 C API 函数 mysql_insert_id() 返回的结果值。

NAMES {‘charset_name’ | DEFAULT}

SET NAMES 设置了 3 个会话变量 character_set_client , character_set_connection 和 character_set_results 为指定的字符集。默认的映射关系可以设定为 DEFAULT。请注意, SET NAMES 语法也不同于大多数其它的设置选项。它是自从 MySQL 4.1.0 以后才开始有的。

SQL_AUTO_IS_NULL = {0 | 1}

如果被设置为 1 ( 默认值 ) ,则可以通过以下语句来获得某个包含 AUTO_INCREMENT 类型字段的表最后一条插入的记录:

WHERE auto_increment_column IS NULL

这种做法在某些 ODBC 程序中会被用到,例如 Access 。 SQL_AUTO_IS_NULL 变量是在 MySQL 3.23.52 中新增的。

SQL_BIG_SELECTS = {0 | 1}

如果设置为 0 ,则 MySQL 会放弃那些可能会耗费很长时间(是指那些通过优化程序估计到需要检查的行数会超过 max_join_size 设定值的情况)的 SELECT 语句。这在有不可取的 WHERE 语句出现时十分有用。 每个新连接的 SQL_BIG_SELECTS 默认值为 1 ,以允许执行所有的 SELECT 语句。如果设置系统变量 max_join_size 为非默认值( DEFAULT ),则 SQL_BIG_SELECTS 也会被自动设置成为 0。

SQL_BUFFER_RESULT = {0 | 1}

SQL_BUFFER_RESULT 强制将 SELECT 语句查询的结果放在临时表中。这可以让 MySQL 尽快释放加载表上的锁,同时还有助于改善向客户端发送结果需要较长时间的情况。这个变量是在 MySQL 3.23.13 中新增的。

SQL_LOG_BIN = {0 | 1}

如果设置为 0,就不再记录任何二进制日志了。必须要有 SUPER (超级) 权限方可修改它的值。这个变量是在 MySQL 3.23.13 中新增的。

SQL_LOG_OFF = {0 | 1}

如果设置为 1 ,系统将不记录任何普通的查询日志。必须要有 SUPER (超级) 权限方可修改它的值。

SQL_LOG_UPDATE = {0 | 1}

如果设置为 0 ,更新日志将不记录任何日志。必须要有 SUPER (超级) 权限方可修改它的值。这个变量是在 MySQL 3.22.5 中新增的。从 MySQL 5.0.0 开始,它已经建议不再使用,而变成了 SQL_LOG_BIN ( 详情请看“C.1.3 Changes in release 5.0.0 (22 Dec 2003: Alpha” ) 。

SQL_QUOTE_SHOW_CREATE = {0 | 1}

如果设置为 1 ,则在执行 SHOW CREATE TABLE 时就会把数据表名和字段用引号引起来;如果设置为 0 ,就不再引用了。这个选项默认是打开的,因为在数据库同步时需要所有的表名和字段名都必须引用起来才行。这个选项是在 MySQL 3.23.26 中新增的。详细的请查看“14.5.3.6 SHOW CREATE TABLE Syntax”。

SQL_SAFE_UPDATES = {0 | 1}

如果设置为 1 ,则 MySQL 会放弃那些在 WHERE 或 LIMIT 分句中没有使用键的 UPDATE 或 DELETE 语句。这就可能会捕获那些没有正确使用键并且可能会删除很多记录的 UPDATE 或 DELETE 语句。这个变量是在 MySQL 3.22.32 中新增的。

SQL_SELECT_LIMIT = {value | DEFAULT}

它决定了执行 SELECT 语句时返回的最大记录数。新连接的默认设置值是“ unlimited (无限)”。如果它被改变了,可以设定重新设 SQL_SELECT_LIMIT 的值定为 DEFAULT 以将它恢复为默认值。当 SELECT 语句中有 LIMIT 分句时, LIMIT 优先级高于 SQL_SELECT_LIMIT 的值。

SQL_WARNINGS = {0 | 1}

它决定了在执行单行 INSERT 语句(译者注:一次只有一个 INSERT 语句)发生错误的情况下,是否要报告错误信息。它的默认值是 0 ,如果设置为 1 ,则会在发生错误时报告错误信息。这个变量是在 MySQL 3.22.11 中新增的。

TIMESTAMP = {timestamp_value | DEFAULT}

它可以设定系统时间。它用于取二进制日志用于恢复记录时来取得原始时间戳。timestamp_value 必须是 Unix 时间戳,而不是 MySQL 时间戳。

UNIQUE_CHECKS = {0 | 1}

如果设定为 1 (默认值),就会对 InnoDB 表的第二索引做唯一性检查。如果设置为 0 ,就不再做唯一性检查。这个变量是在 MySQL 3.23.52 中新增的。详情请看“16.7.4 FOREIGN KEY Constraints”。

14.5.3.2 SHOW CHARACTER SET 语法

SHOW CHARACTER SET [LIKE ‘pattern’]

SHOW CHARACTER SET 列出了所有可用的字符集。它有一个可选项是 LIKE 分句以示匹配哪些字符集。例如:

mysql> SHOW CHARACTER SET LIKE ‘latin%’;

+———+—————————–+——————-+——–+

| Charset | Description                 | Default collation | Maxlen |

+———+—————————–+——————-+——–+

| latin1  | ISO 8859-1 West European    | latin1_swedish_ci |      1 |

| latin2  | ISO 8859-2 Central European | latin2_general_ci |      1 |

| latin5  | ISO 8859-9 Turkish          | latin5_turkish_ci |      1 |

| latin7  | ISO 8859-13 Baltic          | latin7_general_ci |      1 |

+———+—————————–+——————-+——–+

Maxlen 字段显示了储存一个字符使用的最大字节数。

SHOW CHARACTER SET 是在 MySQL 4.1.0 中新增的。

14.5.3.3 SHOW COLLATION 语法

SHOW COLLATION [LIKE ‘pattern’]

SHOW COLLATION 的结果包括了所有可用的字符集。它有一个可选项是 LIKE 分句以示匹配哪些校对。例如:

mysql> SHOW COLLATION LIKE ‘latin1%’;

+——————-+———+—-+———+———-+———+

| Collation         | Charset | Id | Default | Compiled | Sortlen |

+——————-+———+—-+———+———-+———+

| latin1_german1_ci | latin1  |  5 |         |          |       0 |

| latin1_swedish_ci | latin1  |  8 | Yes     | Yes      |       0 |

| latin1_danish_ci  | latin1  | 15 |         |          |       0 |

| latin1_german2_ci | latin1  | 31 |         | Yes      |       2 |

| latin1_bin        | latin1  | 47 |         | Yes      |       0 |

| latin1_general_ci | latin1  | 48 |         |          |       0 |

| latin1_general_cs | latin1  | 49 |         |          |       0 |

| latin1_spanish_ci | latin1  | 94 |         |          |       0 |

+——————-+———+—-+———+———-+———+

Default 字段表示其是否为该字符集的默认校对。Compiled 字段表示该校对是否预编译到服务器中了。Sortlen 字段表示需要多少内存用来对字符集中的字符串表示进行排序。

SHOW COLLATION 是在 MySQL 4.1.0 中新增的。

14.5.3.4 SHOW COLUMNS 语法

SHOW [FULL] COLUMNS FROM tbl_name [FROM db_name] [LIKE ‘pattern’]

SHOW COLUMNS 列出了给定表的所有字段。请注意,如果看到的字段类型和你以前用 CREATE TABLE 创建的字段类型不同的话,可能是 MySQL 有时候会在创建或修改表结构时修改字段类型。什么情况下 MySQL 会改变字段类型详情请看“14.2.6.1 Silent Column Specification Changes”。

从 MySQL 3.23.32 开始,就可以使用关键字 FULL 了。它使得输出的结果包括了当前用户对每个字段所具备的权限。从 MySQL 4.1 开始,关键字 FULL 也会令每个字段的注释显示出来。

还可以选择是否使用 db_name.tbl_name 的语法格式。以下的这2个语句是一样的:

mysql> SHOW COLUMNS FROM mytable FROM mydb;

mysql> SHOW COLUMNS FROM mydb.mytable;

SHOW FIELDS 和 SHOW COLUMNS 是一样的。同时还可以通过命令 mysqlshow db_name tbl_name 来列出所有的字段。

DESCRIBE 语句和 SHOW COLUMNS 显示的结果信息类似。详情请看“14.3.1 DESCRIBE Syntax (Get Information About Columns)”。

14.5.3.5 SHOW CREATE DATABASE 语法

SHOW CREATE DATABASE db_name

根据给定的数据库显示一个完整的 CREATE DATABASE 语句。它是在 MySQL 4.1 中新增的。

mysql> SHOW CREATE DATABASE test\G

*************************** 1. row ***************************

       Database: test

Create Database: CREATE DATABASE `test`

                 /*!40100 DEFAULT CHARACTER SET latin1 */

14.5.3.6 SHOW CREATE TABLE 语法

SHOW CREATE TABLE tbl_name

根据给定的数据表显示一个完整的 CREATE TABLE 语句。它是在 MySQL 3.23.20 中新增的。

mysql> SHOW CREATE TABLE t\G

*************************** 1. row ***************************

       Table: t

Create Table: CREATE TABLE t (

  id INT(11) default NULL auto_increment,

  s char(60) default NULL,

  PRIMARY KEY (id)

) TYPE=MyISAM default charset utf8

SHOW CREATE TABLE 根据参数 SQL_QUOTE_SHOW_CREATE 的值来决定是否要把表名和字段名用引号引用起来。详情请看“14.5.3.1 SET Syntax”。

14.5.3.7 SHOW CREATE VIEW 语法

SHOW CREATE VIEW view_name

根据给定的试图名显示一个完整的 CREATE VIEW 语句。它是在 MySQL 5.0.1 中新增的。

mysql> SHOW CREATE VIEW v;

+——-+—————————————————-+

| Table | Create Table                                       |

+——-+—————————————————-+

| v     | CREATE VIEW `test`.`v` AS select 1 AS `a`,2 AS `b` |

+——-+—————————————————-+

这个语法是在 MySQL 5.0.1 加上的。

14.5.3.8 SHOW DATABASES 语法

SHOW DATABASES [LIKE ‘pattern’]

SHOW DATABASES 列出了 MySQL 服务器上所有的数据库,通过 mysqlshow 命令也可以得到同样的结果。从 MySQL 4.0.2 开始,如果没有全局的 mysqlshow 权限的话,就只能列出那些有相关权限的数据库了。

如果服务器启动时增加参数 –skip-show-database,并且你没有 SHOW DATABASES 权限的话,就无法通过这个语句来列出数据库了。

14.5.3.9 SHOW ENGINES 语法

SHOW [STORAGE] ENGINES

SHOW ENGINES 显示了存储引擎相关的状态信息。这对检查是否支持某种存储引擎或者什么存储引擎是默认的非常有用。这个语句是在 MySQL 4.1.2 实现的。SHOW TABLE TYPES 跟它一样,但是不推荐使用。

mysql> SHOW ENGINES\G

*************************** 1. row ***************************

Engine: MyISAM

Support: DEFAULT

Comment: Default engine as of MySQL 3.23 with great performance

*************************** 2. row ***************************

Engine: HEAP

Support: YES

Comment: Alias for MEMORY

*************************** 3. row ***************************

Engine: MEMORY

Support: YES

Comment: Hash based, stored in memory, useful for temporary tables

*************************** 4. row ***************************

Engine: MERGE

Support: YES

Comment: Collection of identical MyISAM tables

*************************** 5. row ***************************

Engine: MRG_MYISAM

Support: YES

Comment: Alias for MERGE

*************************** 6. row ***************************

Engine: ISAM

Support: NO

Comment: Obsolete storage engine, now replaced by MyISAM

*************************** 7. row ***************************

Engine: MRG_ISAM

Support: NO

Comment: Obsolete storage engine, now replaced by MERGE

*************************** 8. row ***************************

Engine: InnoDB

Support: YES

Comment: Supports transactions, row-level locking, and foreign keys

*************************** 9. row ***************************

Engine: INNOBASE

Support: YES

Comment: Alias for INNODB

*************************** 10. row ***************************

Engine: BDB

Support: YES

Comment: Supports transactions and page-level locking

*************************** 11. row ***************************

Engine: BERKELEYDB

Support: YES

Comment: Alias for BDB

*************************** 12. row ***************************

Engine: NDBCLUSTER

Support: YES

Comment: Clustered, fault-tolerant, memory-based tables

*************************** 13. row ***************************

Engine: NDB

Support: YES

Comment: Alias for NDBCLUSTER

*************************** 14. row ***************************

Engine: EXAMPLE

Support: YES

Comment: Example storage engine

*************************** 15. row ***************************

Engine: ARCHIVE

Support: YES

Comment: Archive storage engine

Support 字段的值表明是否支持什么存储引擎和哪种存储引擎是默认的。例如,如果服务器启动时增加参数 –default-table-type=InnoDB,那么 InnoDB 这行的 Support 字段的值就是 DEFAULT 。

14.5.3.10 SHOW ERRORS 语法

SHOW ERRORS [LIMIT [offset,] row_count]

SHOW COUNT(*) ERRORS

这个语句跟 SHOW WARNINGS 类似,不同之处是 SHOW WARNINGS 同时显示了错误,警告以及注意,而它却只显示错误信息。SHOW ERRORS 是从 MySQL 4.1.0 开始有的。

LIMIT 分句和的 SELECT 语法一样,详情请看“14.1.7 SELECT Syntax”。

SHOW COUNT(*) ERRORS 语句显示了错误信息的总记录数。也可以通过取得变量 error_count 的值来获得总错误记录数:

SHOW COUNT(*) ERRORS;

SELECT @@error_count;

详情请看“14.5.3.21 SHOW WARNINGS Syntax”。

14.5.3.11 SHOW GRANTS 语法

SHOW GRANTS FOR user

该语句列出了某个 MySQL 帐户用 GRANT 语句授权的全部权限。

mysql> SHOW GRANTS FOR ‘root’@’localhost’;

+———————————————————————+

| Grants for root@localhost                                           |

+———————————————————————+

| GRANT ALL PRIVILEGES ON *.* TO ‘root’@’localhost’ WITH GRANT OPTION |

+———————————————————————+

从 MySQL 4.1.2 开始,也可以使用以下几个语句之一来列出当前会话具备的权限:

SHOW GRANTS;

SHOW GRANTS FOR CURRENT_USER;

SHOW GRANTS FOR CURRENT_USER();

在 MySQL 4.1.2 以前,可以通过函数 CURRENT_USER() (MySQL 4.0.6 新增的 ) 的值来知道当前会话授权给哪个用户,并且把它的值用于 SHOW GRANTS 语句中。详情请看“13.8.3 Information Functions”。

SHOW GRANTS 是在 MySQL 3.23.4 中新增的。

14.5.3.12 SHOW INDEX 语法

SHOW INDEX FROM tbl_name [FROM db_name]

SHOW INDEX 很像 ODBC 的 SQLStatistics 调用,它按照一定的格式返回数据表的索引信息。

SHOW INDEX 返回以下字段:

Table

表名。

Non_unique

0 表示该索引不能有重复的记录,反之则反。

Key_name

索引名。

Seq_in_index

该字段在索引中的次序,从 1 开始。

Column_name

字段名。

Collation

字段在索引中是怎么排序的。在 MySQL 中,它的值可以是 `A’ ( 升序 ) 或 NULL ( 无序 ) 。

Cardinality

该索引中唯一值的数量,当执行 ANALYZE TABLE 或 myisamchk -a. Cardinality 时会更新它的值。 Cardinality (基数) 是用整数存储的基于统计的结果,因此如果是小表,那么它的结果可能未必精确。基数越大,则 MySQL 在做表连接时使用索引的几率越大。

Sub_part

它表示某个字段对多长的字符做索引。当整个字段都做索引了,那么它的值是 NULL。

Packed

表示键值是如何压缩的,NULL 表示没有压缩。

Null

当字段包括 NULL 的记录是 YES,它的值为,反之则是 ”。

Index_type

使用了哪种索引算法(有BTREE, FULLTEXT, HASH, RTREE)。

Comment

各种不同的备注。在MySQL 4.0.2以前,如果增加了 Index_type 字段,则 Comment 字段用户表示该索引是为 FULLTEXT 索引。

字段 Packed 和 Comment 是在MySQL 3.23.0中新增的。而 Null 和 Index_type是在MySQL 4.0.2中新增的。

在 tbl_name FROM db_name 语法中,还可以选择是否使用 db_name.tbl_name 的格式。以下的这2个语句是一样的:

mysql> SHOW INDEX FROM mytable FROM mydb;

mysql> SHOW INDEX FROM mydb.mytable;

SHOW KEYS 和 SHOW INDEX 是一样的,也可以通过执行 mysqlshow -k db_name tbl_name 命令来列出数据表的索引信息。

14.5.3.13 SHOW INNODB STATUS 语法

SHOW INNODB STATUS

它显示了 InnoDB 存储引擎状态的其他的扩展信息。

14.5.3.14 SHOW LOGS 语法

SHOW [BDB] LOGS

SHOW LOGS 显示了现存的日志文件的状态。它是在MySQL 3.23.29中实现的。现在它只显示了Berkeley DB类型的日志文件,因此它的另一个用法是SHOW LOGS(从MySQL 4.1.1开始)。

SHOW LOGS 返回了以下几个字段:

File

日志文件的完整路径。

Type

日志文件的类型(例如:BDB 表示Berkeley DB类型的日志文件)。

Status

文件状态(FREE 表示文件可以删除,IN USE 表示在事务子系统中需要用到该日志文件)。

14.5.3.15 SHOW PRIVILEGES 语法

SHOW PRIVILEGES

SHOW PRIVILEGES 列出了所有MySQL基本服务器所支持的权限。它是在MySQL 4.1.0中实现的。

mysql> SHOW PRIVILEGES\G

*************************** 1. row ***************************

Privilege: Select

  Context: Tables

  Comment: To retrieve rows from table

*************************** 2. row ***************************

Privilege: Insert

  Context: Tables

  Comment: To insert data into tables

*************************** 3. row ***************************

Privilege: Update

  Context: Tables

  Comment: To update existing rows

*************************** 4. row ***************************

Privilege: Delete

  Context: Tables

  Comment: To delete existing rows

*************************** 5. row ***************************

Privilege: Index

  Context: Tables

  Comment: To create or drop indexes

*************************** 6. row ***************************

Privilege: Alter

  Context: Tables

  Comment: To alter the table

*************************** 7. row ***************************

Privilege: Create

  Context: Databases,Tables,Indexes

  Comment: To create new databases and tables

*************************** 8. row ***************************

Privilege: Drop

  Context: Databases,Tables

  Comment: To drop databases and tables

*************************** 9. row ***************************

Privilege: Grant

  Context: Databases,Tables

  Comment: To give to other users those privileges you possess

*************************** 10. row ***************************

Privilege: References

  Context: Databases,Tables

  Comment: To have references on tables

*************************** 11. row ***************************

Privilege: Reload

  Context: Server Admin

  Comment: To reload or refresh tables, logs and privileges

*************************** 12. row ***************************

Privilege: Shutdown

  Context: Server Admin

  Comment: To shutdown the server

*************************** 13. row ***************************

Privilege: Process

  Context: Server Admin

  Comment: To view the plain text of currently executing queries

*************************** 14. row ***************************

Privilege: File

  Context: File access on server

  Comment: To read and write files on the server

14.5.3.16 SHOW PROCESSLIST 语法

SHOW [FULL] PROCESSLIST

SHOW PROCESSLIST 显示了有哪些线程在运行。也可以执行 mysqladmin processlist 命令来得到这些信息。如果有 SUPER 权限,则可以看到全部的线程,否则,只能看到自己发起的线程(这是指,当前对应的MySQL帐户运行的线程)。详情请看“14.5.4.3 KILL Syntax”。如果没有使用关键字 FULL,则只能看到每个查询的前100个字符。

从MySQL 4.0.12起,结果中还会以的 host_name:client_port 格式来显示通过TCP/IP方式连接过来的客户端的主机名,这就可以知道每个客户端都正在做什么。

这个语句在出现“too many connections”错误时想看看都正在执行什么查询非常有用。MySQL为拥有 SUPER 权限的账户保留了一个额外的连接,这就保证让管理员总是可以连上检查系统状况(假定没有给每个系统账户都授予这个权限)。

SHOW PROCESSLIST 结果中一些常见的状态如下:

Checking table

正在检查数据表(这是自动的)。

Closing tables

正在将表中修改的数据刷新到磁盘中,同时正在关闭已经用完的表。这是一个很快的操作,如果不是这样的话,就应该确认磁盘空间是否已经满了或者磁盘是否正处于重负中。

Connect Out

同步从服务器正在连接主服务器。

Copying to tmp table on disk

由于临时结果集大于 tmp_table_size,正在将临时表从内存存储转为磁盘存储以节省内存。

Creating tmp table

正在创建临时表以存放部分查询结果。

deleting from main table

服务器正在执行多表删除中的第一部分,刚删除第一个表。

deleting from reference tables

服务器正在执行多表删除中的第二部分,正在删除其他表的记录。

Flushing tables

正在执行 FLUSH TABLES,等待其他线程关闭数据表。

Killed

发送了一个 kill 请求给某线程,那么这个线程将会检查 kill 标志位,同时会放弃下一个 kill 请求。MySQL会在每次的主循环中检查 kill 标志位,不过有些情况下该线程可能会过一小段才能死掉。如果该线程程被其他线程锁住了,那么 kill 请求会在锁释放时马上生效。

Locked

被其他查询锁住了。

Sending data

正在处理 SELECT 查询的记录,同时正在把结果发送给客户端。

Sorting for group

正在为 GROUP BY 做排序。

Sorting for order

正在为 ORDER BY 做排序。

Opening tables

这个过程应该会很快,除非受到其他因素的干扰。例如,在执 ALTER TABLE 或 LOCK TABLE 语句行完以前,数据表无法被其他线程打开。 正尝试打开一个表。

Removing duplicates

正在执行一个 SELECT DISTINCT 方式的查询,但是MySQL无法在前一个阶段优化掉那些重复的记录。因此,MySQL需要再次去掉重复的记录,然后把结果发送给客户端。

Reopen table

获得对一个表的锁,但是被通知到得到锁之后该表结构会发生变化。因此就先释放锁,关闭表,重新打开它

Repair by sorting

修复指令正在用排序算法创建索引。

Repair with keycache

修复指令正在利用索引缓存一个个地创建新索引。它会比 Repair by sorting 慢很多。

Searching rows for update

正在将符合条件的记录找出来以备更新。它必须在 UPDATE 要修改相关的记录之前就完成了。

Sleeping

正在等待客户端发送新请求.

System lock

正在等待取得一个外部系统锁。如果当前没有需要运行多个 mysqld 服务器同时来请求同一个表,那么可以通过增加 –skip-external-locking 参数来禁止外部系统锁。

Upgrading lock

INSERT DELAYED 处理程序正在尝试取得一个锁表以插入新记录。

Updating

正在搜索需要更新的记录,并正在更新。

User Lock

正在等待 GET_LOCK()。

Waiting for tables

该线程得到通知,数据表结构已经被修改了,需要重新打开数据表以取得新的结构。然后,为了能的重新打开数据表,必须等到所有其他线程关闭这个表。以下几种情况下会产生这个通知:FLUSH TABLES tbl_name, ALTER TABLE, RENAME TABLE, REPAIR TABLE, ANALYZE TABLE, 或 OPTIMIZE TABLE。

waiting for handler insert

INSERT DELAYED 已经处理完了所有待处理的插入操作,正在等待新的请求。

大部分状态对应很快的操作,只要有一个线程保持同一个状态好几秒钟,那么可能是有问题发生了,需要检查一下。

还有其他的状态没在上面中列出来,不过它们大部分只是在查看服务器是否产生错误了时才用得着。

14.5.3.17 SHOW STATUS 语法

SHOW STATUS [LIKE ‘pattern’]

SHOW STATUS 显示了各种服务器状态信息。也可以通过运行 mysqladmin extended-status 命令来得到结果。

这里有部分输出结果,某些变量和它对应的值可能跟你的系统不大一样。各种变量所代表的意义详情请看“5.2.4 Server Status Variables”。

mysql> SHOW STATUS;

+————————–+————+

| Variable_name            | Value      |

+————————–+————+

| Aborted_clients          | 0          |

| Aborted_connects         | 0          |

| Bytes_received           | 155372598  |

| Bytes_sent               | 1176560426 |

| Connections              | 30023      |

| Created_tmp_disk_tables  | 0          |

| Created_tmp_tables       | 8340       |

| Created_tmp_files        | 60         |



| Open_tables              | 1          |

| Open_files               | 2          |

| Open_streams             | 0          |

| Opened_tables            | 44600      |

| Questions                | 2026873    |



| Table_locks_immediate    | 1920382    |

| Table_locks_waited       | 0          |

| Threads_cached           | 0          |

| Threads_created          | 30022      |

| Threads_connected        | 1          |

| Threads_running          | 1          |

| Uptime                   | 80380      |

+————————–+————+

可以通过 LIKE 分句,就可以值显示匹配的变量及其值:

mysql> SHOW STATUS LIKE ‘Key%’;

+——————–+———-+

| Variable_name      | Value    |

+——————–+———-+

| Key_blocks_used    | 14955    |

| Key_read_requests  | 96854827 |

| Key_reads          | 162040   |

| Key_write_requests | 7589728  |

| Key_writes         | 3813196  |

+——————–+———-+

14.5.3.18 SHOW TABLE STATUS 语法

SHOW TABLE STATUS [FROM db_name] [LIKE ‘pattern’]

SHOW TABLE STATUS(在MySQL 3.23新增的)跟 SHOW TABLE 类似,它还显示每个表的许多相关信息。也可以通过运行 mysqlshow –status db_name 命令来显示同样的结果。

SHOW TABLE STATUS 返回了以下几个字段的信息:

Name

表名。

Engine

数据表的存储引擎类型,在MySQL 4.1.2以前,这个值被标志为 Type。详情请看“15 MySQL Storage Engines and Table Types”。

Version

数据表的 `.frm’ 文件版本号。

Row_format

记录存储格式(Fixed—固定的, Dynamic—动态的, 或 Compressed—压缩的)。

Rows

记录数。在某些存储引擎中,例如MyISAM 和 ISAM 他们存储了精确的记录数。不过其他存储引擎中,例如 InnoDB,它可能只是近似值。

Avg_row_length

记录的平均长度。

Data_length

数据文件长度。

Max_data_length

数据文件的最大长度。对固定格式存储记录的表来说,它是表的最大记录数。对动态存储记录的表来说,它是数据表存储的最大字节数,给出了数据指针使用的大小。

Index_length

索引文件的长度。

Data_free

已经分配还未使用的字节数。

Auto_increment

下一个 AUTO_INCREMENT 的值。

Create_time

表的创建时间。

Update_time

表最后一次更新时间。

Check_time

表最后一次检查时间。

Collation

表的字符集和校正字符集(在中MySQL4.1.1新增的)。

Checksum

实时的校验和值(如果有的话) (在中MySQL4.1.1新增的)。

Create_options

额外留给 CREATE TABLE 的选项。

Comment

创建表时的备注(或者一些MySQL无法存取改表的相关信息)。

表注释一栏,InnoDB 类型的表会报告它所属的表剩余表空间。对一个使用共享表空间的表来说,它是指共享表空间的剩余空间。如果使用多表空间并且该表有自己的表空间,那么剩余空间就是全部属于这个表的。

对 MEMORY (HEAP) (内存)表来说,Data_length, Max_data_length, 和 Index_length 的值接近内存实际分配结果。分配算法预留了大量内存空间以减少重复分配内存的操作。

14.5.3.19 SHOW TABLES 语法

SHOW [OPEN] TABLES [FROM db_name] [LIKE ‘pattern’]

SHOW TABLES 列出了给定数据库中的非临时(non-TEMPORARY)表。也可以通过命令 mysqlshow db_name 来列出这些表。

在MySQL 5.0.1以前,SHOW TABLES 的结果中只有一个字段显示表名。从MySQL 5.0.1开始,SHOW TABLES 还列出了数据库中的视图,还有第二个字段。第二字段的值是表的 BASE TABLE (基表)或者视图名。

请注意,如果没有表的相应权限,那么在 SHOW TABLES 或 mysqlshow db_name 结果中就不会列出该表。

SHOW OPEN TABLES 列出了所有当前正被打开的表。详情请看“7.4.8 How MySQL Opens and Closes Tables”。显示结果中的 Comment 字段告诉我们该表被 cached 和 in_use 的时间。从MySQL 3.23.33开始,可以使用 OPEN 关键字。

14.5.3.20 SHOW VARIABLES语法

SHOW [GLOBAL | SESSION] VARIABLES [LIKE ‘pattern’]

SHOW VARIABLES 显示了一些MySQL的系统变量值。这些信息也可以通过运行命令 mysqladmin variables 来得到。

GLOBAL 和 SESSION 可选项是从MySQL 4.0.3开始可以用的。如果是 SESSION,就会得到每次新连接中使用的变量值。如果是

SESSION,则得到当前连接中变量的值。如果你不加任何选选项,那么 SESSION 就是默认的。LOCAL 和 SESSION 一样。

如果变量的默认值不大合适,则可以在 mysqld 启动时通过命令行增加相关选项或者通过 SET 语句来做到。详情请看“5.2.1 mysqld Command-Line Options”和“14.5.3.1 SET Syntax. ”。

以下列出了部分结果,这些结果值可能与您的系统的值不一样。每个变量的值对应的意义详情请看“5.2.3 Server System Variables”。如何协调这些变量详情请看“7.5.2 Tuning Server Parameters”。

mysql> SHOW VARIABLES;

+———————————+——————————+

| Variable_name                   | Value                        |

+———————————+——————————|

| back_log                        | 50                           |

| basedir                         | /usr/local/mysql             |

| bdb_cache_size                  | 8388572                      |

| bdb_log_buffer_size             | 32768                        |

| bdb_home                        | /usr/local/mysql             |



| max_connections                 | 100                          |

| max_connect_errors              | 10                           |

| max_delayed_threads             | 20                           |

| max_error_count                 | 64                           |

| max_heap_table_size             | 16777216                     |

| max_join_size                   | 4294967295                   |

| max_relay_log_size              | 0                            |

| max_sort_length                 | 1024                         |



| timezone                        | EEST                         |

| tmp_table_size                  | 33554432                     |

| tmpdir                          | /tmp/:/mnt/hd2/tmp/          |

| version                         | 4.0.4-beta                   |

| wait_timeout                    | 28800                        |

+———————————+——————————+

可以使用 LIKE 分句列出匹配的变量:

mysql> SHOW VARIABLES LIKE ‘have%’;

+——————–+———-+

| Variable_name      | Value    |

+——————–+———-+

| have_bdb           | YES      |

| have_innodb        | YES      |

| have_isam          | YES      |

| have_raid          | NO       |

| have_symlink       | DISABLED |

| have_openssl       | YES      |

| have_query_cache   | YES      |

+——————–+———-+

14.5.3.21 SHOW WARNINGS 语法

SHOW WARNINGS [LIMIT [offset,] row_count]

SHOW COUNT(*) WARNINGS

SHOW WARNINGS 显示了最后一个查询语句产生的错误、警告、提示等信息,如果它没有产生任何信息,则不显示任何信息。这个语句是在MySQL 4.1.0实现的。它的一个相关语句是 SHOW ERRORS,不过它只显示错误信息,详情请看“14.5.3.10SHOW ERRORS Syntax”。

随着执行语句的不同每次显示的信息都会产生变化。

SHOW COUNT(*) WARNINGS 语句显示了错误、警告、提示信息的总记录数。也可以通过取得变量 warning_count 的值来获得总错误记录数:

SHOW COUNT(*) WARNINGS;

SELECT @@warning_count;

warning_count 的值可能会比 SHOW WARNINGS 显示的结果记录数大,因为系统变量 max_error_count 被设置的比较小,因此没有把所有的信息都存下来。本章节后面演示了发生这种情况的例子。

LIMIT 分句的用法和在 SELECT 语句一样。详情请看“14.1.7 SELECT Syntax”。

MySQL服务器把最后一次查询中产生的错误、警告、提示信息总数返回了。如果使用C API,这个值可以通过调用 mysql_warning_count() 得到。详情请看“21.2.3.58 mysql_warning_count()”。

注意,警告信息的框架在MySQL 4.1.0中增加了,在这个时候还有很多语句不产生警告信息。在4.1.1中,这种情况得到了改善,很多语句都产生了警告信息,例如:LOAD DATA INFILE 及 INSERT, UPDATE, CREATE TABLE, 和 ALTER TABLE 等。

以下 DROP TABLE 语句就产生了一个提示信息:

mysql> DROP TABLE IF EXISTS no_such_table;

mysql> SHOW WARNINGS;

+——-+——+——————————-+

| Level | Code | Message                       |

+——-+——+——————————-+

| Note  | 1051 | Unknown table ‘no_such_table’ |

+——-+——+——————————-+

以下是一个 CREATE TABLE 和 INSERT 语句产生的语法警告和转换警告信息:

mysql> CREATE TABLE t1 (a TINYINT NOT NULL, b CHAR(4)) TYPE=MyISAM default charset utf8 ;

Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> SHOW WARNINGS\G

*************************** 1. row ***************************

  Level: Warning

   Code: 1287

Message: ‘TYPE=storage_engine’ is deprecated, use

         ‘ENGINE=storage_engine’ instead

1 row in set (0.00 sec)

mysql> INSERT INTO t1 VALUES(10,’mysql’),(NULL,’test’),

    -> (300,’open source’);

Query OK, 3 rows affected, 4 warnings (0.01 sec)

Records: 3  Duplicates: 0  Warnings: 4

mysql> SHOW WARNINGS\G

*************************** 1. row ***************************

  Level: Warning

   Code: 1265

Message: Data truncated for column ‘b’ at row 1

*************************** 2. row ***************************

  Level: Warning

   Code: 1263

Message: Data truncated, NULL supplied to NOT NULL column ‘a’ at row 2

*************************** 3. row ***************************

  Level: Warning

   Code: 1264

Message: Data truncated, out of range for column ‘a’ at row 3

*************************** 4. row ***************************

  Level: Warning

   Code: 1265

Message: Data truncated for column ‘b’ at row 3

4 rows in set (0.00 sec)

错误、警告、提示信息的最大存储数量是由系统变量 max_error_count 控制的。它的默认值是64,通过修改 max_error_count 的值就可以改变最大存储数量。以下例子中,ALTER TABLE 语句产生了3个警告信息,不过只存储了1条,因为 max_error_count 的值为 1:

mysql> SHOW VARIABLES LIKE ‘max_error_count’;

+—————–+——-+

| Variable_name   | Value |

+—————–+——-+

| max_error_count | 64    |

+—————–+——-+

1 row in set (0.00 sec)

mysql> SET max_error_count=1;

Query OK, 0 rows affected (0.00 sec)

mysql> ALTER TABLE t1 MODIFY b CHAR;

Query OK, 3 rows affected, 3 warnings (0.00 sec)

Records: 3  Duplicates: 0  Warnings: 3

mysql> SELECT @@warning_count;

+—————–+

| @@warning_count |

+—————–+

|               3 |

+—————–+

1 row in set (0.01 sec)

mysql> SHOW WARNINGS;

+———+——+—————————————-+

| Level   | Code | Message                                |

+———+——+—————————————-+

| Warning | 1263 | Data truncated for column ‘b’ at row 1 |

+———+——+—————————————-+

1 row in set (0.00 sec)

想要禁止警告信息,只要将 max_error_count 设置为 0。在这种情况下,warning_count 仍然是产生的警告信息总数,但不存储任何警告信息。

PHP编程常用技巧四则

1.配置PHP文件目录

  作为服务器端解释执行的脚本语言,PHP程序放置在某个服务器可以访问的目录下,一般可以通过修改Apache的httpd.conj进行配置,例如我们在该文件中的一句:

  Alias /test/ “d:/phpwebsite/php/” 那么在浏览器端输入:“http://localhost/test/+PHP文件名”就可以访问d:/phpwebsite/php/下的PHP文件了;可见该行不过是为存放PHP文件的目录起一个别名。

  其次,还可以通过指定DocumentRoot路径得到存放服务器文件的目录,在httpd.conj找到以下两行,其中的路径可以随意指定,你的PHP文件也可以放在该目录下,服务器同样可以运行它们,如“http://localhost/+PHP文件名”。

  一般的,将PHP文件放在同一个地方比较好,可以方便管理,而其他文件放在另外一个地方。

DocumentRoot “C:/usr/bin/html/”
<Directory “C:/usr/bin/html/”>
2.服务器端目录的索引文件
在httpd.conj中,有一行:
DirectoryIndex index.html

  该行指定目录默认打开文件为index.html,当访问某个目录时,服务器就会自动查找index.html, 若果不存在,则显示目录中的所有文件列表,默认打开文件可以改为别的,如index.php3等等,但是也许我们有很多目录,无论是存放图片,文本等资料的,还是存放PHP文件或别的文件的目录,我们并不希望用户能看到目录中的文件列表,在httpd.conj 中指定了一个.htacess文件,该文件产生一个目录索引文件,例如我们用写字板建立一个.htacess文件:

# .htacess #
DirectoryIndex error_open.php
再建立一个错误警告文件:
# error_open.php #
<  echo ” 您没有权限访问该页!”  >

  其中的error_open.php为权限错误警告文件,将此2文件放在所有保护目录下,当用户企图打开目录时,自动转向执行error_open.php,显示错误警告。

  3.目录删除巧实现
我们知道,PHP4 for/win32中有个rename()函数可以支持对目录/文件进行重命名,如:
rename( oldpath, newpath) // oldpath为文件或目录原来路径;
// newpath为新定义路径;

  实现将 oldpath改名为 newpath。

  PHP4中没有删除目录/文件的函数,怎么作到删除呢?我们知道,php.ini中有一行用来完成HTTP上传操作的临时文件目录配置行:
upload_tmp_dir= ;

  PHP4支持该临时目录的配置(PHP3不支持),当上载操作完成则自动清空临时目录,好了,用它我们可以巧妙的实现文件/目录的删除,比如设置: upload_tmp_dir=”d:/phpwebsite/php/tmp/” ;
要删除某个目录 path,执行:

< php
tmp=”d:/phpwebsite/php/tmp/;”
rename( path, tmp)
 >

  那么文件或目录 path改名为 tmp后, tmp目录下的所有文件/目录自动清除,就完成了删除操作。

  4.快速建立MySql数据库表

  PHP和MySql数据库达到了完美结合,在网页上,比如在论坛或书屋发表作品的新用户,我们要把他的言论信息在线写入数据库中,往往要在相应的数据库中为该用户新建一个数据表。win32下建立新的MySQL空数据库很简单,只要在“/mysql/data/”目录下建立一个文件夹,如:”/usrinfo/”,就可以了。而向库中增添新表可通过以下程序实现:

  # connect.mysql–连接数据库 #
< php
connection = mysql_connect();
mysql_select_db(“usrinfo”, connection);
 >
# make.php– 建立如下结构的,以用户名为表名的数据表 #
< php
//调用connect.mysql
require(“connect.mysql”);
//检查以用户名为表名的数据表存在否 
query=”select count(*) from usrname”;
result=mysql_db_query( query);
//不存在则创建,如存在就是老用户;
if(! result){
mysql_query(“
create table usrname(
id tinyint(6),
title text,
body longtext,
dateof date;
timeof time;
)”) or die(mysql_error());
}
//此处为向数据表插入新的数据部分
 >

Mysql与MongoDB的应用分析

今天下午公司开技术分享会,同事分享了对MongoDB的学习和测试。

 

http://www.slideshare.net/iammutex/mongodb-7569240 MongoDB开发应用实践-吃蟹
http://www.mongodb.org/ mongodb 官方网站
http://www.cnblogs.com/inrie/archive/2011/02/22/1961415.html MongoDB、HandlerSocket和MySQL性能测试及其结果分析
以上是同事提供的MongoDb介绍和使用的PPT文档。
以下是我们得出的部分结论:
1.从分析上看首先如果将MongoDb在ec2上使用投入将会比较大,因为需要64位的操作系统来提供必要的内存和最大文件支持。
2.MongoDB在大数据量时作分布式会非常方便,系统本身就提供了这样的技术支持。但是如果从Mysql上来考虑,如果在最初的技术设计时就充分考虑以后数据增长的可能性,貌似这样的问题也相对比较好解决。
3.MongoDB似乎更适合在Web2.0这样存数数据项和数据类型变化比较频繁的系统,对于我们这样主要作海量数据分析,相对数据结构和数据类型比较固定的应用,使用Mysql和直接用文件通过MapReduce来处理更好些。
所以在主要作数据分析和格式化的数据查询时Mysql更适合,MongoDB更适合WEB2.0网站的应用。

SQL优化之索引问题

  一般在数据中,很多朋友很喜欢用索引来对数据库优化。通过索引通常可以帮助我们解决大多数的SQL性能问题。

1. 索引的存储分类

    MyISAM存储引擎的表的数据和索引时自动分开存储的,各自是独立的一个文件;InnoDB存储引擎的表的数据和索引时存储在同一表空间里面,但可以有多个文件组成。

   MySQL中索引的存储类型目前只有两种(BTREE和HASH),具体和表的存储引擎相关;MyISAM和InnoDB存储引擎都只支持BTREE索引;MEMORY/HEAP存储引擎可以支持HASH和BTREE索引。

   MySQL目前不支持函数索引,但是能对列的前面某一部分进行索引,例如name字段,可以以只取name的前4个字符进行索引,这个特征可以大大缩小索引文件的大小。在设计表结构的时候也可以对文本列根据此特性进行灵活设计。例如

引用

  create index ind_company2_name on company2(name(4))

2. MySQL如何使用索引

   索引用于快速找出在某个列中有一特定值的行。对相关列使用索引时提高SELECT操作性能的最佳途径。

   查询要使用索引最主要的条件是查询条件中需要使用索引关键字,如果是多列索引,那么只有查询条件使用了多列关键字最左边的前缀时,才可以使用索引,否则将不能使用索引。

1. 使用索引

  在MySQL中,下列几种情况下可能使用索引。

      对于创建的多列索引,只要查询的条件中用到了最左边的列,索引一般就会使用。

例如:

引用

  我们首先按company_id ,Moneys的顺序创建一个复合索引

  create index ind_sales2_companyid_moneys on sales2(company_id,moneys)

如果按company_id进行表查询

引用

   使用explain来分析下

   explain select * from sales2 where company_id =2000 \G;

  explain select * from sales2 where moneys = 1\G;

通过上面你可以发现即便where条件中不是用company_id 和 moneys的组合条件,索引仍然能用到,这就是索引的前缀特性。但是如果只按照moneys条件查询表,那么索引就不会被用到。

对于使用like的查询,后面如果是常量并且只有%号不在第一字符,索引才能会被使用例如

引用

  explain select * from company2 where name like “%3″\G;

  explain select * from company2 where name like “3%”\G;

以上两句你可以认为是一样的。其实是不一样的。第一句其实没有用到索引,而第二句才能够利用到索引。另外如果like后面跟的是一个列的名字,那么索引也不会被使用。

如果对大是文本进行搜索,使用全文索引而不用使用like”%..%”

如果列名是索引,使用column_name is null 将使用索引

查询name为nll的记录就用到了索引

引用

   explain select * from company2 where name is null \G;

2. 下面一些情况存在索引但不使用索引,你可能认为它会用,但是实际上它就是没用。

 

引用

   1. 如果Mysql估计使用索引比全表扫描更慢,则不使用索引。

    例如列key_part1均匀分布在1和100之间,下列查询中使用索引就不是很好

    select * from table_name where key_part1 > 1 and key_part1 < 90;

   2.  如果使用MEMORY/HEAP表并且where条件中不使用”=”进行索引列,那么不会用到索引。heap表只有在” =”的条件下才会使用索引

   

   3. 用or分割开的条件,如果or前的条件中的列有索引,而后面的列中没用索引,那么涉及的索引都不会被用到

  4. 如果不是索引列的第一部分,那么也不会使用。

  5. 如果like是以”%”开始

  6. 如果列类型是字符串,那么一定记得在where条件中把字符常量值用引号引起来,否则即便这个列上有索引,Mysql也不会使用。因为MYSQL默认把输入的常量值进行转换以后才进行检索。

 

最后查看索引使用情况

如果索引正在工作,Handler_read_key的值将很高,这个值代表了一个行被索引值读的次数,很低的值表明增加索引得到的性能改善不高,因为索引经常不被使用到。Handler_read_rnd_next的值高则说明查询运行低效,并且应该建立索引补救。这个值的含义是在数据文件中读取下一行的请求数。如果正进行大量的表扫描,Handler_read_rnd_next的值较高,则通常说明表索引不正确或者写入的查询没有利用索引。

还记得怎么看Handler_read_rnd_next 吗?

使用show statuts like ‘Handler_read_%’;

 

HbasePut源码解析

原创文章,请各位多多指导,有错误希望各位能及时告诉我,感激不尽~

(1) Put put = new Put(key);首先会构造put对象,以传入的rowkey,如果未传入时间戳,那么就会默认为null,接下来就会判断是否传入的控制hbase事务的rowlock,如果传入的rowlock不为空,那么就拿到lockId,赋值给当前lockid.

(2) 接下来调用put.add(cfbt,columnKey,columnValue);它会先从familyMap中根据family转化成的byte[]数组,拿出List<KeyValue>,如果为null,(第一次插入相关cf数据),会新建一个list,接下来会根据family, qualifier, ts, value这几个参数,生成keyvalue,keyvalue的结构为



调用的代码为

return  new KeyValue(this.row, family, qualifier, ts, KeyValue.Type.Put,value);将生产好的keyvalue,加入cf对于的keyvalue list中,然后将信息再全部放入familyMap中。

(3) 当put中add完要加入的colmn对应的cf,name,value之后,便调用table.put方法,这里调用的方法是天蓉师姐改过源码之后的putOne方法,原来的put方法会将你放入的put加入一个writeBuffer的arraylist中,然后统计当前currentWriteBufferSize的大小,如果大于了writeBufferSize,并且设置了autoflush,就会调用flushCommits方法,这个方法会将你放入writeBuffer中的所有put对象,在新版本中是采用的调用processBatch方法,processBatch内部有retry机制,如果是retry,就会根据retry次数得到一个pausetime,然后sleep该pausetime。  接下来,会通过tablename,row,是否启用缓存这3个参数,去定位region:

HRegionLocation loc = locateRegion(tableName, row.getRow(), true);

(a) 如果tableName == -ROOT- 就会调用waitRootRegionLocation方法,通过zookeeper得到rootregion的地址。接下来返回一个new HRegionLocation(HRegionInfo.ROOT_REGIONINFO, hsa);

(b) 如果tableName == .META.,就会调用locateRegionInMeta方法,先去从缓存中拿,如果缓存中没有,会组合metakey,然后去获得这个row所在的的region在哪个哪个regionServer上。

(c) 如果不是.META.表也不是-ROOT-表,那么也会调用locateRegionInMeta方法,parentTable传入meta表,依然通过参数形成metakey,

定位到region之后,拿到region对应的serveraddress,然后组装MultiAction,将HserverAddress以及MultiAction放入Map<HServerAddress, MultiAction> actionsByServer中,接下来遍历actionsByServer,建立异步任务,createCallable,然后将异步任务submit给threadpool,call方法会调用public MultiResponse multi(MultiAction multi)方法,为这个multiaction中对应的每个action,即每个活动,判断action类型,delete,get,put,然后针对不同的做不同的处理,这些是多线程的 处理,核心会调用doMiniBatchPut方法,并在写入完之后,清空writeBuffer

doMiniBatchPut方法:

1. 第一步是尽最大可能获得锁,(Try to acquire as many locks as we can),保证我们至少有一个锁,期间会检验checkFamilies,并且如果没有足够的rows,会陷入阻塞,numReadyToWrite这个属性就是判断有多少个rows需要put,知道获得了next one,然后就是获得锁的过程。

2. 第二步,更新时间戳。

3. 第三步,写入WAL日志,WALLog与mysql的binlog类似,作用都是灾难恢复,它记录所有的数据改动。一旦服务器崩溃,通过重放log,我们可以恢复崩溃之前的数据。这也意味如果写入WAL失败,整个操作将认为失败。(红色字体参考的是网上资料)。

4. 第四步,写入memstore中,然后返回OperationStatusCode.SUCCESS。

(4) 当doMiniBatchPut调用完成之后,会返回addedSize,此时,将memstoreSize加上addedSize然后判断是否满足条件flush到磁盘,这里的条件是看size > this.memstoreFlushSize;而memstoreFlushSize是由regionInfo.getTableDesc().

getMemStoreFlushSize()获得的。默认大小是long DEFAULT_MEMSTORE_FLUSH_SIZE = 1024*1024*64L;64MB。如果满足了flush条件,就会把writestate.flushRequested标志位设为true,由单独的线程flush到磁盘上,成为一个StoreFile。

但是官方的插入策略第一步是放入本地缓存中,即writeBuffer中,只有满足条件了,才会调用flushCommits方法,也就是说放入本地缓存的时候,并没有计入WAL日志,如果这个时候机器挂了,那么数据就丢失了,无法恢复。

其他实现是:

直接调用HregionServer的put方法,不将put放入writeBuffer中,得到相应的region之后,调用region的put方法,这里的put方法,也是更新时间戳,写入WAL日志,写入memstore中。

(5) Hregion存储了table中某一个region的数据,它存储了每一行的所有columns,一个table由一个或多个Hregions组成,一个Hregion中包含了多个Hstore,Store是包含了部分列的行的集合,同时,他们组成了这些行的所有数据。

一个Hregion是靠表以及key的范围定义的,它至少包含一个store,store的数量是可配置的,以便同时进来的数据能存放在同一个store中,目前,我们近似通过为每个列族创建一个store

HtableDescriptor包含了hregion所在的table的元数据信息,regionname是一个Hregion的唯一标识符,(startKey, endKey]定义了这个Hregion的key区间。

  • 大小: 66.1 KB

【转】MySQL存储引擎及各引擎特性比较

MySQL
5.1中,MySQL AB引入了新的插件式存储引擎体系结构,允许将存储引擎加载到正在运新的MySQL服务器中。

MySQL插件式存储引擎的体系结构


下载



(93.24 KB)
MySQL存储引擎
结构

昨天 17:41

与MySQL一起提供的各种存储引擎在设计时考虑了不同的使用情况。为了更有效地使用插件式存储体系结构,最好了解各种存储引擎的优点和缺点。

在下面的表格中,概要介绍了与MySQL一起提供的存储引擎:

存储引擎比较



下载



(97.53 KB)
存储引擎比较

昨天 17:41

下述存储引擎是最常用的:

·         MyISAM:默认的MySQL插件式存储引擎,它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。注意,通过更改STORAGE_ENGINE配置变量,能够方便地更改MySQL服务器的默认存储引擎。

·         InnoDB:用于事务处理应用程序,具有众多特性
,包括ACID事务支持。

·         BDB:可替代InnoDB的事务引擎,支持COMMIT、ROLLBACK和其他事务特性。

·         Memory:将所有数据保存在RAM中,在需要快速查找引用和其他类似数据的环境下,可提供极快的访问。

·         Merge:允许MySQL DBA或开发人员将一系列等同的MyISAM表以逻辑方式组合在一起,并作为1个对象引用它们。对于诸如数据仓储等VLDB环境十分适合。

·         Archive:为大量很少引用的历史、归档、或安全审计信息的存储和检索提供了完美的解决方案。

·         Federated:能够将多个分离的MySQL服务器链接起来,从多个物理服务器创建一个逻辑数据库。十分适合于分布式环境或数据集市环境。

·         Cluster/NDB:MySQL的簇式数据库引擎,尤其适合于具有高性能查找要求的应用程序,这类查找需求还要求具有最高的正常工作时间和可用性。

·         Other:其他存储引擎包括CSV(引用由逗号隔开的用作数据库表的文件),Blackhole(用于临时禁止对数据库的应用程序输入),以及Example引擎(可为快速创建定制的插件式存储引擎提供帮助)。

请记住,对于整个服务器或方案,你并不一定要使用相同的存储引擎,你可以为方案中的每个表使用不同的存储引擎,这点很重要。

mysql常用命令

一、连接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 (回车)

二、修改密码。

格式: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 表名;

三、一个建库和建表以及插入数据的实例

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’,’深圳一中’,’1976-10-10′);

insert into teacher values(”,’jack’,’深圳一中’,’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是一个文本文件,文件名任取,打开看看你会有新发现。