> 文章列表 > 数据库学习总结(MySQL)

数据库学习总结(MySQL)

数据库学习总结(MySQL)

一.为什么要使用数据库?

在我们平时存储数据的时候,往往采用文件存储即可,所以,为什么要使用数据库呢?

原因在于,文件存储数据有以下缺点:

  • 文件的安全性问题
  • 文件不利于数据查询和管理
  • 文件不利于存储海量数据
  • 文件在程序中控制不方便

为了解决上述问题,我们创造了更适合存储数据的软件——数据库.它的存储介质是磁盘内存,能更有效的管理数据。

数据库可以提供远程服务,即通过远程连接来使用数据库,因此也称为数据库服务器.

二.数据库

1.数据库的分类

数据库可以分为关系数据库和非关系数据库

关系数据库:

关系型数据库指的是使用关系模型(二维表格模型)来组织数据的数据库。 

常见关系型数据库管理系统(ORDBMS):

  1. Oracle
  2. MySql
  3. Microsoft SQL Server
  4. SQLite
  5. PostgreSQL
  6. IBM DB2

非关系数据库 :

非关系型数据库又被称为 NoSQL(Not Only SQL ),意为不仅仅是 SQL。通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定,常用于存储非结构化的数据。

常见的NOSQL数据库:

  1. 键值数据库:Redis、Memcached、Riak
  2. 列族数据库:Bigtable、HBase、Cassandra
  3. 文档数据库:MongoDB、CouchDB、MarkLogic
  4. 图形数据库:Neo4j、InfoGrid
关系数据库和非关系数据库的区别
关系数据库 非关系数据库
使用SQL 一般不使用
事务支持 支持 不支持
复杂操作 支持 不支持
海量读写操作 效率低 效率高
基本结构 基于表和列,结构稳定 灵活性比较高
使用场景 业务方面的OLTP系统 用于数据的缓存或基于统计分析的OLAP系统

 2.数据库的操作

2.1数据库的操作

2.1.1显示当前数据库

show databases;

2.1.2创建数据库

create database 数据库名;

2.1.3使用数据库

use 数据库名;

2.1.4删除数据库

drop 数据库名;

2.2常见数据类型

2.2.1数值类型

分为整型和浮点型(只列举较常用类型)

数据类型 大小 对应Java类型
BIT[ (M) ]
M 指定位数,默认 为1
常用 Boolean 对应 BIT ,此时
默认是 1 位,即只能存 0 和1
INT 4字节
Integer
DECIMAL(M, D)
M/D 最大值+2
BigDecimal

2.2.2字符串类型

数据类型 大小 对应Java类型
VARCHAR (SIZE)
0-65,535 字节
String
TEXT 0-65,535字节 String

2.2.3日期类型

数据类型 大小 说明 对应Java类型
DATATIME 8字节
范围从 1000 9999 年,不会进行时区的检索及转换
java.util.Date
java.sql.Timestamp
TIMESTAMP 4字节
范围从 1970 2038 年,自动检索当前时区并进行转换。
java.util.Date
java.sql.Timestamp

2.3表的操作

需要操作数据库中的表的时候,需要先使用该数据库

use 数据库名;

2.3.1查看表的结构

desc 表名;

2.3.2创建表

CREATE TABLE table_name (field1 datatype,field2 datatype,field3 datatype
);

2.3.3删除表

drop table 表名;

2.3.4新增

insert into 表名 values(值,值...);
insert into 表名(列名,列名...) values(值,值...),(值,值...)...;

2.3.5查询

1.指定列查询
select * from 表名;
2.指定列查询
select 列名,列名...from 表名;
3.表达式查询
select 列名+表达式 from 表名;
4.指定别名查询
select 列名+列名+... as 别名 from 表名;
5.去重查询
select distinct 列名 from 表名;
6.查询结果排序
select 列名,列名... from 表名 order by 列名1,order by 列名2...;
  6.1降序排序
     select 列名,列名... from 表名 order by 列名 desc;
  6.2升序排序
     select 列名,列名... from 表名 order by 列名 asc;

