设为首页收藏本站

LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区!

 找回密码
 注册

用新浪微博连接

一步搞定

QQ登录

只需一步,快速开始

查看: 4470|回复: 14

[MySQL管理] Mysql 三小时教学   [复制链接]

LT管理团队

社区首席勤杂工

Rank: 9Rank: 9Rank: 9

签到
81
注册时间
2008-5-19
最后登录
2012-5-3
在线时间
1762 小时
阅读权限
200
积分
14979
帖子
2524
主题
1200
精华
25
UID
1

LT总司令

发表于 2008-6-1 16:40:49 |显示全部楼层
作者:杜飞 2006-11-11
目的:
1、        在学生已经学习了SQL SERVER2000的基础上.利用一节课(三小时)的时间掌握mysql的安装,建库、建表、表的三种基本操作、查询、多表查询、数据库的备份与恢复
2、        MYSQL 服务器的简单维护
3、        mysql+apache+php的环境搭建

一、如何安装mysql服务器:
我们使用当前MY-SQL的比较新的版本MY SQL 5.0版。首先,如何得到MY SQL 5.0 我们可以从网上下载(www.mysql.cn)
我们来看一下如何进行安装MY SQL支持多平台,也就是说它可以工作在WINDWOS平台上,也可以工作在LINUX平台上,在LINUX下的安装可能会复杂那么一点点,但在WINDOWS下的安装还是很简单的,和咱们平时安装软件没什么两样,下面咱们开始安装:我们拿到的是一个可执行文件,双击Setup.exe文件,开始mysql5.0的安装。先是等待,直到出现下面的欢迎窗口
*********
安装过程略!
********
怎么检测你的mysql正确安装了。那你们是怎么检测 SQL SERVER是不是正确安装的?
Netstat  -an
看有没有3306口吧!或者你就去看看你的服务有没有启动!

二、登录到mysql服务器:

两种方法:
1、        mysql ?hlocalhost ?uroot ?p口令
2、        直接利用开始菜单!开始----程序---mysql5.0

三、命令的简单使用:
下面的操作一般就是使用标准SQL命令:也就是说你在SQL SERVER里面怎么用,这里就怎么用,但是有的命令也不是完全一样的。有一点点细微的差别!下面咱们就把这个命令简单的过一遍:
my sql 命令的使用:以分号或\g结束,\c取消一行命令,\h帮助
1、        显示数据库:show databases;
2、        建数据库:create database  [if not exists] 数据库名;
3、        建数据表: create table [if not exists] 表名 (字段名1   类型。。。。。。。。)
create table student (编号 int auto_increment primary key, 姓名 varchar(10));
注意:设置了自动增长,就要定为主键,如果选择了BIT 类型,0不显示,非0显示为一个特殊符号!
4、        显示数据表:show tables;
5、        删除库: drop database [if exists] 库名;
6、        删除表: drop table   [if exists] 表名;
7、        显示表结构: desc 表名
8、        如何修改表结构:增长一个字段; alter table 表名 add 字段名  类型
9、                      删除一个字段: alter table  表名 drop 字段名
10、                 修改一个字段的属性:  alter table 表名modify 字段 新属性
11、        修改主键: 增加一个主键  alter table 表名 add primary key(字段名)
12、                 删除一个主键  alter table 表名  drop primary key(字段名)

四、表的三种基本操作:

插入记录、删除记录、更新记录、 这个和sql server是一样的,你在SQL SERVER里面怎么操作,在MYSQL里面就怎么操作!没什么大区别,当然小区别还是有的。比如;insert命令,SQL SERVER2000 一次只能插入一条记录,MYSQL可以插入多条记录。
Insert into 表 (字段表列表) values(字段值),(字段值)。。。。。。
删除,更新和SQL SERVER没有什么区别,不再累述!

13、        删除数据库:DROP DATABASE 数据库名
14、        删除表:    DROP TABLE    表名
15、        表改名:    RENAME TABLE 旧表中  TO  新表名 数据库不能改名,但也不是绝对不能改,但改不好会造成里面的数据无法正常读出,后果自负!
16、        库改名: 常用方法是把新库创建出来,然后把旧库里的数据导入进去.


