1. 数据库的简介
1.1 什么是数据库?就是一个文件系统,使用标准sql对数据进行操作(crud)
1.2 常见的数据库
· oracle:是oracle公司的产品,是大型的收费的数据库
· db2:是ibm公司的产品,是大型的收费的数据库
· SQLServer:微软公司的产品,是中型的数据库
· MySQL:在oracle收购之后6.x版本开始收费,之前的版本都是免费的
· SQLite:是小型的嵌入式数据库,应用在客户端开发中,比如安卓
1.3 关系数据库:存储的是实体之间的关系
· 比如:购物网站,有用户、订单、商品,称为实体
· 用户、订单和商品之间的关系称为实体之间的关系
· 使用er图表示实体之间的关系
——实体使用矩形、在实体上属性使用椭圆,之间的关系使用菱形
2. mysql的安装和卸载
2.1 安装mysql 5.x版本(毕竟之前的是收费的)
2.2 mysql的安装——百度一大堆
2.3 mysql的卸载
第一步:在mysql的安装路径里面,找到一个文件my.ini,在里面找到2个路径,复制出来
basedir="C:/Program Files (x86)/MySQL/MySQL Server 5.5/"
datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/"
第二步:打开控制面板,找到mysql数据库,进行卸载
第三步:找到第一步复制出来的2个路径,把这2个路径里面所有的文件都删除
第四步:打开注册表regedit,搜索mysql,找到了都删除
第五步:重启系统
3. mysql服务器的存储结构
3.1 mysql服务器
· 服务器:从硬件上,服务器就是一台电脑;从软件上,在电脑上安装了服务器软件
· mysql服务器:在一台电脑上,安装了mysql数据库,这台电脑称为mysql服务器
3.2 mysql服务器的存储结构
· 有多个数据库,在每个数据库里面有多个数据库表,在每个表里面有多条记录
· 学习重点:对数据库、数据库表、表中的记录的操作(crud操作)
4. sql语言简介
4.1 数据库是文件系统,使用标准sql对数据库进行操作
· 标准sql,在mysql里面使用语句,在oracle、db2都可以使用这个语句
4.2 什么是sql?
· Structured Query Language,结构化查询语言,对数据库进行操作
· sql是非过程性语言,不需要依赖其他的条件就可以运行
——在java中:需要
if(a >5 ) {System,out.......}
4.3 sql的分类
第一类:DDL(数据定义语言)
· 创建数据库,创建数据库表
· 常用的语句create
第二类:DML(数据操纵语言)
· 对表中的记录进行增加 修改 删除操作
· 常用的语句 insert update delete
第三类:DCL(数据控制语言)
· 数据库的编程语言
第四类:DQL(数据查询语言)
· 对表中的记录进行查询操作
· 常用的语句 select
5. 使用sql对数据库操作
5.1 连接数据库
· 打开cmd窗口,使用命令,连接mysql数据库
· 命令:mysql -u root -p 密码
5.2 创建数据库
· 语句:create database 数据库名称;
· 示例:create database testdb1;
5.3 查看所有数据库
· 语句:show database;
5.4 删除数据库
· 语句:drop database 要删除的数据库的名称
· 示例: drop database testdb1;
5.5 切换数据库
· 如果想要创建一个数据库表,这个表要在一个数据库里面,所以需要切换到数据库
· 语句:use 要切换的数据库名称;
· 示例:use testdb2
6. 使用sql对数据库表操作
6.1 创建数据库表
· 语句 create table 表明 (
字段 类型,
字段类型
)
· 示例:创建表user,字段id username password sex
create table user(
id int,
username varchar(40),
password varchar(40),
sex varchar(10)
)
6.2 mysql的数据类型
字符串类型: VARCHAR CHAR
· 当创建表的时候,使用字符串类型,name varchar(40),指定数据的长度
· varchar和char的区别:
(1)varchar的长度是可变的,比如name varchar(5),存值a,会直接把a存进去
(2)char的长度是固定的,比如name char(5),存值b,把b村进去,后面加很多空格
大数据类型:BLOB TEXT
· 使用这个类型可以存储文件,一般开发,不会直接把文件存到数据库里面,存文件路径
数值型:
TINYINT SMALLINT INT BIGINT FLOAT DOUBLE
· 对应java里面的
byte short int long float double
逻辑型:BIT
· 类似java里面的boolean
日期型:
DATE:用于表示日期 1945-08-15
TIME:用于表示时间 20::13:14
下面的两个类型可以表示日期和事件
DATETIME:手动添加时间到数据库表里面
TIMESTAMP:自动把时间添加到表里面
6.3 查看表的结构:
· 语句:desc 表名称
6.4 mysql的约束有三种
· 第一种:非空约束 not null
表示数据不能为空
· 第二种,唯一性约束 unique
表示表中的记录不能重复
· 第三种,主键约束 primary key
表示非空,唯一性
自动增长 auto_increment
6.5 创建带约束的表
create table person(
id int primary key,
username varchar(40) not null,
sex varchar(20)
)
6.6 删除表
· 语句:drop table 要删除表的名称
6.7 查看当前数据库里面有哪些表
· 语句 show tables;
6.8 修改表结构
修改字段(字段名或者类型):alter table 表名称 change 旧字段 新字段 类型
修改字段类型(标准方式):alter table 表名称 modify 字段名 字段类型
添加字段:alter table 表名称 add 新字段名 字段类型
删除字段:alter table 表名称 drop 字段名
7. 使用sql对表中的记录进行操作(增删改查)
7.1 向表里添加记录insert
· 语句: insert into table values(要添加的值)
· 注意:当添加的字段的数据类型是int类型,直接写值;
当添加的字段的类型是varcahr类型和日期类型,使用单引号包起来;
要添加的值必须和表的结构一一对应
· 练习:向user表里面添加记录
insert into user values(1,'aaa','123','man');
insert into user(username,password) values('aaa','123');
· 自动增长的效果
create table stu (
id int primary key auto_increment,
sname varchar(30)
)
insert into stu values(null,'aaa');
7.2 修改表里面的记录 update
· 语句update 表名称 set 要修改的字段的名称1=修改的值,要修改的字段的名称2=修改的值2 where 条件
· 练习:修改user表里id=1的username修改为QQQ,修改passwod为999
update user set username='QQQ',password='999' where id=1;
7.3 删除表里的记录 delete
· 语句 delete from 表名称 where 条件
· 练习:删除user表里id=2的记录
delete from user where id=2;
· 如果不写where条件,会把表里的所有的记录都删除
7.4 查询表中的记录select
· 语句 select 要查询的字段的名称(*) from 表明 where 条件
create table user(
id int,
username varchar(40),
chinese int,
math int
)
insert into user values(1,'luck',100,30);
insert into user values(2.'mary',60,80);
insert into user values(3,'jack',90,20);
· 练习1:查询user表里面的所有数据
select * from user;
· 练习2:查询user表里面用户名和语文成绩
select username,chinese from user;
· 练习3:查询user表里面id=2的数据
select * from user where id=2;
7.5 别名
· 格式: as 别名
select username as u1,chinese as c1 from user;
as可以省略不写
7.6 distinct,去除表里面重复记录
· 语句 select distinct * from 表名;
7.7 where子句
(1)运算符 < <= > >=
· 练习:查询user表里面语文成绩大于60的所有人员
select * from user where chinese > 60;
(2)in:在范围内
· 练习:查询user表里面英语成绩是80,90的人员信息
select * from user where in(80,90);
这句话是说成绩是80,90的人,不是80到90之间
(3)and:在where里面如果有多个条件同时存在,用and连接,表示需要同时满足
· 练习:查询user表里面语文成绩是100,并且英语成绩是30的人
select * from user where chinese=100 and enligh=30;
(4)得到区间范围的值
· 练习:查询user表里面语文成绩在70-100之间的人
· 写法一:select * from user where chinese>=70 and chinese<=100;
· 写法而:select * from user where chinese between 70 and 100;
(5)like 模糊查询
· 练习1:查询user表里面username包含a的人员信息
select * from user where username like '%a%';
· 练习2:查询user表里面username第二位是a的人员信息:
select * from user where username like'__a';
下划线表示占位符,一个下划线表示一个占位符
7.8 查看当前运行的数据库
select database();
7.9 对表中的记录排序 order by
· order by写在select语句的最后
(1)升序 order by 要排序字段 asc(asc可以省略不写,默认情况就是asc)
(2)降序 order by 要排序字段 desc
· 练习:对user表里的记录进行降序排列
select * from user order by enligh desc;
8. 聚集函数
8.1 使用提供一些函数,直接实现某些功能
8.2 常用的聚集函数
(1)cuount()函数
· 根据要查询的结果,统计记录数
· 写法:select count(*) from .... where ....;
· 练习1:查询user表里面有多少条记录
select count(*) from user;
· 练习2:查询user表里面语文成绩大于60的人员有多少
select count(*) from user where chinese>60;
(2)sum()函数
· 求和的函数
· 格式: select sum(要进行求和的字段) from .... where ....
· 练习1:得到user表里面的语文的总成绩
select sum(chinese) from user;
· 练习2:得到user表脸语文总成绩和英语总成绩
select sum(chinese),sum(enligh) from user;
· 练习3:得到user表里面语文成绩的平均分(总的成绩/总的人数)
select sum(chinese)/count(*) from user;
(3)avg函数
· 计算平均数的函数
· 格式: select avg(要计算的平均数的字段名称) from.....
· 练习:得到user表里面语文成绩的平均分
select avg(chinese) from user;
(4)max()函数:计算最大值
· 写法:select max(字段) from ....
(5)min()函数:计算最小值
· 写法: select min(字段) from....
· 练习:得到user表里面语文成绩的最高分数,英语成绩的最低分数
select max(chinese),min(enligh) from user;
9. 分组操作
· 分组使用group by根据分组的字段
· 在分组的基础山再进行条件的判断 having,后面可以写聚集函数
(1)示例:
create table orders (
id int,
name varchar(40),
price int
)
insert into orders values(1,'电视',2000);
insert into orders values(2,'电视',2000);
insert into orders values(3,'苹果',10);
insert into orders values(4,'手机',500);
insert into orders values(5,'手机',500);
insert into orders values(6,'鼠标',33);
insert into orders values(7,'鼠标',33);
(2)练习1:统计orders表里面每类商品的价格
select name,sum(price) from orders group by name;
(3)练习2:对商品进行分类,得到每类商品的总价格大于66的商品
select name,sum(price) from orders where sum(price)>66 group by name;
这里的语句逻辑上是没有错误的,但是在语法上,where里面不能写聚集函数
select name,sum(price) from orders group by name having sum(price)>66;
10. mysql的可视化工具使用:Navicat
11. mysql的关键字limit
11.1 limit关键字查询表中的某几条记录
11.2 limit关键字不是标准的sql关键字,只能在mysql数据库里面使用,可以实现分页的功能
· 在oracle里面特有关键字:rownum
· 在sqlserver里面特有关键字top
11.3 使用limit查询前几条记录
· 格式:limit 前几条记录 limit3
·练习:查询user表里面的前三条记录
select * from user limit 3;
select * from user limit 0,3;
11.4 使用limit查询第几条到第几条记录
· 写法:limit第一个参数,第二个参数
注意:第一个参数开始的记录数的位置,从0开始
第二个参数是从开始位置向后获取几条记录
· 练习:查询user表里面第二条到第四条的记录
select * from user limit 1,3;
12. 重置mysql的root密码:
(1)知道密码,修改密码
第一,连接mysql数据库
第二,切换数据库 mysql use mysql
第三,进行密码的修改 update user set password=password('要修改成的密码的值') where user='root';
第四,重新启动mysql服务
(2)忘记密码,重置密码
第一,把mysql的服务关闭
第二,打开cmd窗口,输入命令 mysqld --skip-grant-tables(不要加分号)
第三,再打开cmd窗口,连接数据库,不需要输入密码 mysql -u root
第四,切换数据库 mysql use mysql
第五,进行密码的修改 update user set password=password('要修改成的密码的值') where user='root';
第六,把两个cmd窗口都关闭,打开任务管理器,找到mysqld进程,结束
第七,启动mysql服务