MySQL入门篇.docx
《MySQL入门篇.docx》由会员分享,可在线阅读,更多相关《MySQL入门篇.docx(12页珍藏版)》请在冰豆网上搜索。
MySQL入门篇
Mysql三小时间教学
杜飞2006-11-11
目的:
1、在学生已经学习了SQLSERVER2000的基础上.利用一节课(三小时)的时间掌握mysql的安装,建库、建表、表的三种基本操作、查询、多表查询、数据库的备份与恢复
2、MYSQL服务器的简单维护
3、mysql+apache+php的环境搭建
一、如何安装mysql服务器:
我们使用当前MY-SQL的比较新的版本MYSQL5.0版。
首先,如何得到MYSQL5.0我们可以从网上下载()。
我们来看一下如何进行安装MYSQL支持多平台,也就是说它可以工作在WINDWOS平台上,也可以工作在LINUX平台上,在LINUX下的安装可能会复杂那么一点点,但在WINDOWS下的安装还是很简单的,和咱们平时安装软件没什么两样,下面咱们开始安装:
我们拿到的是一个可执行文件,双击Setup.exe文件,开始mysql5.0的安装。
先是等待,直到出现下面的欢迎窗口
*********
安装过程略!
********
怎么检测你的mysql正确安装了。
那你们是怎么检测SQLSERVER是不是正确安装的?
Netstat-an
看有没有3306口吧!
或者你就去看看你的服务有没有启动!
二、登录到mysql服务器:
两种方法:
1、mysql–hlocalhost–uroot–p口令
2、直接利用开始菜单!
开始----程序---mysql5.0
三、命令的简单使用:
下面的操作一般就是使用标准SQL命令:
也就是说你在SQLSERVER里面怎么用,这里就怎么用,但是有的命令也不是完全一样的。
有一点点细微的差别!
下面咱们就把这个命令简单的过一遍:
mysql命令的使用:
以分号或\g结束,\c取消一行命令,\h帮助
1、显示数据库:
showdatabases;
2、建数据库:
createdatabase[ifnotexists]数据库名;
3、建数据表:
createtable[ifnotexists]表名(字段名1类型。
。
。
。
。
。
。
。
)
createtablestudent(编号intauto_incrementprimarykey,姓名varchar(10));
注意:
设置了自动增长,就要定为主键,如果选择了BIT类型,0不显示,非0显示为一个特殊符号!
4、显示数据表:
showtables;
5、删除库:
dropdatabase[ifexists]库名;
6、删除表:
droptable[ifexists]表名;
7、显示表结构:
desc表名
8、如何修改表结构:
增长一个字段;altertable表名add字段名类型
9、删除一个字段:
altertable表名drop字段名
10、修改一个字段的属性:
altertable表名modify字段新属性
11、修改主键:
增加一个主键altertable表名addprimarykey(字段名)
12、删除一个主键altertable表名dropprimarykey(字段名)
四、表的三种基本操作:
插入记录、删除记录、更新记录、这个和sqlserver是一样的,你在SQLSERVER里面怎么操作,在MYSQL里面就怎么操作!
没什么大区别,当然小区别还是有的。
比如;insert命令,SQLSERVER2000一次只能插入一条记录,MYSQL可以插入多条记录。
Insertinto表(字段表列表)values(字段值),(字段值)。
。
。
。
。
。
删除,更新和SQLSERVER没有什么区别,不再累述!
13、删除数据库:
DROPDATABASE数据库名
14、删除表:
DROPTABLE表名
15、表改名:
RENAMETABLE旧表中TO新表名数据库不能改名,但也不是绝对不能改,但改不好会造成里面的数据无法正常读出,后果自负!
16、库改名:
常用方法是把新库创建出来,然后把旧库里的数据导入进去.
五、查询:
这应该是SQL中的一大块。
SELECT查询:
也和SQLSERVER没有什么大差别:
关键是大家要熟练运用各种运算符,数学运算符比较简单,重点在于字符型运算符LIKE、关系运算符和逻辑运算符
如:
查找姓王的记录:
SELECT*FROMYUANGONGWHERE姓名like'王%';
查找姓名中有五的记录:
SELECT*FROMYUANGONGWHERE姓名like'%王%';
查找以王结尾的记录:
SELECT*FROMYUANGONGWHERE姓名like'%王';
其中linit是SQLSERVER没有的。
例如:
我想显示第三条到第七条记录
select*from表名limit2,5;
通配符描述示例
%通配零个或多个任意字符
_(下划线)通配任意一个字符
不再含有[]不同于SQLSERVER
注意:
如果用like发现结果不正确,有可能是编码的问题
六、记录排序
利用orderby对记录进行排序
格式:
select字段名列表from表名[where条件]orderby排序字段1[asc][desc][排序字段2……]
如:
按年龄对yuangong表进行升序排列!
Select*fromyuangongorderby年龄asc或select*fromyuangongorderby年龄
如:
按年龄对yuangong表进行降序排列!
Select*fromyuangongorderby年龄desc
对员工表先按性别升序排列,性别相同的再按年龄从大到小排序
Select*from员工表orderby性别asc,年龄desc
七、聚集函数:
最大值:
max()最小值min()平均值avg()
求和:
sum()汇总:
count()
如:
求每个部门的基本工资平均值
select部门,avg(基本工资)as部门基本工资from员工表groupby部门
显示平均基本工资大于3000的部门
Select部门,avg(基本工资)from员工表group部门whereavg(基本工资)>3000
此句错误。
SQL规定在分组中使用条件不能用WHERE而是用having
Select部门,avg(基本工资)from员工表groupby部门havingavg(基本工资)>3000
八、多表查询:
一个数据库中的多个表,存在一定的联系,怎么样正常的显示这么表的信息?
现在有三个表:
yg
Namesexage
宋洋男20
马冬旭女40
Gs
Nametitledate单位
宋洋AD详解2006-11-10清华大学
马冬旭linux2005-01-01人民大学
dz
单位地址
清华大学五道口
人民大学黄庄
第一种方法称为:
交叉连接,在SQLSERVER中又称为笛卡尔乘积
但是要注意的默认生成的记录总数是两表记录之积
select*fromyg,gs;
select*fromyg,gswhereyg.name=gs.name;
这才是我们想要的记录
第二种方法是用join连接:
内连接
select*fromygjoingsonyg.name=gs.name
左外连接
右外连接
但没有全外连接
九、联合:
除了连接,mysql4。
0以上的版本还支持UNION运算符,它用来把多个select查询号的输出连接成一个单独的结果集。
大多数情况下,这个运算符用来把查询产生的结果集添加到不同的表,同时创建包括所有结果的一个单独表。
比如面试的时候问你,有两个表,字段信息一样,让你用一条语句把两个表的信息组合为一个单独的表!
为了说明UNION运算符的使用方法,我们举一个例子:
现在有两个表,分别存放的是男同学信息和女同学信息,如果用一个语句将所有同学的信息显示出来!
mysql>select*fromnan;
+--------+-------+
|name|score|
+--------+-------+
|彭聪留|80|
|费优优|81|
|曲权|82|
+--------+-------+
3rowsinset(0.00sec)mysql>select*fromnv;
+------+-------+
|name|score|
+------+-------+
|彭红|80|
|费红|81|
|曲红|82|
+------+-------+
3rowsinset(0.00sec)
mysql>select*fromnanunionselect*fromnv;
+--------+-------+
|name|score|
+--------+-------+
|彭聪留|80|
|费优优|81|
|曲权|82|
|彭红|80|
|费红|81|
|曲红|82|
+--------+-------+
6rowsinset(0.00sec)
那如果有三个表怎么办?
也是一样的操作!
但注意的是如果两个表的某条记录信息完全一致,则只显示为一条;如果想显示全部记录则在union后加all
mysql>select*fromnanunionallselect*fromnv;
如果面试官又问你,如果想把显示的信息保存到一个表中怎么办?
mysql>createtable表名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-p111111net14>net14.txt
删除数据库net14:
dropdatabasenet14
进行恢复:
C:
\test>mysql-uroot-p111111net14ERROR1049(42000):
Unknowndatabase'net14'
报错.说找不到数据库net14;
必须先手工建立一个空的net14数据库,然后才能把数据导进来!
C:
\test>mysql-uroot-p111111net14那还有一个问题,如果想同时备份两个以上的数据库怎么办?
格式:
mysqldump–u用户名-p密码-B数据库1数据库2>文本文件名
如:
C:
\test>mysqldump-uroot-p111111-Bnet14net28>net1428.txt
然后删除net14和net28再进行恢复
但是要注意:
必须一个一个的恢复,不能同时恢复两个:
如:
C:
\test>mysql-uroot-p111111-Bnet14C:
\test>mysql-uroot-p111111-Bnet28第二种方法:
selectinto作备份:
这相对于第一种方法就简单多了!
格式:
select语句intooutfile“路径及文件名”;
如:
mysql>select*fromstudentintooutfile'c:
\\abc1.txt';
QueryOK,13rowsaffected(0.00sec)
注意:
1.路径中的盘符后是两个\\,其中第一个代表转义作用,第二个才是代表根目录.有时写成一个\时不会报错,因此要注意检查备份的正确性;
2.不允许重写文本文件;
恢复方法:
那么怎么恢复呢:
:
用LOADDATA来恢复:
格式:
loaddatainfile‘路径及文件名’intotable表名
如:
loaddatainfile'c:
\\student.txt'intotablestudent;
注意:
表必须存在.可用delete,清空其中的所有记录或者用:
truncate表名,只删除记录,不删除结构!
如果恢复出错怎么办?
1.权限问题.
2.分界符不匹配!
3.路径和文件名不对!
十一、数据的导入/导出:
如何与其他数据源之间进行数据的导入与导出!
例如:
如何将SQLserver的数据导到mysql中来
1.先在MSSQL2000的导入导出工具将数据导出成*.txt文件格式
注意打开backup.txt
观察其中的分隔字符MSSQL2000好像是用逗号分隔的
2.在mysql中利用loaddatainfile命令导入
mysql>loaddatainfile'c:
\\sql.txt'intotableabcfieldsterminatedby',';
QueryOK,5rowsaffected(0.00sec)
Records:
5Deleted:
0Skipped:
0Warnings:
0
注意目标表必须已经存在,并结构要与源表的结构相同!
ACCESS导到MYSQL:
1.先建立一个access文件,保存成文本文件
2.打开文本文件,再转换一下编码成ansi
3.建立数据库,导入到mysql中!
mysql>loaddatainfile'c:
\\abc1.txt'intotableabcfieldsterminatedby',';
QueryOK,3rowsaffected(0.00sec)
EXCEL导到mysql
步骤同上。
只是要注意的是:
excel默认是以TAB分隔的所以应用以下的语句:
mysql>loaddatainfile'c:
\\book1.txt'intotableabcfieldsterminatedby'\t';
关于mysql的具体内容我们就介绍这么多,下面我们来看一下php的搭建环境.因为现在apache+mysql+php称为网站设计的经典组合.这是大家必须要掌握的.
有关数据库方面的操作。
注意:
你必须首先登录到mysql中,以下操作都是在mysql的提
示符下进行的,而且每个命令以分号结束。
一、操作技巧
1、如果你打命令时,回车后发现忘记加分号,你无须重打一遍命令,只要打个分号回
车就可以了。
也就是说你可以把一个完整的命令分成几行来打,完后用分号作结束
标志就OK。
2、你可以使用光标上下键调出以前的命令。
但以前我用过的一个mysql旧版本不支持。
我现在用的是mysql-3.23.27-beta-win。
二、显示命令
1、显示数据库列表。
showdatabases;
刚开始时才两个数据库:
mysql和test。
mysql库很重要它里面有mysql的系统信息,
我们改密码和新增用户,实际上就是用这个库进行操作。
2、显示库中的数据表:
usemysql;//打开库,学过FOXBASE的一定不会陌生吧
showtables;
3、显示数据表的结构:
describe表名;
4、建库:
createdatabase库名;
5、建表:
use库名;
createtable表名(字段设定列表);
6、删库和删表:
dropdatabase库名;
droptable表名;
7、将表中记录清空:
deletefrom表名;
8、显示表中的记录:
select*from表名;
三、一个建库和建表以及插入数据的实例
dropdatabaseifexistsschool;//如果存在SCHOOL则删除
createdatabaseschool;//建立库SCHOOL
useschool;//打开库SCHOOL
createtableteacher//建立表TEACHER
(
idint(3)auto_incrementnotnullprimarykey,
namechar(10)notnull,
addressvarchar(50)default'深圳',
yeardate
);//建表结束
//以下为插入字段
insertintoteachervalues('','glchengang','深圳一中','1976-10-10');
insertintoteachervalues('','jack','深圳一中','1975-12-23');
注:
在建表中
(1)将ID设为长度为3的数字字段:
int(3),并让它每个记录自动加一:
auto_increment,
并不能为空:
notnull,而且让它成为主字段primarykey
(2)将NAME设为长度为10的字符字段
(3)将ADDRESS设为长度50的字符字段,而且缺省值为深圳。
varchar和char有什么区别
呢,只有等以后的文章再说了。
(4)将YEAR设为日期字段。
如果你在mysql提示符键入上面的命令也可以,但不方便调试。
你可以将以上命令
原样写入一个文本文件中假设为school.sql,然后复制到c:
下,并在DOS状态进入目录
mysql_in,然后键入以下命令:
mysql-uroot-p密码school.sql
如果成功,空出一行无任何显示;如有错误,会有提示。
(以上命令已经调试,你
只要将//的注释去掉即可使用)。
四、将文本数据转到数据库中
1、文本数据应符合的格式:
字段数据之间用tab键隔开,null值用来代替。
例:
3rose深圳二中1976-10-10
4mike深圳一中1975-12-23
2、数据传入命令loaddatalocalinfile"文件名"intotable表名;
注意:
你最好将文件复制到mysql_in目录下,并且要先用use命令选表所在的库。
五、导出和导入数据:
(命令在DOS的mysql_in目录下执行)
导出表
mysqldump--optschool>school.sql
注释:
将数据库school中的表全部备份到school.sql文件,school.sql是一个文本文件,
文件名任取,打开看看你会有新发现。
mysqldump--optschoolteacherstudent>school.teacher.student.sql
注释:
将数据库school中的teacher表和student表备份到school.teacher.student.sql文
件,school.teacher.student.sql是一个文本文件,文件名任取,打开看看你会有新发现。
导入表
mysql
mysql>createdatabaseschool;
mysql>useschool;
mysql>sourceschool.sql;
(或将school.sql换为school.teacher.sql/school.teacher.student.sql)
导出数据库
mysqldump--databasesdb1db2>db1.db2.sql
注释:
将数据库dbl和db2备份到db1.db2.sql文件,db1.db2.sql是一个文本文件,文件名
任取,打开看看你会有新发现。
(举个例子:
mysqldump-hhost-uuser-ppass--databasesdbname>file.dump
就是把host上的以名字user,口令pass的数据库dbname导入到文件file.dump中。
)
导入数据库
mysql复制数据库
mysqldump--all-databases>all-databases.sql
注释:
将所有数据库备份到all-databases.sql文件,all-databases.sql是一个文本文件,
文件名任取。
导入数据库
mysql
mysql>dropdatabasea;
mysql>dropdatabaseb;
mysql>dropdatabasec;
...
mysql>sourceall-databases.sql;(或exit退出mysql后mysql后记:
其实mysql的对数据库的操作与其它的SQL类数据库大同小异,您最好找本将SQL的书看
看。
我在这里只介绍一些基本的,其实我也就只懂这些了,呵呵。
最好的mysql教程还是"晏子"译的"mysql中文参考手册"。
不仅免费,每个相关网站都有
下载,而且它是最权威的。
可惜不象"PHP4中文手册"那样是chm的格式,在查找函数命令的
时候不太方便。
3.打开数据库:
usedbname;
显示所有数据库:
showdatabases;
显示数据库mysql中所有的表:
先usemysql;然后showtables;
显示表的列信息:
describeuser;(显示表mysql数据库中user表的信息);
4.创建一个可以从任何地方连接服务器的一个完全的超级用户,但是必须使用一个口令something做这个
GRANTALLPRIVILEGESON*.*TOmonty@localhostIDENTIFIEDBY'something'WITHGRANTOPTION;
GRANTALLPRIVILEGESON*.*TOmonty@"%"IDENTIFIEDBY'something'WITHGRANTOPTION;
5.删除授权:
REVOKEALLPRIVILEGESON*.*FROMroot@"%";
USEmysql;
DELETEFROMuserWHEREUser="root"andHost="%";
FLUSHPRIVILEGES;
6.创建一个用户custom在特定客户端wei