五、查询: 这应该是SQL中的一大块。
SELECT 查询:也和SQL SERVER没有什么大差别:
关键是大家要熟练运用各种运算符,数学运算符比较简单,重点在于字符型运算符LIKE、关系运算符和逻辑运算符
如:查找姓王的记录:SELECT  * FROM YUANGONG  WHERE 姓名  like '王%';
查找姓名中有五的记录:SELECT * FROM YUANGONG  WHERE 姓名  like '%王%';
查找以王结尾的记录:SELECT  * FROM YUANGONG  WHERE 姓名  like '%王';
其中linit是SQL SERVER没有的。
例如:我想显示第三条到第七条记录
select * from 表名 limit 2,5;
通配符        描述        示例
%        通配零个或多个任意字符       
_(下划线)        通配任意一个字符       
不再含有 [ ] 不同于SQL SERVER
注意:如果用like发现结果不正确,有可能是编码的问题

六、记录排序
利用order by 对记录进行排序
格式:select 字段名列表 from 表名 [where 条件] order by 排序字段1 [asc ] [desc] [排序字段2……]
如:按年龄对yuangong表进行升序排列!
Select  * from yuangong order by 年龄  asc 或  select  * from yuangong order by 年龄
如:按年龄对yuangong表进行降序排列!
Select  * from yuangong order by 年龄  desc
对员工表先按性别升序排列,性别相同的再按年龄从大到小排序
Select * from 员工表   order by   性别 asc,年龄 desc

七、聚集函数:
最大值:max()       最小值 min()    平均值avg()
求和:   sum()        汇总: count ()

如:求每个部门的基本工资平均值
select 部门,avg(基本工资)  as 部门基本工资 from 员工表 group by 部门

显示平均基本工资大于3000的部门
Select  部门,avg(基本工资) from 员工表 group 部门 where avg(基本工资)>3000
此句错误。SQL规定在分组中使用条件不能用 WHERE 而是用 having
Select  部门,avg(基本工资) from 员工表 group by  部门 having avg(基本工资)>3000


八、多表查询:
一个数据库中的多个表,存在一定的联系,怎么样正常的显示这么表的信息?
现在有三个表:
yg
Name  sex  age  
宋洋  男   20  
马冬旭 女   40  
        Gs
Name   title      date       单位
宋洋   AD详解 2006-11-10  清华大学
马冬旭 linux    2005-01-01   人民大学
        dz
单位     地址
清华大学  五道口
人民大学   黄庄


第一种方法称为:交叉连接,在SQL SERVER中又称为笛卡尔乘积
但是要注意的默认生成的记录总数是两表记录之积
select * from yg,gs;
select * from yg,gs where yg.name=gs.name;
这才是我们想要的记录
第二种方法是用join连接:
内连接
select * from yg join gs on yg.name=gs.name
左外连接
右外连接
但没有全外连接


九、联合:
除了连接,mysql4。0以上的版本还支持UNION运算符,它用来把多个select查询号的输出连接成一个单独的结果集。大多数情况下,这个运算符用来把查询产生的结果集添加到不同的表,同时创建包括所有结果的一个单独表。比如面试的时候问你,有两个表,字段信息一样,让你用一条语句把两个表的信息组合为一个单独的表!
为了说明UNION运算符的使用方法,我们举一个例子:现在有两个表,分别存放的是男同学信息和女同学信息,如果用一个语句将所有同学的信息显示出来!
mysql> select * from nan;
+--------+-------+
| name   | score |
+--------+-------+
| 彭聪留 |    80 |
| 费优优 |    81 |
| 曲权   |    82 |
+--------+-------+
3 rows in set (0.00 sec)        mysql> select * from nv;
+------+-------+
| name | score |
+------+-------+
| 彭红 |    80 |
| 费红 |    81 |
| 曲红 |    82 |
+------+-------+
3 rows in set (0.00 sec)

mysql> select * from nan union select * from nv;
+--------+-------+
| name   | score |
+--------+-------+
| 彭聪留 |    80 |
| 费优优 |    81 |
| 曲权   |    82 |
| 彭红   |    80 |
| 费红   |    81 |
| 曲红   |    82 |
+--------+-------+
6 rows in set (0.00 sec)
那如果有三个表怎么办?也是一样的操作!

但注意的是如果两个表的某条记录信息完全一致,则只显示为一条;如果想显示全部记录则在union后 加 all
mysql> select * from nan union all  select * from nv;
如果面试官又问你,如果想把显示的信息保存到一个表中怎么办?
mysql> create table 表名 select 语句;


十、数据库备份与恢复
备份:
第一种方法:   mysqldump

