MySQL基础知识总结.docx
《MySQL基础知识总结.docx》由会员分享,可在线阅读,更多相关《MySQL基础知识总结.docx(24页珍藏版)》请在冰豆网上搜索。
MySQL基础知识总结
day15-MySQL
数据库
1 数据库概念(了解)
1.1 什么是数据库
数据库就是用来存储和管理数据的仓库!
数据库存储数据的优先:
●
可存储大量数据;
●方便检索;
●保持数据的一致性、完整性;
●安全,可共享;
●通过组合分析,可产生新数据。
1.2 数据库的发展历程
●没有数据库,使用磁盘文件存储数据;
●层次结构模型数据库;
●网状结构模型数据库;
●关系结构模型数据库:
使用二维表格来存储数据;
●关系-对象模型数据库;
MySQL就是关系型数据库!
1.3 常见数据库
●Oracle(神喻):
甲骨文(最高!
);
●DB2:
IBM;
●SQLServer:
微软;
●Sybase:
赛尔斯;
●MySQL:
甲骨文;
1.4 理解数据库
●RDBMS=管理员(manager)+仓库(database)
●database=N个table
●table:
Ø表结构:
定义表的列名和列类型!
Ø表记录:
一行一行的记录!
我们现在所说的数据库泛指“关系型数据库管理系统(RDBMS-Relationaldatabasemanagementsystem)”,即“数据库服务器”。
当我们安装了数据库服务器后,就可以在数据库服务器中创建数据库,每个数据库中还可以包含多张表。
数据库表就是一个多行多列的表格。
在创建表时,需要指定表的列数,以及列名称,列类型等信息。
而不用指定表格的行数,行数是没有上限的。
下面是tab_student表的结构:
当把表格创建好了之后,就可以向表格中添加数据了。
向表格添加数据是以行为单位的!
下面是s_student表的记录:
s_id
s_name
s_age
s_sex
S_1001
zhangSan
23
male
S_1002
liSi
32
female
S_1003
wangWu
44
male
大家要学会区分什么是表结构,什么是表记录。
1.5 应用程序与数据库
应用程序使用数据库完成对数据的存储!
2 安装MySQL数据库
2.1 安装MySQL
参考:
MySQL安装图解.doc
2.2 MySQL目录结构
MySQL的数据存储目录为data,data目录通常在C:
\DocumentsandSettings\AllUsers\ApplicationData\MySQL\MySQLServer5.1\data位置。
在data下的每个目录都代表一个数据库。
MySQL的安装目录下:
●bin目录中都是可执行文件;
●my.ini文件是MySQL的配置文件;
3 基本命令
3.1 启动和关闭mysql服务器
●启动:
netstartmysql;
●关闭:
netstopmysql;
在启动mysql服务后,打开windows任务管理器,会有一个名为mysqld.exe的进程运行,所以mysqld.exe才是MySQL服务器程序。
3.2 客户端登录退出mysql
在启动MySQL服务器后,我们需要使用管理员用户登录MySQL服务器,然后来对服务器进行操作。
登录MySQL需要使用MySQL的客户端程序:
mysql.exe
●登录:
mysql-uroot-p123-hlocalhost;
Ø-u:
后面的root是用户名,这里使用的是超级管理员root;
Ø-p:
后面的123是密码,这是在安装MySQL时就已经指定的密码;
Ø-h:
后面给出的localhost是服务器主机名,它是可以省略的,例如:
mysql-uroot-p123;
●退出:
quit或exit;
在登录成功后,打开windows任务管理器,会有一个名为mysql.exe的进程运行,所以mysql.exe是客户端程序。
SQL语句
1SQL概述
1.1 什么是SQL
SQL(StructuredQueryLanguage)是“结构化查询语言”,它是对关系型数据库的操作语言。
它可以应用到所有关系型数据库中,例如:
MySQL、Oracle、SQLServer等。
SQ标准(ANSI/ISO)有:
●SQL-92:
1992年发布的SQL语言标准;
●SQL:
1999:
1999年发布的SQL语言标签;
●SQL:
2003:
2003年发布的SQL语言标签;
这些标准就与JDK的版本一样,在新的版本中总要有一些语法的变化。
不同时期的数据库对不同标准做了实现。
虽然SQL可以用在所有关系型数据库中,但很多数据库还都有标准之后的一些语法,我们可以称之为“方言”。
例如MySQL中的LIMIT语句就是MySQL独有的方言,其它数据库都不支持!
当然,Oracle或SQLServer都有自己的方言。
1.2 语法要求
●SQL语句可以单行或多行书写,以分号结尾;
●可以用空格和缩进来来增强语句的可读性;
●关键字不区别大小写,建议使用大写;
2 分类
●DDL(DataDefinitionLanguage):
数据定义语言,用来定义数据库对象:
库、表、列等;
●DML(DataManipulationLanguage):
数据操作语言,用来定义数据库记录(数据);
●DCL(DataControlLanguage):
数据控制语言,用来定义访问权限和安全级别;
●DQL(DataQueryLanguage):
数据查询语言,用来查询记录(数据)。
3 DDL
3.1 基本操作
●查看所有数据库名称:
SHOWDATABASES;
●切换数据库:
USEmydb1,切换到mydb1数据库;
3.2 操作数据库
●创建数据库:
CREATEDATABASE[IFNOTEXISTS]mydb1;
创建数据库,例如:
CREATEDATABASEmydb1,创建一个名为mydb1的数据库。
如果这个数据已经存在,那么会报错。
例如CREATEDATABASEIFNOTEXISTSmydb1,在名为mydb1的数据库不存在时创建该库,这样可以避免报错。
●删除数据库:
DROPDATABASE[IFEXISTS]mydb1;
删除数据库,例如:
DROPDATABASEmydb1,删除名为mydb1的数据库。
如果这个数据库不存在,那么会报错。
DROPDATABASEIFEXISTSmydb1,就算mydb1不存在,也不会的报错。
●修改数据库编码:
ALTERDATABASEmydb1CHARACTERSETutf8
修改数据库mydb1的编码为utf8。
注意,在MySQL中所有的UTF-8编码都不能使用中间的“-”,即UTF-8要书写为UTF8。
3.3 数据类型
MySQL与Java一样,也有数据类型。
MySQL中数据类型主要应用在列上。
常用类型:
●int:
整型
●double:
浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为999.99;
●decimal:
泛型型,在表单钱方面使用该类型,因为不会出现精度缺失问题;
●char:
固定长度字符串类型;
●varchar:
可变长度字符串类型;
●text:
字符串类型;
●blob:
字节类型;
●date:
日期类型,格式为:
yyyy-MM-dd;
●time:
时间类型,格式为:
hh:
mm:
ss
●timestamp:
时间戳类型;
3.4 操作表
●创建表:
CREATETABLE表名(
列名列类型,
列名列类型,
......
);
例如:
CREATETABLEstu(
sidCHAR(6),
snameVARCHAR(20),
ageINT,
genderVARCHAR(10)
);
再例如:
CREATETABLEemp(
eidCHAR(6),
enameVARCHAR(50),
ageINT,
genderVARCHAR(6),
birthdayDATE,
hiredateDATE,
salaryDECIMAL(7,2),
resumeVARCHAR(1000)
);
●查看当前数据库中所有表名称:
SHOWTABLES;
●查看指定表的创建语句:
SHOWCREATETABLEemp,查看emp表的创建语句;
●查看表结构:
DESCemp,查看emp表结构;
●删除表:
DROPTABLEemp,删除emp表;
●修改表:
1.修改之添加列:
给stu表添加classname列:
ALTERTABLEstuADD(classnamevarchar(100));
2.修改之修改列类型:
修改stu表的gender列类型为CHAR
(2):
ALTERTABLEstuMODIFYgenderCHAR
(2);
3.修改之修改列名:
修改stu表的gender列名为sex:
ALTERTABLEstuchangegendersexCHAR
(2);
4.修改之删除列:
删除stu表的classname列:
ALTERTABLEstuDROPclassname;
5.修改之修改表名称:
修改stu表名称为student:
ALTERTABLEstuRENAMETOstudent;
4 DML
4.1 插入数据
语法:
INSERTINTO表名(列名1,列名2,…)VALUES(值1,值2)
INSERTINTOstu(sid,sname,age,gender)VALUES('s_1001','zhangSan',23,'male');
INSERTINTOstu(sid,sname)VALUES('s_1001','zhangSan');
语法:
INSERTINTO表名VALUES(值1,值2,…)
因为没有指定要插入的列,表示按创建表时列的顺序插入所有列的值:
INSERTINTOstuVALUES('s_1002','liSi',32,'female');
注意:
所有字符串数据必须使用单引用!
4.2 修改数据
语法:
UPDATE表名SET列名1=值1,…列名n=值n[WHERE条件]
UPDATEstuSETsname=’zhangSanSan’,age=’32’,gender=’female’WHEREsid=’s_1001’;
UPDATEstuSETsname=’liSi’,age=’20’WHEREage>50ANDgender=’male’;
UPDATEstuSETsname=’wangWu’,age=’30’WHEREage>60ORgender=’female’;
UPDATEstuSETgender=’female’WHEREgenderISNULL
UPDATEstuSETage=age+1WHEREsname=’zhaoLiu’;
4.3 删除数据
语法:
DELETEFROM表名[WHERE条件]
DELETEFROMstuWHEREsid=’s_1001’003B
DELETEFROMstuWHEREsname=’chenQi’ORage>30;
DELETEFROMstu;
语法:
TRUNCATETABLE表名
TRUNCATETABLEstu;
虽然TRUNCATE和DELETE都可以删除表的所有记录,但有原理不同。
DELETE的效率没有TRUNCATE高!
TRUNCATE其实属性DDL语句,因为它是先DROPTABLE,再CREATETABLE。
而且TRUNCATE删除的记录是无法回滚的,但DELETE删除的记录是可以回滚的(回滚是事务的知识!
)。
5 DCL
5.1 创建用户
语法:
CREATEUSER用户名@地址IDENTIFIEDBY'密码';
CREATEUSERuser1@localhostIDENTIFIEDBY‘123’;
CREATEUSERuser2@’%’IDENTIFIEDBY‘123’;
5.2 给用户授权
语法:
GRANT权限1,…,权限nON数据库.*TO用户名
GRANTCREATE,ALTER,DROP,INSERT,UPDATE,DELETE,SELECTONmydb1.*TOuser1@localhost;
GRANTALLONmydb1.*TOuser2@localhost;
5.3 撤销授权
语法:
REVOKE权限1,…,权限nON数据库.*FORM用户名
REVOKECREATE,ALTER,DROPONmydb1.*FROMuser1@localhost;
5.4 查看用户权限
语法:
SHOWGRANTSFOR用户名
SHOWGRANTSFORuser1@localhost;
5.5 删除用户
语法:
DROPUSER用户名
DROPUSERuser1@localhost;
5.6 修改用户密码
语法:
USEmysql;
UPDATEUSERSETPASSWORD=PASSWORD(‘密码’)WHEREUser=’用户名’andHost=’IP’;
FLUSHPRIVILEGES;
UPDATEUSERSETPASSWORD=PASSWORD('1234')WHEREUser='user2'andHost=’localhost’;
FLUSHPRIVILEGES;
数据查询语法(DQL)
DQL就是数据查询语言,数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端。
语法:
SELECTselection_list/*要查询的列名称*/
FROMtable_list/*要查询的表名称*/
WHEREcondition/*行条件*/
GROUPBYgrouping_columns/*对结果分组*/
HAVINGcondition/*分组后的行条件*/
ORDERBYsorting_columns/*对结果分组*/
LIMIToffset_start,row_count/*结果限定*/
创建名:
●学生表:
stu
字段名称
字段类型
说明
sid
char(6)
学生学号
sname
varchar(50)
学生姓名
age
int
学生年龄
gender
varchar(50)
学生性别
CREATETABLEstu(
sidCHAR(6),
snameVARCHAR(50),
ageINT,
genderVARCHAR(50)
);
INSERTINTOstuVALUES('S_1001','liuYi',35,'male');
INSERTINTOstuVALUES('S_1002','chenEr',15,'female');
INSERTINTOstuVALUES('S_1003','zhangSan',95,'male');
INSERTINTOstuVALUES('S_1004','liSi',65,'female');
INSERTINTOstuVALUES('S_1005','wangWu',55,'male');
INSERTINTOstuVALUES('S_1006','zhaoLiu',75,'female');
INSERTINTOstuVALUES('S_1007','sunQi',25,'male');
INSERTINTOstuVALUES('S_1008','zhouBa',45,'female');
INSERTINTOstuVALUES('S_1009','wuJiu',85,'male');
INSERTINTOstuVALUES('S_1010','zhengShi',5,'female');
INSERTINTOstuVALUES('S_1011','xxx',NULL,NULL);
●雇员表:
emp
字段名称
字段类型
说明
empno
int
员工编号
ename
varchar(50)
员工姓名
job
varchar(50)
员工工作
mgr
int
领导编号
hiredate
date
入职日期
sal
decimal(7,2)
月薪
comm
decimal(7,2)
奖金
deptno
int
部分编号
CREATETABLEemp(
empnoINT,
enameVARCHAR(50),
jobVARCHAR(50),
mgrINT,
hiredateDATE,
salDECIMAL(7,2),
commdecimal(7,2),
deptnoINT
);
INSERTINTOempvalues(7369,'SMITH','CLERK',7902,'1980-12-17',800,NULL,20);
INSERTINTOempvalues(7499,'ALLEN','SALESMAN',7698,'1981-02-20',1600,300,30);
INSERTINTOempvalues(7521,'WARD','SALESMAN',7698,'1981-02-22',1250,500,30);
INSERTINTOempvalues(7566,'JONES','MANAGER',7839,'1981-04-02',2975,NULL,20);
INSERTINTOempvalues(7654,'MARTIN','SALESMAN',7698,'1981-09-28',1250,1400,30);
INSERTINTOempvalues(7698,'BLAKE','MANAGER',7839,'1981-05-01',2850,NULL,30);
INSERTINTOempvalues(7782,'CLARK','MANAGER',7839,'1981-06-09',2450,NULL,10);
INSERTINTOempvalues(7788,'SCOTT','ANALYST',7566,'1987-04-19',3000,NULL,20);
INSERTINTOempvalues(7839,'KING','PRESIDENT',NULL,'1981-11-17',5000,NULL,10);
INSERTINTOempvalues(7844,'TURNER','SALESMAN',7698,'1981-09-08',1500,0,30);
INSERTINTOempvalues(7876,'ADAMS','CLERK',7788,'1987-05-23',1100,NULL,20);
INSERTINTOempvalues(7900,'JAMES','CLERK',7698,'1981-12-03',950,NULL,30);
INSERTINTOempvalues(7902,'FORD','ANALYST',7566,'1981-12-03',3000,NULL,20);
INSERTINTOempvalues(7934,'MILLER','CLERK',7782,'1982-01-23',1300,NULL,10);
●部分表:
dept
字段名称
字段类型
说明
deptno
int
部分编码
dname
varchar(50)
部分名称
loc
varchar(50)
部分所在地点
CREATETABLEdept(
deptnoINT,
dnamevarchar(14),
locvarchar(13)
);
INSERTINTOdeptvalues(10,'ACCOUNTING','NEWYORK');
INSERTINTOdeptvalues(20,'RESEARCH','DALLAS');
INSERTINTOdeptvalues(30,'SALES','CHICAGO');
INSERTINTOdeptvalues(40,'OPERATIONS','BOSTON');
1 基础查询
1.1 查询所有列
SELECT*FROMstu;
1.2 查询指定列
SELECTsid,sname,ageFROMstu;
2 条件查询
2.1 条件查询介绍
条件查询就是在查询时给出WHERE子句,在WHERE子句中可以使用如下运算符及关键字:
●=、!
=、<>、<、<=、>、>=;
●BETWEEN…AND;
●IN(set);
●ISNULL;
●AND;
●OR;
●NOT;
2.2 查询性别为女,并且年龄50的记录
SELECT*FROMstu
WHEREgender='female'ANDge<50;
2.3 查询学号为S_1001,或者姓名为liSi的记录
SELECT*FROMstu
WHEREsid='S_1001'ORsname='liSi';
2.4 查询学号为S_1001,S_1002,S_1003的记录
SELECT*FROMstu
WHEREsidIN('S_1001','S_1002','S_1003');
2.5 查询学号不是S_1001,S_1002,S_1003的记录
SELECT*FROMtab_student
WHEREs_numberNOTIN('S_1001','S_1002','S_1003');
2.6 查询年龄为null的记录
SELECT*FROMstu
WHEREageISNULL;
2.7 查询年龄在20到40之间的学生记录
SELECT*
FROMstu
WHEREage>=20ANDage<=40;
或者
SELECT*
FROMstu
WHEREageBETWEEN20AND40;
2.8 查询性别非男的学生记录
SELECT*
FROMstu
WHEREgender!
='male';
或者
SELECT*
FROMstu
WHEREgender<>'male';
或者
SELECT*
FROMstu
WHERENOTgender='male';
2.9 查询姓名不为null的学生记录
S