1.数据库(DB):存储数据的仓库,仓库在计算机磁盘上。
2.数据库管理员(DBA):管理数据库的人员。
3.数据库管理系统(DBMS):管理数据库和用户。
4.数据库发展史:线型数据库时代,网状数据库时代,关系型数据库时代和非关系型数据库时代。
5.关系型数据库:Oracle,MySql,Sql Server,DB2
非关系型数据库:redis,MongoDB,nosql…
6.数据库服务器(DBS):安装和管理数据库的一台计算机。
7.关系型数据库的组成:数据库的表,表与表之间的关系和数据库对象组成。
8.数据库的表:按照一定规则存储数据的表格。
9.数据库表中的行=记录=实体
10.数据表中的列=字段=域
11.MySql:现在属于Oracle公司,MySql5.5之前开源,免费,体积小,默认MySql数据库引擎InnoDB。
12.MySql数据库卸载
12.1:MySql数据库卸载
12.1.1:打开任务管理器-》服务-》MySql服务-》右键停止MySql服务。
12.1.2:打开控制面板-》程序和功能-》MySql右键卸载。
12.1.3:C盘-》打开ProgramData-》找到MySql文件夹删除
13.开启和停止MySql的服务:
13.1:第一种启动:打开任务管理器-》服务-》MySql服务-》右键启动/停止。
13.2:第二种启动:我的电脑-》右键管理-》服务的应用程序-》服务-》MySql服务-》右键启 动/停止。
13.3:第三种启动:用管理员身份运行cmd-》输入命令:net start/stop mysql
14.连接数据库登录:
14.1:第一种:打开所有程序-》MySql的客户端打开-》输入密码
14.2:第二种:打开cmd-》进入Mysql安装路径下bin目录下
-》输入命令:mysql -u 用户名 -p 密码
14.3:第三种:打开Navicat-》连接-》填写连接信息-》测试连接成功-》确定。
15.SQL:结构化查询语言。专门对数据作操作的语言。Sql92标准。
15.1:DDL:数据的定义语言。创建和删除数据库或表
15.2:DML(重点):数据库的管理语言。对表中数据作增,删,改操作。
15.3:DQL(重点):数据库的查询语言。对表中数据作查询操作。
15.4:DCL:数据库控制语言。创建和删除用户,给用户授权或撤消权限。备份和还原。
15.5:TCL:事务控制语言。对事务和存储过程等作操作。
16.DDL:数据的定义语言
16.1:查看数据数据库:show databases;
16.2:创建数据库:create database 数据库名 【default charset utf-8】;
16.3:查看数据库创建:show create database 数据库名;
16.4:删除数据库:drop database 数据库名;
16.5:进入数据库:use 数据库;
16.6:创建表:
create table 表名(
列名1 数据类型1 列的特征1,
…
列名2 数据类型2 列的特征2
)
16.7:查看当前数据中所有的表:show tables;
16.8:查看表的创建:show create table 表名;
16.8:修改表名 : alter table 旧表名 rename 新的表名;
16.9:修改表的列的数据类型:alter table 表名 modify 列名 数据类型
16.10:增加表字段:alter table 表名 add column 字段名 类型;
16.11:删除表字段:alter table 表名 drop column 字段名;
16.12:修改表中的字段:alter table 表名 change 字段原名 字段新名 字段类型;
16.13:删除表:drop table 表名;
17.DML:数据库操作语言。
17.1:向表中插入数据:
语法:(推荐用)insert into 表名(列名1,列名2,…) values(值1,值2,…);
insert into 表名 values(值1,值2…);
注意:列名列表与值列表的位置,个数,类型要一一对应。
eg:insert into t_student(sid,sname,spassword,sage,ssex)
values(1001,‘张三’,‘123456’,99,‘女’);
insert into t_student values(1002,‘李四’,‘123’,100,‘男’);
eg:向表中插入数据,插入默认值
insert into t_student(sid,sname,spassword,sage,ssex)
values(1004,‘赵六’,‘11’,18,default);
insert into t_student(sid,sname,spassword,sage)
values(1005,‘钱七’,‘11’,18);
17.2:修改表中的数据:
语法:update 表名 set 列名1=值1,列名2=值2 where 条件;
注意:修改表时一定要写where 条件,否则修改的是整个表。
eg:update t_student set sage=18,ssex=‘男’ where sname=‘张三’;
17.3:删除表中的数据:
语法:delete from 表名 where 条件;
eg:delete from t_class where cid=1;
注意:删除表中所有的数据
drop table 表名;删除整张表,包括表的结构,数据,与表相关都删除了
delete from 表名;只删除表中数据,一行一行的删除,
表的结构还在,标记种子也在。
truncate table 表名;删除表中数据和标记种子,一页一页的删除,删除效率最高,
表的结构还在。
18.DQL:数据库的查询语言。
语法:select 列名1,列名2…
from 表名
【where 条件】 //边查边筛选
【group by 列名】 //查完后对结果进行分组
【having 条件】 //分完组之后再筛选
【order by 列名 asc/desc】//最后对结果进行排序
eg:#查询表中所有的数据
select * from t_student;(属于模糊查询,效率低)
select sid,sname,spassword,sage,ssex from t_student;
#查询学生表中所有的男生
select sid,sname,spassword,sage,ssex from t_student where ssex='男'
18.1:MySql中聚合函数:求总和sum(),求最大值max(),求最小值min(),求平均值avg(),求总记 录数count();
注意:聚合函数一般不能和普通列一起查询,除非普通列作为分组条件。
聚合函数可以用select后面,hvaing后面,group by后面。
eg:#查询中聚合函数的使用
select sum(sid) as 学号的总和,max(sid) as 最大的学号,min(sid) as 最小的学 号,avg(sid) as 平均学号,count(sid) as 总人数 from t_student;
18.2:分组查询和筛选及排序
注意:有hvaing一定有group by,有group by的地方不一定有having.
eg:#分组查询:查询每个班的学生总人数
select count(sid) 人数,cid 班级编号 from t_student group by cid;
#分组查询后再筛选再排序:查询总人数大于1的班级的学生总人数和班级编号,根据班级编号降序
select count(sid),cid
from t_student
group by cid
having count(sid)>1
order by cid desc;
18.3:模糊查询:模糊查询效率低于精确查询
18.3.1:数据库中通配符:_通配任意一个字符,%通配任意长度的任意字符,[a-z]通配中 括号中任意一个字符。
18.3.2:Like模糊查询,只用于字符串列:列值像…
eg:#模糊查询:查询出所有姓王的学生姓名
select sname from t_student where sname like ‘王%’;
18.3.3:between min and max 模糊查询,只用户数值列:在min和max范围内
eg:#模糊查询:查询年龄在18到40岁之间所有的学生的姓名
select sname from t_student where sage>=18 and sage<=40;
select sname from t_student where sage BETWEEN 18 and 40;
18.3.4:in(值1,值2,值3)模糊查询:列值满足值1,值2,值3中任意一个就行。
eg:#模糊查询:查询年龄等于18或者年龄20或者年龄等于30的所有学生的姓名
select sname from t_student where sage=18 or sage=20 or sage=30;
select sname from t_student where sage in(18,20,30);
19.连表查询:多张表之间进行联合查询。关键点:找到表与表之间公共列。
19.1:内联接:表与表之间是平等
19.1.1:第一种内联接语法:
select 列名列表
from 表1,表2,表3
where 表1.公共列=表2.公共列 and 表2.公共列=表3.公共列
19.1.2:第二种内联接语法:
select 列名列表
from 表1
inner join 表2 on 表1.公共列=表2.公共列
inner join 表3 on 表2.公共列=表3.公共列
eg:#内联接:查询学生的姓名和班级名称,班级编号
select sname,cname,s.cid
from t_student s,t_class c
where s.cid=c.cid;
select sname,cname,s.cid
from t_student s
inner join t_class c on s.cid=c.cid
19.2:外联接:表与表之间有主次关系,主表中数据全部查询,次表中数据有与主表中相 关的数据就查询,没有相关数据就以null显示
19.2.1:左外连接:以左边的表为主表,右边的表为次表,主表中数据全部显示,次表 中与 主表中相关的数据全部显示,次表中与主表无关的数据不显示。
语法:select 列名列表
from 表1
left join 表2 on 表1.公共列=表2.公共列
left join 表3 on 表2.公共列=表3.公共列
19.2.2:右外连接:以右边的表为主表,左边的表为次表,主表中数据全部显示,次表 中与主表中相关的数据全部显示,次表中与主表无关的数据不显示。
语法:select 列名列表
from 表1
right join 表2 on 表1.公共列=表2.公共列
right join 表3 on 表2.公共列=表3.公共列
eg:#外联接:查询所有的学生姓名,以及与之相关的班级名称
select sname,cname
from t_student as s
left join t_class as c on s.cid=c.cid;
select sname,cname
from t_class as c
right join t_student as s on s.cid=c.cid;
#外联接:查询所有的班级名称,以及与之相关的学生姓名
select sname,cname
from t_class as c
left join t_student as s on c.cid=s.cid;
select sname,cname
from t_student as s
right join t_class as c on c.cid=s.cid;
20.子查询:一个查询结构中完整的嵌套另一个查询结构。嵌套的层次没有限制。
子查询执行特点:由内到外执行。
20.1:能用子查询解决的问题都可以用联表查询解决;能用联表查询解决的问题不一定可 用子查询解决。
20.2:对同一个问题,子查询的效率一般比联表查询效率高,除非子查询中用了模糊查 询,它的效率低。
20.3:子查询可以用在from后作为临时表,还可用在where,having后面作为条件。
eg:#子查询:查询JavaEE1906的所有学生姓名
#先查询JavaEE1906所对应班级编号,再根据查询班级编号查询出学生姓名
select sname
from t_student
where cid=(select cid from t_class where cname='JavaEE1906');
select sname
from t_student s
inner join t_class c on s.cid=c.cid
where c.cname='JavaEE1906';
21.去除重复的值的查询:select distinct 列名列表 from 表名;
eg:#去除查询结果中重复的值
select DISTINCT cname from t_class;
22.limit查询
22.1:限制输出的结果条数:select 列名列表 from 表名 limit 限制的条件。
eg:#限制输出结果前3条
select sid,sname,spassword,sage,ssex,cid from t_student limit 3;
22.2:分页输出结果:select 列名列表 from 表名 limit 起始记录数据,每页显示的条数;
分页Sql语句语法:select 列名列表
from 表名
limit (当前页码-1)*每页显示的条数,每页显示的条数;
eg:#分页查询:每页显示2条记录,显示第3页
select sid,sname,spassword,sage,ssex,cid from t_student limit 4,2;
23.DCL:数据库的控制语言:
23.1:创建用户:create user 用户名【@主机】 identified by 密码。
23.2:删除用户:drop user 用户名;
23.3:给用户授权:grant 权限 on 数据库名.表名 to 用户名 @主机 identified by 密码;
23.4:撤消用户的权限:revoke 权限 on 数据库名.表名 from 用户名;
eg:#创建用户
create user ‘sx’ identified by ‘sx’;
#给用户授权:给当前用户操作myschool数据库中所有表的所有权限
GRANT all on myschool.* to ‘sx’@localhost identified by ‘sx’;
#撤消用户的权限
REVOKE all on myschool.* from ‘sx’@localhost;
#删除用户
drop user ‘sx’;
23.5:给数据库备份:以管理身份运行cmd->进入sql/bin
->运行mysqldump -u 用户名 -p 数据库名>路径\文件名.sql->回车键;
24.6:给数据库还原:先创建同名数据库-》进入数据库-》source 路径\文件名.sql;