备份一个表 mysqldump  -h主机名  ?u用户名 ?p口令 数据库  表名 >文本文件
                恢复: mysql   -h  主机名 ?u用户名 ?p口令 数据库 <文本文件
备份一个数据库中的两个表或是多个表怎么办?
  Mysqldump ?h 主机名 ?u用户名 ?p口令 数据库 表名1 表名2  >文本文件
恢复的时候: mysql ?h 主机名 ?u用户名 ?p 口令 数据库<文本文件

备份整个数据库:
格式: mysqldump ?u用户名  -p密码 数据库名>文本文件名
如:C:\test>mysqldump -uroot -p111111 net14  >net14.txt

删除数据库net14:         drop database net14
进行恢复:
C:\test>mysql -u root  -p111111 net14<net14.txt
ERROR 1049 (42000): Unknown database 'net14'
报错.说找不到数据库net14;
必须先手工建立一个空的net14数据库,然后才能把数据导进来!
C:\test>mysql -u root  -p111111 net14<net14.txt

那还有一个问题,如果想同时备份两个以上的数据库怎么办?
格式: mysqldump ?u用户名  -p密码  -B 数据库1   数据库2 >文本文件名
如:    C:\test>mysqldump -uroot -p111111 -B net14 net28  >net1428.txt
然后删除net14和net28再进行恢复
但是要注意:必须一个一个的恢复,不能同时恢复两个:
如: C:\test>mysql -uroot -p111111 -B net14   <net1428.txt
C:\test>mysql -uroot -p111111 -B net28   <net1428.txt

第二种方法:  select into 作备份:这相对于第一种方法就简单多了!
格式:  select 语句 into outfile “路径及文件名”;
如: mysql> select * from student into outfile 'c:\\abc1.txt';
Query OK, 13 rows affected (0.00 sec)
注意:
1.路径中的盘符后是两个\\,其中第一个代表转义作用,第二个才是代表根目录.有时写成一个\时不会报错,因此要注意检查备份的正确性;
2.不允许重写文本文件;
恢复方法:
那么怎么恢复呢::
用LOAD DATA来恢复:
格式: load data infile ‘路径及文件名’ into table 表名
如: load data infile 'c:\\student.txt' into table student;
注意:表必须存在.可用delete,清空其中的所有记录 或者用: truncate 表名,只删除记录,不删除结构!
如果恢复出错怎么办?
1.        权限问题.
2.        分界符不匹配!
3.        路径和文件名不对!


十一、数据的导入/导出:
如何与其他数据源之间进行数据的导入与导出!
例如:如何将  SQL server 的数据导到mysql中来
1.        先在MS SQL 2000的导入导出工具将数据导出成*.txt文件格式
注意打开backup.txt
观察其中的分隔字符 MS SQL 2000好像是用逗号分隔的
2.        在mysql中利用 load data infile 命令导入
mysql> load data infile 'c:\\sql.txt' into table abc fields terminated by ',';
Query OK, 5 rows affected (0.00 sec)
Records: 5  Deleted: 0  Skipped: 0  Warnings: 0
注意  目标表必须已经存在,并结构要与源表的结构相同!
ACCESS 导到 MYSQL:
1.        先建立一个access文件,保存成文本文件
2.        打开文本文件,再转换一下编码成ansi
3.        建立数据库,导入到mysql中!
mysql> load data infile 'c:\\abc1.txt' into table abc fields terminated by ',';
Query OK, 3 rows affected (0.00 sec)
EXCEL 导到mysql
步骤同上。只是要注意的是:excel默认是以        TAB        分隔的所以应用以下的语句:
mysql> load data infile 'c:\\book1.txt' into table abc fields terminated by '\t';


关于mysql 的具体内容我们就介绍这么多,下面我们来看一下php的搭建环境.因为现在apache+mysql+php称为网站设计的经典组合.这是大家必须要掌握的.
感谢大家对linuxtone的支持!

Rank: 8Rank: 8

注册时间
2010-2-2
最后登录
2012-4-9
在线时间
34 小时
阅读权限
90
积分
3352
帖子
35
主题
2
精华
0
UID
7809
发表于 2010-4-27 16:27:33 |显示全部楼层
入门的教程,多谢。

使用道具 举报

论坛元老

运维中的小学生

Rank: 8Rank: 8

注册时间
2010-4-29
最后登录
2012-4-9
在线时间
118 小时
阅读权限
90
积分
5712
帖子
97
主题
13
精华
0
UID
8756
发表于 2010-5-7 10:01:07 |显示全部楼层
呵呵,很基础易懂,顶一个。

