前言介绍
数据库: 一个有序集合,它存储了结构化数据,并可以通过各种数据模型(如关系模型、面向对象模型等)进行组织和访问,主要负责数据的存储、检索和管理,
数据库系统:由数据库、数据库管理系统、应用程序、硬件平台和操作系统等组成的综合系统;提供了更为全面的功能,包括数据的定义、操纵、控制和通信等;
数据库管理系统:是一种软件,它用于定义、建立、维护和管理大量数据库。
三者之间的联系:数据库是最基本的元素,用于存储和管理数据;数据库系统是一个更广泛的概念,包括了与数据库相关的整个系统;数据库管理系统是用于管理和维护数据库的工具和软件。
1、数据库的分类
1.1、关系型数据库(二维表的方式存储):Oracle、DB2 、MySQL 、PostgreSQL、SQL Server等
1.2、非关系数据库:Redis 、MongoDB、HBASE、Graph
2、数据库的类型
类型 | 描述 | 大小 |
tinyint | 十分小的数据 | 1个字节 |
smallint | 较小的数据 | 2个字节 |
mediumint | 中等大小的数据 | 3个字节 |
int | 整数 | 4个字节 |
bigint | 较大的数据 | 8个字节 |
float | 浮点数 | 4个字节 |
double | 浮点数 | 8个字节 |
decimal | 精确小数 如 decimal(5,2)表示共5位数,小数占2位 | |
char | 字符串固定大小 | 0~255 |
varchar | 可变字符串 | 0~65535 |
date | 日期格式 | YYYY-MM-DD |
time | 时间格式 | HH:mm:ss |
datetime | 最常用的时间格式 | YYYY-MM-DD HH:mm:ss |
timestamp | 时间戳,1970.1.1到现在的毫秒数 | |
year | 表示年份 |
3、数据库的约束
3.1、主键(primary key):能唯一标识表中的每一条记录的属性值
主键约束基本语法: 字段名 数据类型 primary key;
3. 2、非空(not null)
字段名 数据类型 NOT NULL;
3.3、唯一(unique)
字段名 数据类型 UNIQUE;
3. 4、默认值(default)
字段名 数据类型 DEFAULT 默认值;
3. 5、外键(foreign key):一个表中的一个字段引用另一个字段的主键
-- 在创建数据表时语法如下:
CONSTRAINT 外键名 FOREIGN KEY (从表外键字段) REFERENCES 主表 (主键字段)
-- 将创建数据表创号后语法如下:
ALTER TABLE 从表名 ADD CONSTRAINT 外键名 FOREIGN KEY (从表外键字段) REFERENCES 主表 (主键字段);
-- 删除外键
alter table 从表名 drop foreign key 外键名;
4、SQL语言分类
4.1、数据定义语言(DDL):用来定义数据库的对象,如数据表、视图、索引等。
操作数据库 | |
创建数据库 | create database 数据库名称; |
删除数据库 | drop database 数据库名; |
查看数据库 | show databases; |
切换数据库 | use 数据库名; |
查看当前使用的数据库 | select database(); |
将数据库的字符集修改为gbk | alter database 数据库名 character set gbk; |
操作表 | |
创建表 | create table 表名( 字段1 字段类型, 字段2 字段类型, … 字段n 字段类型 ); |
查看表结构 | desc 表名 或 describe 表名 |
查看表的基本信息 | show create table 表名 |
复制表结构 | create table 新表名 like 旧表名 |
查看当前数据库中所有表 | show tables; |
修改表名 | alter table 旧数据表名 rename to 新数据表名; |
修改字段名 | alter table 数据表名 change 旧字段名 新字段名 类型名; |
修改字段数据类型 | alter table 数据表名 modify 字段名 数据类型; |
增加字段 | alter table 数据表名 add 新增字段名 类型名; |
删除字段 | alter table 数据表名 drop 字段名; |
删除数据表 | drop table 表名; |
4.2、数据操纵语言(DML):用来在数据库表中更新,增加和删除记录。
在表中增加数据 | |
向数据表中全部字段添加数据 | insert into 表名 values(值1,值2,值3); |
向数据表中部分字段添加数据 | insert into 表名(字段, 字段, 字段...) values(值1,值2,值3); |
修改表中数据 | |
修改表中的某一字段全部的记录 | update 表名 set 字段 = 值; |
修改表中符合条件的记录 | update 表名 set 字段 = 值 where 条件; |
删除表中数据 | |
删除表中全部的记录 | delete from 数据表名; |
删除表中符合条件的记录 | delete from 数据表名 where 条件; |
4.3、事务控制语言(TCL):用来做数据库中的事务管理。
4.4、数据控制语言(DCL):用来控制数据库的用户权限。
4.5、数据查询语言(DQL):用来查询数据库中的数据。
4.5.1、单表查询
查询表中全部数据 | select * from 表名; |
查询指定列名 | select 字段1,字段2 from 表名; |
别名查询 | select字段1 as 别名,字段2 as 别名 from 表名 as 表别名; |
去除重复值 | select distinct 字段1,字段2 from 表名; |
查询结果参与计算 | select 字段 + 固定值 from 表名 select 字段1+字段2 from 表名; |
4.5.2、条件查询
条件 | 作用 |
---|---|
> | 大于 |
< | 小于 |
<> | 不等于 |
!= | 不等于 |
= | 等于 |
<= | 小于等于 |
>= | 大于等于 |
or | 或 |
and | 而且 |
is null | 内容为空 |
is not null | 内容不为空 |
like | 模糊查询 |
in | 判断某个字段是否存在给定的元组中 |
between...and... | 判断范围 |
limit | 限制查询结果数量 |
4.5.3、排序查询 order by
celect 字段名 from 表名 [where 条件] order by 字段名 [asc | desc]
4.5.4、分组查询 group by
select 字段1,字段2...from 表名 group by 分组字段 [having字段]
-- where和having的对比
1.having是在分组后对数据进行过滤,where是在分组前对数据进行过滤
2.having语句中可以使用聚合函数,where后面不可以使用聚合函数
4.5.5、聚合函数
函数 | 作用 |
---|---|
sum() | 计算指定列的数值和,如果指定列类型不是数值类型则计算结果为0 |
avg() | 计算指定列的平均值,如果指定列类型不是数值类型则计算结果为0 |
max() | 计算指定列的最大值,如果指定列是字符串类型则使用字符串排序运算 |
min() | 计算指定列的最小值,如果指定列是字符串类型则使用字符串排序运算 |
count() | 统计表中数据的行数或者统计指定列其值不为NULL的数据个数 |
4.5.6、多表内外连接查询
隐式内连接:
select 字段名 from 表1,表2 where 条件显式内连接:
select * from 表1 inner join 表2 on 条件左外连接:左表数据全部显示,右表按照连接条件显示有关联的数据
select * from 左表 left outer join 右表 on 条件右外连接:
select * from 右表 right outer join 左表 on 条件MySQL不支持全外连接
自连接:左表右表都是同一张表
4.5.7、子查询
语法:select 字段,... from 表名 where 字段 运算符 (子查询)
单行子查询:(子查询的结果返回一行一列,要是用单行运算符)
= > >= < <= !=
多行运算符:(子查询的结果返回多行一列,要是用多行运算符)
in、any、all
子查询用在from后,当做表(通常子查询查回多列)这种子查询必须起别名
多列子查询:
子查询结果是多列的,肯定在from后面当做表来使用
select 查询字段 from(子查询) 表别名 where 条件