基本操作指南.docx
《基本操作指南.docx》由会员分享,可在线阅读,更多相关《基本操作指南.docx(15页珍藏版)》请在冰豆网上搜索。
![基本操作指南.docx](https://file1.bdocx.com/fileroot1/2023-2/23/eb68a5c7-edf6-416f-bc13-403ada2081e5/eb68a5c7-edf6-416f-bc13-403ada2081e51.gif)
基本操作指南
MySQL的相关概念介绍
MySQL为关系型数据库(RelationalDatabaseManagementSystem),这种所谓的"关系型"可以理解为"表格"的概念,一个关系型数据库由一个或数个表格组成,如图所示的一个表格:
∙表头(header):
每一列的名称;
∙列(row):
具有相同数据类型的数据的集合;
∙行(col):
每一行用来描述某个人/物的具体信息;
∙值(value):
行的具体信息,每个值必须与该列的数据类型相同;
∙键(key):
表中用来识别某个特定的人\物的方法,键的值在当前列中具有唯一性。
Windows下MySQL的配置
)
配置步骤:
2.在安装文件夹下找到my-small.ini配置文件,将其重命名为my.ini,打开进行编辑,在[client]与[mysqld]下均添加一行:
default-character-set=gbk
4.在环境变量的Path变量中添加;%MYSQL_HOME%\bin;
5.安装MySQL服务,打开Windows命令提示符,执行命令:
mysqld--installMySQL--defaults-file="my.ini"提示"Servicesuccessfullyinstalled."表示成功;
MySQL服务的启动、停止与卸载
在Windows命令提示符下运行:
启动:
netstartMySQL
停止:
netstopMySQL
卸载:
scdeleteMySQL
MySQL脚本的基本组成
与常规的脚本语言类似,MySQL也具有一套对字符、单词以及特殊符号的使用规定,MySQL通过执行SQL脚本来完成对数据库的操作,该脚本由一条或多条MySQL语句(SQL语句+扩展语句)组成,保存时脚本文件后缀名一般为.sql。
在控制台下,MySQL客户端也可以对语句进行单句的执行而不用保存为.sql文件。
标识符
标识符用来命名一些对象,如数据库、表、列、变量等,以便在脚本中的其他地方引用。
MySQL标识符命名规则稍微有点繁琐,这里我们使用万能命名规则:
标识符由字母、数字或下划线(_)组成,且第一个字符必须是字母或下划线。
对于标识符是否区分大小写取决于当前的操作系统,Windows下是不敏感的,但对于大多数linux\unix系统来说,这些标识符大小写是敏感的。
关键字:
MySQL的关键字众多,这里不一一列出,在学习中学习。
这些关键字有自己特定的含义,尽量避免作为标识符。
语句:
MySQL语句是组成MySQL脚本的基本单位,每条语句能完成特定的操作,他是由SQL标准语句+MySQL扩展语句组成。
函数:
MySQL函数用来实现数据库操作的一些高级功能,这些函数大致分为以下几类:
字符串函数、数学函数、日期时间函数、搜索函数、加密函数、信息函数。
MySQL中的数据类型
MySQL有三大类数据类型,分别为数字、日期\时间、字符串,这三大类中又更细致的划分了许多子类型:
∙数字类型
∙整数:
tinyint、smallint、mediumint、int、bigint
∙浮点数:
float、double、real、decimal
∙日期和时间:
date、time、datetime、timestamp、year
∙字符串类型
∙字符串:
char、varchar
∙文本:
tinytext、text、mediumtext、longtext
∙二进制(可用来存储图片、音乐等):
tinyblob、blob、mediumblob、longblob
这里不能详细对这些类型进行介绍了,篇幅可能会很长,详细介绍参见:
:
使用MySQL数据库
登录到MySQL
当MySQL服务已经运行时,我们可以通过MySQL自带的客户端工具登录到MySQL数据库中,首先打开命令提示符,输入以下格式的命名:
mysql-h主机名-u用户名-p
∙-h:
该命令用于指定客户端所要登录的MySQL主机名,登录当前机器该参数可以省略;
∙-u:
所要登录的用户名;
∙-p:
告诉服务器将会使用一个密码来登录,如果所要登录的用户名密码为空,可以忽略此选项。
以登录刚刚安装在本机的MySQL数据库为例,在命令行下输入mysql-uroot-p按回车确认,如果安装正确且MySQL正在运行,会得到以下响应:
Enterpassword:
若密码存在,输入密码登录,不存在则直接按回车登录,按照本文中的安装方法,默认root账号是无密码的。
登录成功后你将会看到WelecometotheMySQLmonitor...的提示语。
然后命令提示符会一直以mysql>加一个闪烁的光标等待命令的输入,输入exit或quit退出登录。
创建一个数据库
使用createdatabase语句可完成对数据库的创建,创建命令的格式如下:
createdatabase数据库名[其他选项];
例如我们需要创建一个名为samp_db的数据库,在命令行下执行以下命令:
createdatabasesamp_dbcharactersetgbk;
为了便于在命令提示符下显示中文,在创建时通过charactersetgbk将数据库字符编码指定为gbk。
创建成功时会得到QueryOK,1rowaffected(0.02sec)的响应。
注意:
MySQL语句以分号(;)作为语句的结束,若在语句结尾不添加分号时,命令提示符会以->提示你继续输入(有个别特例,但加分号是一定不会错的);
提示:
可以使用showdatabases;命令查看已经创建了哪些数据库。
选择所要操作的数据库
要对一个数据库进行操作,必须先选择该数据库,否则会提示错误:
ERROR1046(3D000):
Nodatabaseselected
两种方式对数据库进行使用的选择:
一:
在登录数据库时指定,命令:
mysql-D所选择的数据库名-h主机名-u用户名-p
例如登录时选择刚刚创建的数据库:
mysql-Dsamp_db-uroot-p
二:
在登录后使用use语句指定,命令:
use数据库名;
use语句可以不加分号,执行usesamp_db来选择刚刚创建的数据库,选择成功后会提示:
Databasechanged
创建数据库表
使用createtable语句可完成对表的创建,createtable的常见形式:
createtable表名称(列声明);
以创建students表为例,表中将存放学号(id)、姓名(name)、性别(sex)、年龄(age)、联系电话(tel)这些内容:
createtablestudents
(
idintunsignednotnullauto_incrementprimarykey,
namechar(8)notnull,
sexchar(4)notnull,
agetinyintunsignednotnull,
telchar(13)nulldefault"-"
);
对于一些较长的语句在命令提示符下可能容易输错,因此我们可以通过任何文本编辑器将语句输入好后保存为createtable.sql的文件中,通过命令提示符下的文件重定向执行执行该脚本。
打开命令提示符,输入:
mysql-Dsamp_db-uroot-p(提示:
1.如果连接远程主机请加上-h指令;2.createtable.sql文件若不在当前工作目录下需指定文件的完整路径。
)
语句解说:
createtabletablename(columns)为创建数据库表的命令,列的名称以及该列的数据类型将在括号内完成;
括号内声明了5列内容,id、name、sex、age、tel为每列的名称,后面跟的是数据类型描述,列与列的描述之间用逗号(,)隔开;
以"idintunsignednotnullauto_incrementprimarykey"行进行介绍:
∙"id"为列的名称;
∙
∙"notnull"说明该列的值不能为空,必须要填,如果不指定该属性,默认可为空;
∙"auto_increment"需在整数列中使用,其作用是在插入数据时若该列为NULL,MySQL将自动产生一个比现存值更大的唯一标识符值。
在每张表中仅能有一个这样的值且所在列必须为索引列。
∙"primarykey"表示该列是表的主键,本列的值必须唯一,MySQL将自动索引该列。
下面的char(8)表示存储的字符长度为8,tinyint的取值范围为-127到128,default属性指定当该列值为空时的默认值。
更多的数据类型请参阅:
提示:
1.使用showtables;命令可查看已创建了表的名称;2.使用describe表名;命令可查看已创建的表的详细信息。
操作MySQL数据库
向表中插入数据
insert语句可以用来将一行或多行数据插到数据库表中,使用的一般形式如下:
insert[into]表名[(列名1,列名2,列名3,...)]values(值1,值2,值3,...);
其中[]内的内容是可选的,例如,要给samp_db数据库中的students表插入一条记录,执行语句:
按回车键确认后若提示QueryOk,1rowaffected(0.05sec)表示数据插入成功。
若插入失败请检查是否已选择需要操作的数据库。
有时我们只需要插入部分数据,或者不按照列的顺序进行插入,可以使用这样的形式进行插入:
insertintostudents(name,sex,age)values("孙丽华","女",21);
查询表中的数据
select语句常用来根据一定的查询规则到数据库中获取数据,其基本的用法为:
select列名称from表名称[查询条件];
例如要查询students表中所有学生的名字和年龄,输入语句selectname,agefromstudents;执行结果如下:
mysql>selectname,agefromstudents;
+--------+-----+
|name|age|
+--------+-----+
|王刚|20|
|孙丽华|21|
|王永恒|23|
|郑俊杰|19|
|陈芳|22|
|张伟朋|21|
+--------+-----+
6rowsinset(0.00sec)
mysql>
也可以使用通配符*查询表中所有的内容,语句:
select*fromstudents;
按特定条件查询:
where关键词用于指定查询条件,用法形式为:
select列名称from表名称where条件;
以查询所有性别为女的信息为例,输入查询语句:
select*fromstudentswheresex="女";
where子句不仅仅支持"where列名=值"这种名等于值的查询形式,对一般的比较运算的运算符都是支持的,例如=、>、<、>=、<、!
=以及一些扩展运算符is[not]null、in、like等等。
还可以对查询条件使用or和and进行组合查询,以后还会学到更加高级的条件查询方式,这里不再多做介绍。
示例:
查询年龄在21岁以上的所有人信息:
select*fromstudentswhereage>21;
查询名字中带有"王"字的所有人信息:
select*fromstudentswherenamelike"%王%";
查询id小于5且年龄大于20的所有人信息:
select*fromstudentswhereid<5andage>20;
更新表中的数据
update语句可用来修改表中的数据,基本的使用形式为:
update表名称set列名称=新值where更新条件;
使用示例:
将id为5的手机号改为默认的"-":
updatestudentssettel=defaultwhereid=5;
将所有人的年龄增加1:
updatestudentssetage=age+1;
删除表中的数据
delete语句用于删除表中的数据,基本用法为:
deletefrom表名称where删除条件;
使用示例:
删除id为2的行:
deletefromstudentswhereid=2;
删除所有年龄小于21岁的数据:
deletefromstudentswhereage<20;
删除表中的所有数据:
deletefromstudents;
创建后表的修改
altertable语句用于创建后对表的修改,基础用法如下:
添加列
基本形式:
altertable表名add列名列数据类型[after插入位置];
示例:
在表的最后追加列address:
altertablestudentsaddaddresschar(60);
在名为age的列后插入列birthday:
altertablestudentsaddbirthdaydateafterage;
修改列
基本形式:
altertable表名change列名称列新名称新数据类型;
示例:
将表tel列改名为telphone:
altertablestudentschangeteltelphonechar(13)default"-";
将name列的数据类型改为char(16):
altertablestudentschangenamenamechar(16)notnull;
删除列
基本形式:
altertable表名drop列名称;
示例:
删除birthday列:
altertablestudentsdropbirthday;
重命名表
基本形式:
altertable表名rename新表名;
示例:
重命名students表为workmates:
altertablestudentsrenameworkmates;
删除整张表
基本形式:
droptable表名;
示例:
删除workmates表:
droptableworkmates;
删除整个数据库
基本形式:
dropdatabase数据库名;
示例:
删除samp_db数据库:
dropdatabasesamp_db;
附录
修改root用户密码
按照本文的安装方式,root用户默认是没有密码的,重设root密码的方式也较多,这里仅介绍一种较常用的方式。
使用mysqladmin方式:
打开命令提示符界面,执行命令:
mysqladmin-uroot-ppassword新密码
执行后提示输入旧密码完成密码修改,当旧密码为空时,直接按回车键确认即可。
一些最重要的SQL命令
∙SELECT-从数据库中提取数据
∙
∙UPDATE-更新数据库中的数据
∙
∙DELETE-从数据库中删除数据
∙
∙INSERTINTO-向数据库中插入新数据
∙
∙CREATEDATABASE-创建新数据库
∙
∙ALTERDATABASE-修改数据库
∙
∙CREATETABLE-创建新表
∙
∙ALTERTABLE-变更(改变)数据库表
∙
∙DROPTABLE-删除表
∙
∙CREATEINDEX-创建索引(搜索键)
∙
∙DROPINDEX-删除索
∙
日常收集常用SQL查询语句大全
常用sql查询语句如下所示:
一、简单查询语句
1.查看表结构
SQL>DESCemp;
2.查询所有列
SQL>SELECT*FROMemp;
3.查询指定列
SQL>SELECTempmo,ename,mgrFROMemp;
SQL>SELECTDISTINCTmgrFROMemp;只显示结果不同的项
4.查询指定行
SQL>SELECT*FROMempWHEREjob='CLERK';
5.使用算术表达式
SQL>SELECTename,sal*13+nvl(comm,0)FROMemp;
nvl(comm,1)的意思是,如果comm中有值,则nvl(comm,1)=comm;comm中无值,则nvl(comm,1)=0。
SQL>SELECTename,sal*13+nvl(comm,0)year_salFROMemp;(year_sal为别名,可按别名排序)
SQL>SELECT*FROMempWHEREhiredate>'01-1月-82';
6.使用like操作符(%,_)
%表示一个或多个字符,_表示一个字符,[charlist]表示字符列中的任何单一字符,[^charlist]或者[!
charlist]不在字符列中的任何单一字符。
SQL>SELECT*FROMempWHEREenamelike'S__T%';
7.在where条件中使用In
SQL>SELECT*FROMempWHEREjobIN('CLERK','ANALYST');
8.查询字段内容为空/非空的语句
SQL>SELECT*FROMempWHEREmgrIS/ISNOTNULL;
9.使用逻辑操作符号
SQL>SELECT*FROMempWHERE(sal>500orjob='MANAGE')andenamelike'J%';
10.将查询结果按字段的值进行排序
SQL>SELECT*FROMempORDERBYdeptno,salDESC;(按部门升序,并按薪酬降序)
二、复杂查询
1.数据分组(max,min,avg,sum,count)
SQL>SELECTMAX(sal),MIN(age),AVG(sal),SUM(sal)fromemp;
SQL>SELECT*FROMempwheresal=(SELECTMAX(sal)fromemp));
SQL>SELECCOUNT(*)FROMemp;
2.groupby(用于对查询结果的分组统计)和having子句(用于限制分组显示结果)
SQL>SELECTdeptno,MAX(sal),AVG(sal)FROMempGROUPBYdeptno;
SQL>SELECTdeptno,job,AVG(sal),MIN(sal)FROMempgroupbydeptno,jobhavingAVG(sal)<2000;
对于数据分组的总结:
a.分组函数只能出现在选择列表、having、orderby子句中(不能出现在where中)
b.如果select语句中同时包含有groupby,having,orderby,那么它们的顺序是groupby,having,orderby。
c.在选择列中如果有列、表达式和分组函数,那么这些列和表达式必须出现在groupby子句中,否则就是会出错。
使用groupby不是使用having的前提条件。
3.多表查询
SQL>SELECTe.name,e.sal,d.dnameFROMempe,deptdWHEREe.deptno=d.deptnoorderbyd.deptno;
SQL>SELECTe.ename,e.sal,s.gradeFROMempe,salgradesWHERe.salBETWEENs.losalANDs.hisal;
4.自连接(指同一张表的连接查询)
SQL>SELECTer.ename,ee.enamemgr_namefromemper,empeewhereer.mgr=ee.empno;
5.子查询(嵌入到其他sql语句中的select语句,也叫嵌套查询)
5.1单行子查询
SQL>SELECTenameFROMempWHEREdeptno=(SELECTdeptnoFROMempwhereename='SMITH');查询表中与smith同部门的人员名字。
因为返回结果只有一行,所以用“=”连接子查询语句
5.2多行子查询
SQL>SELECTename,job,sal,deptnofromempWHEREjobIN(SELECTDISTINCTjobFROMempWHEREdeptno=10);查询表中与部门号为10的工作相同的员工的姓名、工作、薪水、部门号。
因为返回结果有多行,所以用“IN”连接子查询语句。
in与exists的区别:
exists()后面的子查询被称做相关子查询,它是不返回列表的值的。
只是返回一个ture或false的结果,其运行方式是先运行主查询一次,再去子查询里查询与其对应的结果。
如果是ture则输出,反之则不输出。
再根据主查询中的每一行去子查询里去查询。
in()后面的子查询,是返回结果集的,换句话说执行次序和exists()不一样。
子查询先产生结果集,然后主查询再去结果集里去找符合要求的字段列表去。
符合要求的输出,反之则不输出。
5.3使用ALL
SQL>SELECTename,sal,deptnoFROMempWHEREsal>ALL(SELECTsalFROMempWHEREdeptno=30);或SQL>SELECTename,sal,deptnoFROMempWHEREsal>(SELECTMAX(sal)FROMempWHEREdeptno=30);查询工资比部门号为30号的所有员工工资都高的员工的姓名、薪水和部门号。
以上两个语句在功能上是一样的,但执行效率上,函数会高得多。
5.4使用ANY
SQL>SELECTename,sal,deptnoFROMempWHEREsal>ANY(SELECTsalFROMempWHEREdeptno=30);或SQL>SELECTename,sal,deptnoFROMempWHEREsal>(SELECTMIN(sal)FROMempWHEREdeptno=30);查询工资比部门号为30号的任意一个员工工资高