数据库基础
数据库的介绍
1. 什么是数据库
-
数据存储的技术有:
- List、Map存储:不能持久化存储
- 文件存储:存储的格式不统一,读取不方便,操作麻烦
-
数据库:存储数据的仓库,本质是一个文件系统。可以结构化的存储数据,方便的进行数据的增、删、改、查。
-
常见的数据库
-
SQLServer:Microsoft公司的收费的、中型数据库软件。.net c#
-
Oracle:Oracle公司的收费的、高性能的、大型数据库软件。Java里应用比较多
-
MySql:Oracle公司的免费的、小型数据库软件。被Oracle收购之后,6.x版本开始收费。
-
DB2:IBM公司的收费的、稳定的、大型数据库软件。银行、金融等行业
-
Sybase:已经很少使用了,但是它提供了一个专业的数据库建模工具:PowerDesigner
2.SQL语句介绍
1. MySql的数据库结构
2. 什么是SQL
什么是SQL
- SQL:Structure Query Language(结构化查询语言),通过sql操作数据库(操作数据库,操作表,
操作数据) - SQL被美国国家标准局(ANSI)确定为关系型数据库语言的美国标准,后来被国际化标准组织
(ISO)采纳为关系数据库语言的国际标准 - SQL规范:各数据库厂商(MySql,oracle,sql server)都支持ISO的SQL标准。
- SQL方言:各数据库厂商在标准的基础上做了自己的扩展。 各个数据库自己特定的语法
SQL分类
- DDL:DataBase Definition Language,数据定义语言。用来定义数据库结构,比如:库、表等等
- DML:DataBase Manipulation Lanaguage,数据操作语言。用来增、删、改数据的
- DQL:DataBase Query Lanaguage,数据查询语言。用来查询数据的
- DCL:DataBase Controll Lanaguage,数据控制语言。DBA使用的,进行权限管理
- DBA:DataBase Aministrator,数据库管理员
3.SQL操作MySql【重点】
1 DDL语句
1.1 DDL操作库database
语法
- 创建库:
create database [if not exists] 库名称 [character set 字符集]
- 查询所有库:
show databases
- 查看一个库的创建信息:
show create database 库名称
- 修改库:
alter database 库名称 [default] character set 字符集
- 切换库/使用库:
use 库名称
- 查看现在在哪个库里:
select database()
- 删除库:
drop database 库名称
1.2 DDL操作表table
MySql的数据类型
数据类型 | 说明 | 对应Java类型 |
---|---|---|
int | 整数类型,占4字节 | int, Integer |
double(m,n) | 小数类型,占8字节。总长度m,小数长度n。double(5,2) | double, Double |
varchar(n) | 可变长度字符串。varchar(10),存储"ab",占2个字符 | String |
char(n) | 固定长度字符串。char(10),存储"ab",占10个字符 | String |
date | 日期类型。格式:yyyy-MM-dd | Date |
datetime | 日期时间类型。格式:yyyy-MM-dd HH:mm:ss | java.sql.Timestamp,Date |
语法
- 创建表:
create table 表名称(字段名 类型 [约束], 字段名 类型 [约束], ...)
- 查看所有表:
show tables
- 查看表结构:
desc 表名称
- 查看表创建信息:
show create table 表名称
- 修改表:
- 重命名表:
rename table 原名称 to 新名称
- 添加字段:
alter table 表名称 add 字段名 类型
- 修改字段类型:
alter table 表名称 modify 字段名 新类型
- 修改字段名称:
alter table 表名称 change 原字段名 新字段名 类型
- 删除字段:
alter table drop 字段名
- 删除表:
drop table 表名称
2 DML语句【重点】
- DML的操作包含:
- 插入数据/记录
- 修改数据/记录
- 删除数据/记录
语法
-
插入数据:MySql可以以字符串形式插入一切类型的数据
-
插入所有字段:
insert into 表名称 values (值1, 值2, ...)
-
插入指定字段:
insert into 表名称 (字段名1, 字段名2, ..., 字段名n) values (值1, 值2, ..., 值n)
-
-
修改数据
update 表名称 set 字段名1=值1, 字段名2=值2,..., 字段名n=值n [where 条件]
-
删除数据
- 删除符合条件的数据:
delete from 表名称 [where 条件]
- 摧毁重建表:
truncate table 表名称
- 删除符合条件的数据:
3 DQL语句【重点】
3.1 简单查询
语法
-
基本语法:
select [distinct] 字段1,字段2..|* from 表名称
-
查询并处理Null值:
ifnull(字段, 默认值)
-
查询并进行运算:
+,-,*,/
-
查询并起别名:
字段名 [as] 别名
-
去重查询:
distinct
-
distinct后边所有的字段值都一样,才是重复值,是要去掉的。
-
-
注意:查询操作,不会对表里的数据有任何的影响
* -- 给user表增字段salary double
alter table user add salary double;
-- 给user表增加字段dept varchar(32)
alter table user add dept varchar(32);
-- 1. 查询user表里所有字段的值
select * from user;
-- 2. 查询user表里所有用户的姓名
select id,name from user;
-- 3. 查询user表里每个用户的姓名和工资。如果工资为null,按0处理
select name, ifnull(salary, 0) from user;
-- 4. 查询user表里每个用户的姓名和 总收入:工资+奖金5000
select name, ifnull(salary,0) + 5000 from user;
-- 5. 查询user表里每个用户的姓名和 总收入(字段显示成“总收入”)
select name as '姓名', ifnull(salary,0) + 5000 '总收入' from user;
-- 6. 去重查询user表里每个用户所属的部门
select distinct dept from user;
3.2 条件查询
语法
- 单条件的:
- 条件判断:
>, <, >=, <=, =, <>
- 判空:
is null
is not null
- 模糊查询:
like '张%'
,like '张_'
not like '张%'
,not like '张_'
- 范围查询:
between 开始值 and 结束值
,in(值1, 值2,.., 值n)
- 条件判断:
- 多条件的:
and
:并且,所有条件都必须符合or
:或者,任意条件满足即可not
:非,排除结果不要
3.3 排序查询
语法
order by 排序字段 排序规则, 排序字段2 排序规则2, ...
- 排序规则有:
ASC
:升序,从小到大,默认的DESC
:降序,从大到小
-- 1. 排序查询:order by 排序字段 排序规则
select * from user order by age asc;
-- 2. 排序查询:按照年龄从小到大排序,如果年龄相同,就按照工资从高到低排序
select * from user order by age asc, salary desc;
3.4 聚合函数
语法
- 聚合函数:用于进行列数据统计的。常用的聚合函数有:
count(字段)
:统计数量sum(字段)
:求和avg(字段)
:求平均值max(字段)
:求最大值min(字段)
:求最小值
- 注意:所有聚合函数会忽略null值
-- . 聚合函数
-- 1 查询学生表里的数量
select count(*) from students;
-- 2 查询所有学生的年龄总和
select sum(age) from students;
-- 3 查询所有学生的平均年龄
select avg(age) from students;
-- 4 查询最大年龄
select max(age) from students;
-- 5 查询最小年龄
select min(age) from students;
3.5 分组查询
语法
- 语法:
group by 分组字段 [having 分组后的过滤条件]
- 注意:select后边,只能跟分组的字段,或者聚合函数。不能查询与分组无关的字段
- 分组查询的顺序:
- 使用where对原始表进行过滤
- 根据分组字段进行分组统计,得到分组后的结果
- 使用having对分组后的结果进行过滤
3.6 分页查询
语法
- 语法:
limit 起始索引,查询数量
select * from 表名称 limit 起始索引, 查询数量
-- 分页查询 limit 起始索引, 查询数量。 起始索引 = 每页几条 * (页码-1)
-- 查询用户,每页3条,要查询第一页
select * from user limit 0, 3;
-- 查询用户,每页3条,要查询第二页
select * from user limit 3, 3;
-- 查询用户,每页3条,要查询第三页
select * from user limit 6, 3;
3.7 综合查询
- select 字段|聚合 from 表名称 where 条件 group by 分组字段 having 分组后过滤 order by 排序字段 排序规则 limit 起始索引,查询数量
- 分组统计每个地方的男生数量,只要数量大于等于1的。查询结果按照数量升序显示。 每页2条,显示第1页
select address, count(*) from students where sex = '男' group by address having count(*) >= 1 order by count(*) asc limit 0,2;
4、MySql约束
1. 主键约束
-
主键:一张表里数据的唯一标识。原则上:每张表必须有主键,且只能有一个主键
-
主键约束:
- 作用:被主键约束的字段,值必须是非空、唯一
- 语法:
primary key [auto_increment]
- 如果主键字段是整数,可以增加
auto_increment
,MySql会自动生成主键值:1,2,3, ... +1
- 如果不是数字,不要增加
auto_increment
- 如果主键字段是整数,可以增加
2. 唯一性约束
- 作用:唯一性约束的字段,值不能重复,但是可以为null
- 语法:
字段名 类型 unique
3. 非空约束
- 作用:非空约束的字段,值不能为null
- 语法:
字段名 类型 not null
4. 默认值约束
- 作用:默认值约束的字段,如果不指定值,取默认值(如果指定null值,值就是null,不取默认值)
- 语法:
字段名 类型 default 默认值