1.数据库概念
2.常见数据库
和java相关的数据库
3.mysql的安装和卸载
卸载:
1.去控制面板或者360去卸载
2.删除数据库安装路径和数据存放路径
3.清空回收站
4.关系型数据库
5.数据库服务器内部结构
6.sql概念
一条语句对应一个结果
int i =10; int j = 7; int sum = i+j;
7.sql分类
DDL:数据定义语言.
create,alter,drop...
DML:数据操纵语言
insert,delete,update
DCL:数据控制语言
grant
DQL:数据查询语言(***重点)
select
数据库:
8.命令行连接数据库
9.学习列表
1.创建数据库
eg:创建名字为day06_1的数据库(默认编码)
create database day06_1;
eg:创建名字为day06_2的数据库,指定编码为gbk
create database day06_2 character set gbk;
2.查看数据库
3.删除数据库(用的很少)
eg:删除day06_2的数据库
drop database day06_2;
4.修改数据库(不是修改数据库名,是修改编码集)
eg:把day06_1的数据库改成gbk编码的
alter database day06_1 character set gbk;
注意:
5.其它操作
1.创建表
create table 表名(
字段 类型 约束,
字段 类型 约束,
字段 类型 约束
);
java: int a;
eg:创建一张学生表,id(主键约束,自动增长),学生姓名,学生性别
create table student(
id int primary key auto_increment,
name varchar(20),
sex int
);
1)类型
Java MYSQL
int int
float float
double double
String char/varchar
Date date,time,datetime,timestamp
文件类型 BLOB、TEXT TEXT指的是文本文件 BLOB二进制文件
不同:
1.char/varchar来定义字符串,并且需要指定长度
char(5),最大能存放5个字符,固定长度。 aa。--->身份证18
varchar(5),最大能存放5个字符,可变长度。aa。
2.date;只有日期
time;只有时间
datetime;既有时间又有日期
timestamp;时间戳,null--->下订单
3.注意:在公司里,一般不会把大文件存入blob和text里面,把文件放在硬盘上,存放路径
2)约束(规定,规矩)
注意:
2.查看表
3.修改表
eg:向学生表添加一个班级字段
alter table student add class varchar(20);
eg:修改sex字段的类型为字符串
alter table student modify sex varchar(10);
eg:修改class字段成为grade字段
alter table student change class grade varchar(20);
eg:删除grade字段
alter table student drop grade;
eg:把student改成teacher(用的比较少)
rename table student to teacher;
4.删除表
eg:删除teacher表
drop table teacher;
1.插入数据
注意:
2.更新记录
eg:把分类表的cname更新成’服装’
update category set cname = '服装';
注意:
3.删除记录(表还在,删除数据)
1)delete from 表 [where条件]
2)truncate table 表
区别:
4.查询记录(*重点)
select [*][字段,字段][distinct 字段] from 表名 [where 条件]
1)查询所有的字段
eg:查找商品表所有的字段
select *from product
2)查询某张表特定字段的记录
eg:查找商品表商品名和商品价格
select pname,price from product;
3)去重查询
eg:去掉价格重复的商品
select distinct price from product;
注意:
4)别名查询
5)运算查询(+,-,*,/等)
eg:把价格+10查出商品
select pname,price+10 from product;
注意:
6)where条件查询
eg:查找商品id为1的商品信息
select *from product where pid = 1;
eg:查询价格大于3000的商品信息
select *from product where price>3000;
注意:
eg:查找价格在3000到8000之间的商品(3000<=price<=8000)
select *from product where price between 3000 and 8000;
eg:查找id在1,5,8,10这个集合的id
select *from product where pid in(1,5,8,10);
eg:查询pname以Ip开头的商品
select *from product where pname like 'Ip%';
注意:
eg:查询价格>3000并且数量>10的商品
select *from product where price>3000 and num>10;
7)排序查询
eg:根据商品价格查询商品信息
select *from product order by price;
应用场景:
8)聚合函数
eg:统计商品表里面商品的个数
select count(pid) from product;
eg:统计商品价格总和
select sum(price) from product;
eg:查询商品表的平均价格
select avg(price) from product;
eg:查找商品表里面价格最高的
select max(price) from product;
9)分组查询
eg:统计商品表中不同类别的个数
select cno,count(*) from product group by cno;
注意:
10)分组后筛选
having
eg:根据类别分组,查询商品的平均价格并且平均价格大于3000
select cno,avg(price) form product group by cno
注意:
11)查询语句出现的顺序
注意:
1.外键约束
2.多表的关系(*重点)
1)一对多
-在多的一方创建一个字段作为外键指向一的一方的主键
2)多对多
3)一对一(了解)
3.网上商城案例实体的抽取
1安装路径
安装文件存放路径:不能有中文和空格!
2.没有安装服务
(没有安装服务)安装服务:
管理员权限进入mysql的bin目录下:
mysqld.exe -install 安装服务:
如果有服务已经存在可以先移除
mysqld.exe -remove 移除服务
3.3306端口号被占用导致服务开启不了
已经安装服务,端口号被占用:
命令行输入:netstat -ano
找到对应端口的pid,去任务管理器去查找pid对应的软件。kill掉软件。
4.解决命令行乱码
如果在命令行里出现中文乱码,到my.ini配置文件里面修改和命令行一致的编码。
改完之后,重启服务。重新打开命令行
5.重置密码
方法一:
1.在my.ini的[mysqld]字段加入:
skip-grant-tables
2.重启mysql服务,这时的mysql不需要密码即可登录数据库
然后进入mysql
3.mysql>use mysql;
mysql>update user set password=password('新密码') WHERE User='root';
4.mysql>flush privileges;
运行之后最后去掉my.ini中的skip-grant-tables,重启mysqld即可。
方法二:
不使用修改my.ini重启服务的方法,通过非服务方式加skip-grant-tables运行mysql来修改mysql密码
1.停止mysql服务
2.打开命令行窗口,在bin目录下使用mysqld-nt.exe启动,即在命令行窗口执行: mysqld-nt --skip-grant-tables
3.然后另外打开一个命令行窗口,登录mysql,此时无需输入mysql密码即可进入。
4.按以上方法修改好密码后,关闭命令行运行mysql的那个窗口,此时即关闭了mysql,如果发现mysql仍在运行的话可以结束掉对应进程来关闭。
5.启动mysql服务
.多表关系
1)一对多
2)多对多
3)一对一
1.交叉查询(笛卡尔积)—基本不用
2.内连接查询
3.外链接
1)左外连接
2)右外连接
4.子查询(嵌套查询)
eg:查询分类名称是手机数码的商品
select *from product p where p.cno in(select cid from category where cname = '手机数码');
5.分页查询
应用场景:
两种:
一次加载完,全部返回(适合一条数据量很小)
pageBean{
List- list;//item的数据集合
int curPage;//当前的页数
int curCount;//每一个显示的数量
int count;//总个数
int sumPage;//总页数
}
eg:count = 12; curCount = 4;
if(count % curCount == 0){
sumPage = count/curCount;
}else{
sumPage = count/curCount+1;
}