文章目录
数据库概述:
-
什么是数据库
-
数据库的作用
- 储存数据,数据的仓库,带有访问权限限制不同人可以有不同的操作
-
为什么要学习数据库
-
网站前台交互所需的数据的存储、读取、修改、查询;用户注册、登录、账户(订单、余额等)
-
操作的都是后台数据,取到后台数据进行封装,然后交给前端去实现
-
常见的数据库:
mysql: 开源免费的适用于中小型企业的免费数据库,sun收购了mysql,sun公司被oracle收购,oracle收购后开始收费了
mariadb: 由mysql创始人搞出来的,直接是mysql开源版本的一个分析,基本上所有的命令都是一样的
oracle: 甲骨文公司,商业软件,收费软件,使用与大型电商网站,收购了sun,拥有了java,安卓用java开发但修改了虚拟机(java虽开源但不允许修改虚拟机,google修改优化了虚拟机,使其可以跑在手机上)
db2: IBM公司,thinkpad,解决方案:软件和硬件,服务器架构,银行系统大多采用是db2
sqlserver: windows里面,政府网站,asp.net,并且大学通常都是SQLserver. 图形化工具做的不错
sybase: 被淘汰的,
NOSQL非关系型数据库:key: value
mongodb:
redis: 最简单的,set get就可以设置获取数据,一般作为缓存,将数据直接存在内存中,可以去做持久 化,也可以不做持久化,运行效率高,但对机器的内存要求也比较高
关系型数据库:
主要是用来描述实体与实体之间关系
实实在在存在的事物:男生和女生 学生和班级 员工和部分
E-R关系图:要求必须得会画
实体:方框
属性:椭圆
关系:菱形
MYSQL数据库服务器
MYSQL数据库:数据库管理软件
服务器:就是一台电脑,安装了相关的服务器软件,这些软件会监听不同的端口号,根据用户访问的端口号提供不同的服务
MYSQL的安装和卸载
-
卸载:
打开控制面板,删除软件
删除安装目录下的所有文件:C:\Program Files\MySQL 删除mysql数据存放文件:隐藏文件夹 ProgramData
-
安装:
- 运行安装程序:再启动配置教程之前,一路下一步,没有下一步的话就直接finish
- 死一次finish之后启动服务器配置教程Wizard
- include myql bin directory to windows path
- 端口号不要修改,字符集要选择UTF8,密码不要忘记了
- 附录文档:重置Root密码.txt、MySQL安装图解.doc
MYSQL的 SQL语句
SQL: Structure Query Language 结构化查询语言
DDL:数据定义语言:定义数据库、数据表的结构;指令:create(创建) drop(删除) alter(修改)
DML:数据操纵语言:主要是用来操作数据 insert(插入) update(修改) delete(删除)
DCL:数据控制语言:定义访问权限,取消访问权限,安全设置 grant
DQL:数据查询语言:select(查询) from字句 where字句
数据库的CRUD的操作
CRUD是指在做计算处理时的增加(Create)、读取查询(Retrieve)、更新(Update)和删除(Delete)几个单词的首字母简写。主要被用在描述软件系统中DataBase或者持久层的基本操作功能。
CRUD说的就是增查改删
C:Create 增加对应CREATE TBL …; ADD TBL IN (…) VALUES (…)
R:Retrieve查询SELECT * from TBL
U:Update修改UPDATE TBL …SET …
D:Delete删除 DELETE FROM TBL WHERE …
- 首先要登录数据库服务器:mysql -uroot -p你的密码
创建数据库
create database 数据库的名字
create database day06;
create database 数据库的名字 character set 字符集;
create database day06_1 character set utf8;
create database 数据库的名字 character set 字符集 collate 校对规则;
create database day06_2 character set utf8 collate utf8_bin;
查看数据库
-- 查看数据库定义的语句
show create database 数据库的名字
show create database day06;
show create database day06_2;
-- 查看所有数据库
show databases;
注意不要删除一下项:
information_schema
performance_schema
mysql
修改数据库的操作
-- 修改数据的字符集
alter database 数据库的名字 character set 字符集;
alter database day06_1 character set gbk;
删除数据库
drop database 数据库的名字;
drop database day06_2;
其他数据库操作命令
-- 切换数据库(选中数据库)
use 数据库名字
use day06;
-- 查看一下当前正在使用的数据库(实际上是调用的函数)
select database();
表的CRUD操作
创建表
create database 数据库的名字
create table 表名(
列名 列的类型 约束,
列名2 列的类型 约束
);
-- 列的类型:
java sql
int int
char char
string varchar
char:固定长度
varchar:可变长度
char(3):1空格空格
varchar(3): 1
长度代表字符的个数,不代表字节大小。比如char(3)可以存3个utf8字符,占9个字节
double double
float float
boolean boolean
date date: YYYY-MM-DD
time: hh:mm:ss
datetime : YYYY-MM-DD hh:mm:ss 默认值是null
timestamp: YYYY-MM-DD hh:mm:ss 默认使用当前时间
text: 主要存放文本
blob : 存放的是二进制
-- 列的约束:
主键约束:primary key
唯一约束:unique
非空约束:not null
-- 创建表:
1. 分析实体:学生
2. 学生ID
3. 姓名
4. 性别
5. 年龄
create table student(
sid int primary key,
sname varchar(10),
sex int,
age int
);
查看表
-- 查看表
show tables;
-- 查看表的定义
show create table student;
-- 查看表的结构
desc student;
修改表
添加列(add),修改列(modify),修改列名(change),删除列(drop),修改表名(rename),修改表的字符集
-- 添加列(add)
alter table 表名 add 列名 列的类型 列的约束;
alter table student add chengji int not null;
-- 修改列(modify)
alter table 表名 modify 列名 列的类型;
alter table student modify sex varchar(2);
-- 修改列名(change)
alter table 表名 change 原列名 新列名 列的类型;
alter table student change sex gender varchar(2);
-- 删除列(drop)
alter table 表名 drop 列名;
alter table student drop chengji;
-- 修改表名(rename),一般不要改动,不然用到表名的其他代码也要修改
alter table 原表名 to 新表名;
rename table student to heima;
-- 修改表的字符集,一般不要改动
alter table 原表名 character set 字符集;
alter table heima character set gbk;
删除表
drop table heima;
Sql完成对表中数据的CRUD的操作
插入数据(DML语言)
insert into 表名(列名1,列名2,列名3) values(值1,值2,值3);
insert into heima(sid,sname,gender,age,chengji) values(1,'zhangsan','b',23,100);
-- 简单写法,如果插入的是全列名的数据,表名后面的列名可以省略
insert into 表名 values(值1,值2,值3);
insert into heima values(1,'zhangsan','b',23,100); --由于sid为主键约束,所以不sid不能有重复的
insert into heima values(2,'zhangsan','b',23,100);
-- 如果插入的部分列的话,列名不能省略
insert into heima(sid,sname,chengji) values(3,'lisi',99);
insert into values(3,'lisi',99);-- 这种写法是错误的
-- 批量插入
insert into heima values
(4,'wangwu','b',23,100),
(5,'zhaoliu','b',23,100),
(6,'sunqi','b',23,100),
(7,'guoba','b',23,100);
-- 单条插入和批量插入的效率
-- 查看表中的数据
select * from heima;
删除数据
delete from 表名 [where 条件]
delete from student where sid=10;
delete from student; 如果没有指定条件 会将表中数据一条一条全部删除掉
-- 面试问题:请说一下 delete删除数据和 truncate删除数据有什么差别
delete: DML 一条一条删除表中的数据
truncate: DDL先删除表再重建表
关于哪条执行效率较高:具体要查看表中的数据量
如果数据比较少,delete比较高效
如果数据比较多,truncate比较高效
更新表记录
update 表名 set 列名=列的值,列名2=列的值2 [where 条件]
-- 将sid为5的名字改成李四
-- 如果参数是字符串,要加上单引号
update heima set sname='lisi' where sid=5;
-- 如果where的条件判断为sid=0,则会将表中所有数据更新
update heima set sname='lisi' where sid=0;
查询记录
创建要使用的表
select [distinct][*][列名,列名2] from 表名 [where 条件]
distinct:去除重复的数据
-- 商品分类:手机数码,鞋靴箱包
1.分类的ID
2.分类名称
3.分类描述
create table category(
cid int primary key auto_increment,
cname varchar(10),
cdesc varchar(31)
);
insert into category values(null, '手机数码', '电子产品');
insert into category values(null, '鞋靴箱包', '江南皮革厂,倾情打造');
insert into category values(null, '香烟酒水', '哈哈哈');
insert into category values(null, '酸奶饼干', '哈哈哈');
insert into category values(null, '馋嘴零食', '哈哈哈');
select * from category;
select cname,cdesc from category;
-- 所有商品
1.商品ID
2.商品名称
3.商品价格
4.生产日期
5.有效期
6.商品分类ID
商品和商品分类:所属关系
create table product(
pid int primary key auto_increment,
pname varchar(10),
pprice double,
pdate timestamp,
pdate_end timestamp,
cno int
);
insert into product values(null,'小米mix4',998,null,null,1);
insert into product values(null,'锤子',2888,null,null,1);
insert into product values(null,'阿迪王',99,null,null,2);
insert into product values(null,'茅台',998,null,null,3);
insert into product values(null,'奥利奥',8,null,null,4);
insert into product values(null,'辣条',3,null,null,5);
简单查询
-- 简单查询:
-- -查询所有商品:
select * from product;
-- -查询商品名称和商品价格:
select pname,pprice from product;
-- -别名查询. as 的关键字, as 关键字可以省略
--表别名:select p.pname,p.pprice from product as p;(主要用在多表查询);
--列别名:select pname as 商品名称,pprice as 商品价格 from product;
省略as关键字
select pname 商品名称,pprice 商品价格 from product;
-- -去掉重复的值
-- 查询商品所有的价格
select pname from product;
select distinct pname from product;
-- select运算查询,并没有修改数据库,仅仅在查询结果上做了运算
select *,pprice*1.5 from product; 多了一列price*1.5
select *,pprice*1.5 as 折后价 from product; 给列price*1.5一个别名
select *,pprice*0.8 as 打8折后价 from product;
条件查询
-- 条件查询 [where关键字]
指定条件,确定要操作的记录
-- 查询商品的价格>60的所有商品信息
select * from product where pprice > 60;
-- -where 后的条件写法
-- 关系运算符 > >= < <= = != <>
<> : 不等于:标准SQL语法
!= :不等于:非标准SQL语法
-- 查询商品价格不等于88的所有商品
select * from product where pprice <> 88;
-- 查询商品价格在10到100之间
select * from product where price > 10 and price < 100;
between...and...
select * from product where price between 10 and 100;
-- 逻辑运算:and,or, not
-- like:模糊查询
_ :代表的是一个字符
% :代表的是多个字符
-- 查询出名字中带有饼的所有商品 '%饼%'
select * from product where pname like '%饼%'
-- 查询第二名字是熊的所有商品 '_熊%'
select * from product where pname like '_熊%'
-- in 在某个范围内获得值
-- 查询出商品分类ID在1,4,5里面的所有商品
select * from product where cno in (1,4,5)
排序查询
-- 排序查询:order by 关键字
asc:ascend 升序(默认的排序方式)
desc:descend 降序
-- 0.查询所有商品,按照价格进行排序
select * from product order by pprice;
-- 1.查询所有的商品,按价格进行降序排序(asc-升序 desc-降序)
select * from product order by pprice desc;
-- 2.查询名称有 小 的商品,按价格降序排序
1.查询名称有小的商品
select * from product where pname like '%小%';
select * from product where pname like '%小%' order by price asc;
聚合函数
-- 聚合函数:
sum() : 求和
avg():求平均值
count():统计数量
max():最大值
min():最小值
-- 1.获得所有商品价格的总和
select sum(price) from product;
-- 2.获取所有商品的平均价格:
select avg(price) from product;
-- 3.获取所有商品的个数:
select count(*) from product;
-- 注意:where后面不能接聚合函数
select * from product where price > avg(price);
-- 查出商品价格大于平均价格的所有商品
查出所有商品
select * from product;
大于
平均价格
select avg(pprice) from product;
-- 字查询
select * from product where pprice > (select avg(pprice) from product);
分组 group by
-- 分组:group by
-- 1. 根据cno字段分组,分组后统计商品的个数
select cno,count(*) from product group by cno;
-- 2.根据cno分组,分组后统计每组商品的平均价格 并且商品平均价格 > 60
select cno,avg(pprice)
from product group by cno
having avg(pprice)>80;
-- having关键字 可以接聚合函数 出现在分组之后!!!
-- where关键字 不可以接觉和函数,出现在分组之前!!!
关键字的编写顺序、执行顺序
-- 编写顺序
-- S..F..W..G..H..O
select .. from .. where .. group by .. having .. order by
-- 执行顺序
F..W..G..H..S..O
from .. where .. group by .. having .. select .. order by
-- from 只有得到表,才能进行后续工作
-- where 进行条件判断,之后还是一张表
-- group by 对其进行分组
-- having 条件筛选
-- select 控制显示
-- order by显示的结果进行一下排序