分类: LINUX
2009-10-23 11:57:29
5.MySQL客户端操作
用户登录后,可以在MySQL命令提示符(mysql>)后使用SQL语言,进行MySQL客户端操作。
每个SQL语句都应以“;”或“\g”结束,并且是不区分大小写的。
(1)数据库操作
【查看数据库】
使用以下命令可以查看MySQL当前所有可用的数据库:
mysql>show databases;
从执行的结果可见,MySQL已经创建了三个数据库,information_schema,mysql,test。这三个数据库是MySQL安装程序自
动创建的。其中,mysql库中包含的是5个MySQL授权表,information_schema库中是相关信息,而test库是供用户练习使用的。
【创建数据库】
在MySQL中创建数据库的语名格式为:
mysql>create database 数据库名;
例如:要创建一个名为e_learning的在线学习数据库,可以输入以下命令:
mysql>create database e_learning;
默认情况下,所创建的数据库将以目录的形式保存在/var/lib/mysql中,例如,上面创建的e_learning数据库将保存在目录
/var/lib/mysql/e_learning中。系统不允许有同名的数据库存在。
【选择数据库】
所谓选择数据库,就是选定某个数据库成为当前处理所有事务的数据库,可以使用以下SQL语句:
mysql>use 数据库名;
例如:选择e_learning数据库的命令为:
mysql>use e_learning;
【删除数据库】
当执行删除数据库的命令时,数据库及其所有的表和表中的数据都将被删除,所使用的SQL命令为:
mysql>drop database 数据库名;
例如:若要删除e_learning数据库,则使用以下命令:
mysql>drop database e_learning;
(2)数据表操作
在关系型数据库中,数据库由多个数据表有机构成。每个数据表由行和列组成,每一行是一条记录,每个记录可以包含多个列(字段)。
常见的数据表操作包手创建,删除,复制,修改等。
【创建表】
MySQL使用以下格式的SQL语句创建表:
mysql>create table 表名 (字段1,字段2,...字段n, [表级约束]) [Type|Engine =表类型|存储引擎];
其中,字段的格式为:字段名 字段类型 [字段约束]
·字段类型:又称列类型,规定了某个字段所允许输入的数据类型,常用的字段类型如下:
INT,INTEGER--------整型,4个字节
FLOAT------------------浮点型,4个字节
DOUBLE----------------双精度浮点型,8个字节
DATE-------------------日期型,3个字节
CHAR(M)---------------字符型,M个字节,0<=M<=255
VARCHAR(M)----------字符串型,L+1个字节,其中L<=M且0<=M<=65535
BINARY(M)------------二进制型,M个字节,0<=M<=255
BLOB,TEXT-------------可变二进制型,L+2个字节,其中L<216
ENUM('value1','value2',....)-------枚举型,1或2个字节,取决于枚举值的个数(最多65535个值)
·字段约束:进一步对某个字段允许输入的数据进行约束,常用的字段约束如下:
Null(或Not
Null)--------允许字段为空(或不允许字段为空),默认为Null
Default------------------指定字段的默认值
Auto_Increment--------设置Int型字段能够自动生成递增1的整数
·表级约束:表级约束用于确定表的主键,外键,索引等,常用表级约束如下:
Primary Key----------设置主键
Foreign Key....References----设置外键
Index-----------------设置索引
Unique----------------设置唯一索引
Fulltext--------------- 设置全文索引
·表类型:指明了表中数据的存储格式,MySQL支持数个存储引擎作为对不同类型的处理器。默认的表类型是“MyISAM”,相
应的存储引擎为“MyISAM”。下面是常见的表存储引擎:
ARCHIVE--------------档案存储引擎
BDB-------------------带页面锁定的事务安全表。也称为BerkeleyDB
CSV-------------------值之间用逗号隔开的表
EXAMPLE--------------示例引擎
FEDERATED-----------可以访问远程表的存储引擎
InnoDB----------------带行锁定和外键的事务安全表
MERGE----------------MyISAM表的集合,作为一个表使用。也称为MRG_MyISAM
MyISAM---------------二进制轻便式存储引擎,此引擎是MySQL所用的默认存储引擎
NDBCLUSTER---------成簇表,容错表,以存储器为基础的表。也称为NDB
需要注意的是,表名可被指定为dabase.table的形式。不论是否有当前数据库,都可以通过这种方式创建表。如果使用引号识别名,
则应对数据库名和表名分别加引号。例如:'dabase'.'table'是合法的表名,而'database.table'则不合法。
MySQL中,表一旦被创建就会在/var/lib/mysql目录下创建一个以表名为名称的目录,通过该目录中的.frm表格式/定义文件表示
每个表。表的存储引擎也可能会创建其他文件。对于MyISAMG表,存储引擎可以创建数据和索引文件。因此,对于每个MyISAM表
tbl_name,有三个文件,如下表:
MyISAM表文件
文件 |
作用 |
tbl_name.frm |
表格式(定义)文件 |
tbl_name.MYD |
数据文件 |
tbl_name.MYI |
索引文件 |
例如:创建teacher教师表,存放教师有关信息,可输入如下命令:
mysql>create table teacher (
teacherID varchar(10)
not null ,
name varchar(20)
not null ,
sex char(1)
default 'm'
,
birthday date ,
department char(20) ,
primary key
(teacherID)
);
创建完成后,可以使用describe命令查看所创建表的结构:
mysql>describe teacher;
【复制表】
在MySQL中,可以使用以下语句复制表结构:
mysql>create table 新表名 like 源表名
该语句对表的复制,不仅包含表结构,还包含表中的数据和键。
例如:将表teacher复制为另一个表teacher_table,可以输入如下命令:
mysql>create table teacher_table
like teacher;
【删除表】
在MySQL中,可以使用以下语句删除一个或多个已创建的表:
mysql>drop table 表名1[,表名2,....];
一旦drop table语句执行后,表结构和表中的数据都将被删除。
例如:删除上例复制的teacher_table表,可以使用以下命令:
mysql>drop table teacher_table;
mysql>show tables;
【修改表】
修改表是指对表结构的改动,包括添加,删除,修改字段,更改表名或类型等。使用“Alter”语句,基本语法格式为:
mysql>alter table 表名 操作1[,操作2,....];
这些操作包括add,change,modify,drop,rename等。下面通过举例说明
例如:在teacher表中增加一个字段email,可以使用add命令:
mysql>alter table teacher
add email varcher(20);
mysql>describe teacher;
例如:将teacher表中的email字段改名为fax,并把类型设置为text,可以使用change命令:
mysql>alter table teacher
change email fax
text;
mysql>describe teacher;
例如:将teacher表中的department字段名称改为dept,同样可以使用change命令:
mysql>alter table teacher
change department dept
char(20);
mysql>describe teacher;
例如:将teacher表中的dept字段的类型改为varchar,可以使用modify命令:
mysql>alter table teacher
modify dept varchar(20);
mysql>describe teacher;
例如:将teacher表中的fax字段删除,可以使用以下drop命令:
mysql>alter table teacher
drop fax;
mysql>describe teacher;
例如:将teacher表的表名改为teacher_info,可以使用rename命令:
mysql>alter table teacher
rename to teacher_info;
mysql>show tables;
(3)处理表的数据
在创建了数据库和表之后,需要对表中存储的数据进行进一步的处理,常见的SQL操作包括插入,删除,修改表中的记录。
【插入记录】
在MySQL中,向表中插入/添加记录应使用以下格式的SQL语句:
mysql>insert into 表名(字段名1,字段名2,....) values (字段1的值,字段2的值,....);
例如:向teacher表中插入/添加一条记录可以使用如下的命令:
mysql>insert into teacher(teacherID,name,sex,birthday,dept)
values ('1001','Kelly','m','
mysql>select * from teacher;
在使用insert语句时,应注意以下几个问题:
·如果在insert语句中给出了要插入记录的各个字段名,那么字段值的顺序要与所给出的字段名的顺序相同,但可以与表中实际的字段
顺序不同。但如果insert语句中没有给出各个字段名,则字段值的顺序就应该与表中字段的顺序相同。
·对于在insert语句中既没有给出字段名,也没有给出字段值的字段,在插入表时,该字段的值自动设置为默认值。
·当在一个独立的insert语句中使用多个values子句时,表示插入多条记录。
例如:向teacher表中再插入一条记录,但没有给出sex字段名,其字段值将自动设置为默认值:
mysql>insert into teacher(teacherID,name,birthday,dept)
values ('1002','Sullivan','
mysql>select * from teacher;
例如:向teacher表中插入多条记录,在insert语句中使用多个values子句,中间用逗号隔开即可:
mysql>insert into teacher(teacherID,name,sex,birthday,dept)
values ('1003','tjj1','m','
('1005','tjj3','m','
mysql>select * from teacher;
【修改记录】
修改记录是更新表中数据的手段,MySQL使用update语句修改记录,基本格式为:
mysql>update 表名 set 字段名1=字段值1 [,字段名2=字段值2,....]
例如:将teacher表中的name字段值为‘Kelly’的记录,将其sex字段值改为‘f’,可以使用如下SQL语句:
mysql>update teacher set
sex=‘f’ where name=‘Kelly’;
【删除记录】
在MySQL中,用以下格式的SQL语句从表中删除记录:
mysql>delete from 表名 where 条件表达式;
使用where子句的delete语句可以删除与指定条件相匹配的一条或多条记录。
例如:要删除teacher表中teacherID为‘
mysql>delete from teacher
where teacherID=‘
如果要删除表中的所有记录,可使用不带where子句的delete语句,SQL语句为:
mysql>delete from teacher;
此外,truncate语句也可以完成删除表中所有记录的功能,SQL语句为:
mysql>truncate table teacher;
注意:delete语句与truncate语句两者的区别在于,delete语句依次删除表中的每条记录,而truncate语句先删除表结构再新建表,
因此,在删除包含大量数据的表时,truncate语句的处理速度更快。
(4)建立索引
建立索引的目的是为了加快数据据查询的速度。MySQL允许用户为一个表的特定字段设置索引。可以在创建表时直接建立索引,也可以
通过create index语句向已存在的表中添加索引。
【在创建表时建立索引】
在创建表时,可以使用index子句或unique子句创建索引。
例如:创建一个表名为schedule的日程表,并将日程编号sno字段定义为主键,同时为日程名称sname字段创建一个名为
index_sname的索引。
mysql>create table schedule (
sno varchar(10) not
null,
sname varchar(20)
not null,
book varchar(20),
primary key(sno),
index index_sname(sname)
);
若将index语句换为unique语句,则创建的索引类型为unique,此索引要求索引字段中的值必须是唯一的,也就是说,表中各个
记录中该字段的值不能相同。(可防止某字段有重复的记录出现)
【向已存在的表中添加索引】
向已存在的表中添加索引应使用create index语句,其基本格式如下:
mysql>create [unique]
index 索引名 on 表名 (字段名1 [(长度),....]);
例如:为teacher表中的name字段创建名为index_name的索引,可以使用以下命令:
mysql>create index
index_name on teacher
(name);
如果在创建索引时没有指定索引名,则MySQL会自动使用索引所在字段的字段名作为索引名。
【删除索引】
要删除索引,可以使用drop index语句,其基本格式为:
mysql>drop
index 索引名 on 表名;
例如:要删除teacher表中索引名为index_name的索引,可以使用以下命令:
mysql>drop index index_name on teacher;