目 录
序 言 数据的存储方式
存储方式
优 点
缺 点
第一章 数据库相关概念
第二章 数据库介绍与安装
第三章 SQL-定义语言DDL
第四章 SQL-数据操作语言DML
第五章 SQL-数据查询语言DQL
第六章 数据完整性
第七章 多表查询
第八章 子查询
第九章 常用函数
第十章 事务
第十一章 视图
第十二章 索引
第十三章 存储过程
第十四章 索引
第十五章 权限管理
第十七章 SQL优化
第十八章 数据库优化
第十九章 数据库范式
1)当我们学了面向对象的时候,new了一个Animal对象,是把该对象存储到内存中的.
2)当我们学了IO流以后,是把数据存储到我们电脑上的磁盘文件中的.
3)当我们学了数据库后,是把数据存储到数据库当中的.
存储方式 |
优 点 |
缺 点 |
数据存储在内存中 | 读取速度快 | 断电或重启数据丢失 |
数据存储在磁盘文件中 | 永久保存 | 读取速度相比内存慢\查询效率低\管理不方便 |
数据存储在数据库 | 永久保存\读写速读快\方便管理 | 会占用一定的系统资源 |
1)关系型数据库(RDBMS)
关系型数据库是指:使用关系模型,把数据组织到二维表格中,表格与表格之间,数据之间的关系比较紧密,像这样一种数据存储方式就称之为关系型数据库.
比如:师生关系,部门员工关系;
常用的关系型数据库有:mysql/oracle/sql server/db2...数据库
2)非关系型数据库
是一种key/value结构的,分布式缓存数据库,比如redis、elasearch
3)数据库(DataBase)
是指按照一定的数据结构(二维表格形式)来存储、管理数据的仓库。
4)数据库管理系统(DBMS)
是一款管理、维护数据库的软件。
1.MySQL数据库简述
mysql最早是瑞典AB公司的开发的产品,在2018年的时候被sun以10亿美收购,在2019年sun又被oracle公司收购,目前属性oracle旗下的产品;由于该产品是开源的、体积小的、免费的,基于这些特点,已经被中小型公司作为主要的数据库,目前使用最广泛的版本是mysql8.0版本,mysql的默认端口号为3306.
2.Mysql下载、安装、配置、卸载(win10为例)
2.1下载
2.2安装
2.3配置
此电脑->属性->高级系统变量->环境变量->系统设置
在Path末尾增加;C:\Program Files\MySQL\MySQL Server 8.0\bin
2.4卸载
SQL语言是一种结构化查询语言,英文全称是Structured Query Language,按不同的功能可划分为以下4类:
操作数据库(CRUD)
C(Create):创建数据库
创建数据库:create datebase 数据库名字;
创建数据库,并判断是否存在:create datebase if not exists 数据库名字;
创建数据库并指定字符集:create datebase 数据库名字 character set gbk;
创建数据库,先判定是否存在,并指定字符集:create datebase 数据库名字 if not exists character set gbk;
R(Retrieve):查询数据库
查询所有数据库的名称:show databases;
查看某个数据库的字符集(查看某个数据库的创建语句):show create datebase 数据库名字;
U(Update):修改数据库
修改数据库的字符集:alter datebase 数据库名字 character set 字符集;
D(Delete):删除数据库
删除数据库:drop datebase 数据库名字;
判断数据库存在,删除数据库:drop datebase if exists 数据库名字;
使用数据库
查询当前使用的数据库:select datebase();
使用数据库:use 数据库名字;
操作表(CRUD)
C(Create):创建表
语法:
create table 表名(
列名1 数据类型1,
列名2 数据类型2,
列名3 数据类型3
);
注意:最后一列不加","
创建stu表例子:
create table stu(
id int,
name varchar(20),
sex varchar(2),
birthday date,
insert_time timestamp
);
复制表: create table 表名 like 被复制的表名;
R(Retrieve):查询表
查询某个数据库中所有表名字:show tables;
查询表结构:desc 表名称;
U(Update):修改表
修改表名:alter table 表名 rename to 新表名;
修改字符集:alter table 表名 character set 字符集类型;
添加一列:alter table 表名 add 列名 列类型;
修改列名称、类型:alter table 表名 change 列名 新列名 新数据类型;
修改列名称、类型:alter table 表名 modify 列名 新数据类型;
删除列:alter table 表名 drop 列名;
D(Delete):删除表
drop table 表名;
drop table if exists 表名;
主要功能是对数据库中的表作增加、删除、修改操作
一、插入数据(INSERT)
insert into tb_user(id,name,age)values(1,"张三",20);
二、删除数据(delete)
delete from tb_user;
三、修改数据(update)
update tb_user set name="李四" where id=1;
主要是对数据库中表作查询操作
例如:select * from tb_user
指数据的精确性(Accuracy) 和可靠性(Reliability)
MySQl的连接查询主要可以分为外连接,内连接,交叉连接
右外连接:显示左表中所有的数据及右表中符合条件的数据,右表中不符合条件的数据为null。
MySQL中不支持全外连接。
举例如下:有两张表分为L表和R表。
L表
R表
select L.`*`,R.`*` from L left join R on L.b=R.b
select L.`*`,R.`*` from L right join R on L.b=R.b
select L.`*`,R.`*` from L inner join R on L.b=R.b
select L.`*`,R.`*` from L,R
子查询:把一个查询的结果在另一个查询中使用
子查询可以分为以下几类:
MySQL视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。
对其中所引用的基础表来说,MySQL视图的作用类似于筛选。定义视图的筛选可以来自当前或其它数据库的一个或多个表,或者其它视图。通过视图进行查询没有任何限制,通过它们进行数据修改时的限制也很少。
视图是存储在数据库中的查询的sql 语句,它主要出于两种原因:安全原因,视图可以隐藏一些数据,如:社会保险基金表,可以用视图只显示姓名,地址,而不显示社会保险号和工资数等,另一原因是可使复杂的查询易于理解和使用。
案列测试:
测试表:user有id,name,age,sex字段
测试表:goods有id,name,price字段
测试表:ug有id,userid,goodsid字段
视图的作用实在是太强大了,以下是我体验过的好处:
作用一:
提高了重用性,就像一个函数。如果要频繁获取user的name和goods的name。就应该使用以下sql语言。示例:
select a.name as username, b.name as goodsname from user as a, goods as b, ug as c where a.id=c.userid and c.goodsid=b.id;
但有了视图就不一样了,创建视图other。示例
create view other as select a.name as username, b.name as goodsname from user as a, goods as b, ug as c where a.id=c.userid and c.goodsid=b.id;
创建好视图后,就可以这样获取user的name和goods的name。示例:
select * from other;
以上sql语句,就能获取user的name和goods的name了。
作用二:
对数据库重构,却不影响程序的运行。假如因为某种需求,需要将user拆房表usera和表userb,该两张表的结构如下:
测试表:usera有id,name,age字段
测试表:userb有id,name,sex字段
这时如果php端使用sql语句:select * from user;那就会提示该表不存在,这时该如何解决呢。解决方案:创建视图。以下sql语句创建视图:
create view user as select a.name,a.age,b.sex from usera as a, userb as b where a.name=b.name;
以上假设name都是唯一的。此时php端使用sql语句:select * from user;就不会报错什么的。这就实现了更改数据库结构,不更改脚本程序的功能了。
作用三:
提高了安全性能。可以对不同的用户,设定不同的视图。例如:某用户只能获取user表的name和age数据,不能获取sex数据。则可以这样创建视图。示例如下:
create view other as select a.name, a.age from user as a;
这样的话,使用sql语句:select * from other; 最多就只能获取name和age的数据,其他的数据就获取不了了。
作用四:
让数据更加清晰。想要什么样的数据,就创建什么样的视图。经过以上三条作用的解析,这条作用应该很容易理解了吧
(181条消息) mysql数据库优化方案_wjcreator6027的博客-CSDN博客
范式可以理解为给数据库中的表设计一些规范,满足这些规范的数据库应该是简洁的,结构清晰的
第一范式:列不可再分割(值不能再拆分)
第二范式:是在第一范式的基础之上,需要满足另外两个条件,要有主键,其次是非主键列必须依赖于主键,而不是只依赖于主键的一部分
第三范式:是在第二范式的基础之上,非主键列必须依赖于主键,不能存在传递依赖
比如:sudent表中(学号\姓名\年龄\性别\所属学院\学院地址\学院电话),这样一种表结构就存在一种依赖性,学号->所属学院->学院地址->学院电话
应该把它拆分成两张表
student表:(学号\姓名\年龄\性别\所属学院)
college表:(所属学院\学院地址\学院电话)
............................
MySQL数据库优化面试题 - 知乎 (zhihu.com)