使用道具 举报

Rank: 4

注册时间
2010-5-27
最后登录
2012-5-16
在线时间
20 小时
阅读权限
50
积分
879
帖子
70
主题
0
精华
0
UID
9373
发表于 2010-10-9 22:26:27 |显示全部楼层
是啊
很容易理解
感谢分享

使用道具 举报

Rank: 1

注册时间
2010-10-12
最后登录
2010-10-12
在线时间
0 小时
阅读权限
10
积分
19
帖子
4
主题
0
精华
0
UID
10592
发表于 2010-10-12 09:52:55 |显示全部楼层
楼主辛苦的!

使用道具 举报

Rank: 7Rank: 7Rank: 7

注册时间
2008-11-26
最后登录
2012-5-23
在线时间
349 小时
阅读权限
100
积分
12306
帖子
314
主题
13
精华
1
UID
618
发表于 2010-10-12 17:48:28 |显示全部楼层
恩,学这些就差不多了,,不用太高深的,,

使用道具 举报

Rank: 6Rank: 6

注册时间
2010-8-21
最后登录
2012-5-15
在线时间
61 小时
阅读权限
70
积分
1159
帖子
75
主题
5
精华
0
UID
10171
发表于 2010-10-12 18:06:22 |显示全部楼层
入门教学,顶一下

使用道具 举报

论坛元老

举子

Rank: 8Rank: 8

注册时间
2010-1-12
最后登录
2012-5-21
在线时间
444 小时
阅读权限
90
积分
15184
帖子
734
主题
121
精华
0
UID
7522
发表于 2010-10-31 10:53:12 |显示全部楼层
呵呵         杜老写的         顶!

使用道具 举报

Rank: 4

注册时间
2010-10-20
最后登录
2012-5-11
在线时间
32 小时
阅读权限
50
积分
564
帖子
25
主题
0
精华
0
UID
10667
发表于 2010-11-1 22:19:35 |显示全部楼层
适合教学,支持

使用道具 举报

论坛元老

小兵

Rank: 8Rank: 8

注册时间
2010-10-9
最后登录
2012-5-15
在线时间
250 小时
阅读权限
90
积分
15060
帖子
103
主题
13
精华
1
UID
10553
发表于 2010-11-14 00:20:46 |显示全部楼层
。。。。。。。。

使用道具 举报

Rank: 8Rank: 8

注册时间
2009-11-20
最后登录
2012-5-15
在线时间
89 小时
阅读权限
90
积分
15827
帖子
155
主题
1
精华
0
UID
6746
发表于 2010-12-28 09:37:03 |显示全部楼层
讲得很好嘛!

使用道具 举报

Rank: 4

注册时间
2010-3-11
最后登录
2012-4-16
在线时间
19 小时
阅读权限
50
积分
884
帖子
27
主题
0
精华
0
UID
8250
发表于 2011-2-9 10:29:40 |显示全部楼层
学习一下!!!

使用道具 举报

Rank: 8Rank: 8

注册时间
2011-3-22
最后登录
2012-5-21
在线时间
74 小时
阅读权限
90
积分
6514
帖子
12
主题
0
精华
0
UID
12496
发表于 2011-4-20 13:26:12 |显示全部楼层
学习了!

使用道具 举报

Rank: 8Rank: 8

注册时间
2010-12-16
最后登录
2012-5-10
在线时间
30 小时
阅读权限
90
积分
9337
帖子
102
主题
3
精华
0
UID
11516
发表于 2011-6-7 20:46:57 |显示全部楼层
入门级别教材  不错

使用道具 举报

Rank: 8Rank: 8

注册时间
2011-1-1
最后登录
2012-5-23
在线时间
131 小时
阅读权限
90
积分
10703
帖子
30
主题
0
精华
0
UID
11650
发表于 2011-10-11 15:03:48 |显示全部楼层
很不错,学习了。

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

IT运维专家网感谢红之盟网络提供带宽支持

合作联系: QQ:67888954/MSN:cnseek@msn.com/mail:netseek@linuxtone.org

Archiver|手机版|感谢所有关心和支持过LinuxTone的朋友们 转载本站内容请注明原作者名及出处 ( 京ICP备08103151 )   |

GMT+8, 2012-5-23 10:22 , Processed in 0.147186 second(s), 12 queries , Memcache On.

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部