注 :该文章主要是总结的学习内容,感兴趣可以去看原视频28-复习_哔哩哔哩_bilibili
一、数据库相关概念
1、数据库:存储数据的仓库
存储方式:文件(一个表对应三个不同的文件)
2、数据库管理系统:用来管理数据库的软件(MySQL、oracle、db2、Sybase 、redis、MongoDB、HBASE、mecache、solidDB、sqlite、H2 database)
3、数据:数字、图片、视频、文件等等
二、数据库发展历史
文件型数据---》关系型数据库---》关系-对象型数据库
我们现在用的数据库通常是关系型数据库,方便软件的设计和实现,那什么是关系型数据库呢?
关系型数据库的概念
关系:一张符合特定要求的二维表(二维就是行和列)
行:记录、实体
列:字段、属性
关系型数据库:由二维表构成的数据库
关系之间的关系:表与表之间的关系(一对一、一对多、多对多)
数据库语言:数据库结构化语言
DDL:数据定义语言
DML:数据操作语言
DQL:数据查询语言
DCL:数据控制语言
三、连接数据库服务器
通过命令行链接数据库服务器
mysql -u root -p # root是用户名 根据实际情况改写
常用的参数:
-u:用户名
-p:输入密码
-h:跟IP地址
-p:跟默认端口号,默认3306
还有一种方式就是通过客户端navicat来连数据库服务器

四、常用语句
1、create命令
1、创建数据库
create database if not exists <dbname> character set utf8;
2、删除数据库
drop datadase <dbname>;
2、创建表
1、语法
create table <tbname>(
字段 数据类型(长度) 约束类型,
....... ,
字段 数据类型(长度) 约束类型
) engine-innodb
2、数据类型
1、数字类型: 整数 (tinyint、int、bigint)、小数 (float 7位小数 4字节、double 15位 8、decimal 30位 17)、定义方法 (age int(3))
2、字符串类型:char(n) (0-255) 、varchar(n) (0-65535) 、text(n) (0-65535)、binary(n) (0-n)

3、日期
year(yyyy)
data(yyyy-mm-dd)
time(HH:MM:SS)
timestamp(yyyy-mm-dd HH:MM:SS)
datatime(yyyy-mm-dd HH:MM:SS)
4、二进制(现在用的较少)
3、约束类型
约束:为保证数据库中的数据的完整性、准确性设定的一些限制规则
1、主键约束: 数据表中的一个或者多个字段组合,用来唯一 标识一行记录,同时可以排序来提高查询的效率primary key

在指定的字段后加上primary key
复合主键
忘记加主键,后假如主键
2、非空约束:指定的字段的数据不能为空 not null
3、默认值约束: default 可以给字段设置默认值,如果没有给字段赋值,就会自动使用默认值
4、自增长: 被约束字段在数据记录增加时候其值会自动递增,一般是搭配主键一起使用,并且一个表只能使用一个 auto_increment
5、检查约束:Mysql不支持检查约束,enum('v1', 'v2' ,...) 、set('v1', 'v2' ,...)
6、唯一约束: 被唯一约束字段,它的值不可重复,unique,(unique 不能和默认值一起使用)
7、外键约束
外键 :外键就是字段,是从表和主表之间建立关系的字段,foreign key references
例如下图 从表3绿色 的字段就是引用的主表 表1 表2黄色字段
主表:拥有主键的表,字段别其他的表引用的表就是主表
从表:引用其他表的主键字段的表就是被引用的表的从表
语法规则:
DML数据操作语言
**1、insert:**把数据插入到数据表中
语法 insert into <tbname>(字段列表) values(值列表) # 完整语法
insert into <tbnname> values(值列表) #简洁写法
insert into <tabname>(字段列表) values(值列表),(值列表),..... #批量插入数据
**2、update:**对数据表中的数据进行变更
语法:
update <tbname> set 字段名=值,字段名=值,......where 条件表达式
**注:**如果缺少where ,就会把整个表的字段值改为同一个

**3、delete:**删除表中的数据记录
语法:
delate from <tbname> where 条件表达式
DCl数据控制语言
**1、grant:**获取权限
grant <权限列表> 数据库.对象 to '用户名'@'允许登录的地址' identified by '密码'
注:要用flush 来刷新权限
**2、revoke:**解除权限
revoke <权限列表> 数据库.对象 to '用户名'@'允许登录的地址'
三大范式
1、范式:normal format设计数据表的标准格式,设计数据库必须要按照这个标准来设计执行
2数据库范式
1、目前有6个范式,目前用的最多的只有3个
第一范式:
- 表中的字段不可拆分
第二范式:
- 表中每一行必须唯一(避免重复数据,数据冗余),非主键必须完全依赖主键()
- 建表必须建主键,尽量用一个主键
第三范式:
- 每列都和主键直接相关,而不是间接相关
DQL数据库语言
1、select :筛选数据
1 语法
select 字段名,字段名,...from 表名where 子句group by 分组字段order by 子句 limit分页条件
- 最简单的查询:
* :代表返回表中的所有的字段
- 有条件的查询:用where来限制范围
2、 order by排序
3、模糊查询 where like
4、查重 distinct
select distinct 字段列表 from tablenamewhere 子句
5、聚合函数:sum()、 count()、avg()、max()、min()
6、分组查询
7、having的用法
having和where的区别:
8、连接查询:涉及到多个表的时候就需要连接查询
连接查询 有内连接和外连接(左外连接、右外连接),
外连接:
内连接:只有两个表都匹配上的才显示
9、子查询:嵌入到其他 sql语句中的查询语句,通常作为数据源 、用来存放数据或者用来查询条件语句中的数据
**10、组合查询:**将多个查询的返回结果进行组合显示

