7.条件查询:where

比较运算符:

运算符 说明
>,>=,<,<= 大于,大于等于,小于,小于等于
=
等于, NULL 不安全,例如 NULL = NULL 的结果是 NULL
<=> 等于,NULL 安全,例如 NULL <=> NULL 的结果是 TRUE(1)
!=,<> 不等于
BETWEEN a0 AND a1
范围匹配, [a0, a1] ,如果 a0 <= value <= a1 ,返回 TRUE(1)
IN(option,...)
如果是 option 中的任意一个,返回 TRUE(1)
IS NULL
是 NULL
IS NOT NULL
不是 NULL
LIKE
模糊匹配。% 表示任意多个(包括 0 个)任意字符; _ 表示任意一个字符

逻辑运算符:

运算符 说明
AND
多个条件必须都为 TRUE(1) ,结果才是 TRUE(1)
OR
任意一个条件为 TRUE(1), 结果为 TRUE(1)
NOT
条件为 TRUE(1) ,结果为 FALSE(0)
1. WHERE 条件可以使用表达式,但不能使用别名。
2. AND 的优先级高于 OR ,在同时使用时,需要使用小括号 () 包裹优先执行的部分

8.分页查询:LIMIT

limit用来限制每次查询的结果是几个

 用offset可以指定从哪里开始查询

 2.3.6修改(update)

update 表名 set 列名=值,列名=值...where 条件;

2.3.7删除(delete)

delete from 表名;
delete from 表名 where 条件;

2.4数据库约束下的增删改查

例:建立student和class两个表

2.4.1not null

creat table student(id int not null,name varchar(20) not null);

2.4.2unique

create table student (id int unique,name varchar(20));

2.4.3default

create table student (id int unique,name varchar(20) default '无名氏');

2.4.4primary key

主键,身份标识,唯一且不为空,相当于unique 和not null 的综合

一个表里只能有一个主键,用一个列做主键,复合主键不常见

create table student (id int primary key,name varchar(20));

自增主键:

create table student (id int primary key auto_increment ,name varchar(20));

2.4.5foreign key 外键

创建了两张表

create table class(classId int primary key auto_increment,classNam e varchar(20));
create table student(studentId int primary key auto_increment,name varchar(20), classId int,foreign key(classId) references class(classId));

此时就要求student表中每个记录的classId得在class表中的classId存在

2.4.6聚合查询

查询过程中,表的行和行进行一定的运算

1.count 函数

2.sum求和

只针对数字列有效,字符串列无效

3.avg计算平均值

 计算总平均值

 4.max/min

2.4.7分组聚合

这些聚合函数,默认都是针对这个表里所有的类进行了聚合,有时候,还需要分组聚合,也就是,按照指定的字段,把记录分成若干组,每一组分别使用聚合函数.

1.group by

按照职位进行分组,查询平均工资

 分组的时候,还可以指定条件筛选,先搞清楚是分组前还是分组后

(1).分组前,筛选,使用where条件

求每个岗位的平均工资,但是刨除孙悟空

 (2).分组后,筛选,使用having条件

求每个岗位的平均工资,但是刨除老板

 (3).还可以同时使用

2.4.8联合查询/多表查询

笛卡尔积:把表进行排列组合

去掉笛卡尔积组成的表的多余项,就是多表查询 

 上述联合查询,其实都是内连接(inner join).MySQL还有一种联合查询,叫做外连接

 2.5索引

索引 index,即目录

2.5.1查看索引

show index from 表名

 2.5.2创建索引

create index 索引名 on 表名(列名);

 把表中的内容,根据name,又搞了一份目录出来

如果表中已经有很多的数据了,就不要再创建索引了

2.5.3删除索引

drop index 索引名 on 表名