华子目录
什么是数据库?
1.数据:描述事物的符号记录,可以是数字,文字,图形,图像,声音,语音等。数据有多种形式,它们都可以经过数字化后存入计算机。
2.数据库:存储数据的仓库,是长期存放在计算机内有组织、可共享的大量数据的集合。
注:数据库中的数据按照一定数据模型组织、描述和存储,具有较小的冗余度,较高的独立性和易扩展性,并为各种用户共享。
总结为以下几点:
1.数据结构化
2.数据的共享性高,冗余度低,易扩充
3.数据独立性高
4.数据由DBMS统一管理和控制(安全性,完整性,并发控制,故障恢复)
数据库管理系统(DBMS)
数据库管理系统(DBMS)是管理数据库的一个软件。它充当所有数据的知识库,并对它的存储、安全、一致性、并发操作、恢复和访问负责。
DBMS有一个数据字典(有时被称为系统表),用于储存它拥有的每个事物的相关信息,例如名字、结io;构,位置和类型,这种数据的数据也杯称为元数据。
数据库系统与文件系统的区别
1.文件系统:文件系统时操作系统用于明确存储设备(常见的是磁盘)或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。
操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统
2.数据库系统:数据库管理系统是一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,简称DBMS。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。
对比区别:
1.管理对象不同:文件系统管理对象是文件,并非直接对数据进行管理,不同的数据结构需要使用不同的文件类型进行保存(举例:txt文件和doc文件不能通过修改文件名完成转换);而数据库直接对数据进行存储和管理。
2.存储方式不同:文件系统使用不同的文件将数据分类(.doc/.mp4/.jpg) 保存在外部存储上;数据库系统使用标准统一的数据类型进行数据保存(字母,数字,符号,时间)
3.调用数据的方式不同:文件系统使用不同的软件打开不同类型的文件;数据库系统由DBMS统一调用和管理。
数据库的发展史
初始阶段:人工管理(人力手工整理存储数据)
萌芽阶段:文件系统(使用磁盘文件来存储数据)
初级阶段:第一代数据库(出现了网状模型、层次模型的数据库)
中级阶段:第二代数据库(关系型数据库和结构化查询语句)
高级阶段:新一代数据库(NOSQL型数据库)
常见数据库
关系性数据库
简单说,关系型数据库是由多张能互相联接的二维行列表格组成的数据库。关系模型就是指二维表格模型,当前主流的关系型数据库有Oracle、DB2、Microsoft SQL Server、MicrosoftAccess、MySQL、浪潮K-DB、武汉达梦、南大通用、人大金仓等等
关系型数据库的4大特性
1.原子性:事务里的所有操作要么全部做完,要么都不做。
2.一致性:数据库要一直处于一致的状态,事务的运行不会改变数据库原本的一致性约束。
3.隔离性:是指并发的事务之间不会相互影响(换句话说:不同事务按照提交的先后顺序执行)
4.持久性:一旦事务提交后,它所做的修改将会永久的保存在数据库上。
关系型数据库的优缺点
优点:
1.易于维护:都是使用表结构,格式一致
2.使用方便:sql语句通用,可用于复杂查询
3.复杂操作:支持sql,可用于一个表以及多个表之间非常复杂的查询
缺点:
1.读写性能比较差,尤其是海量数据的高效率读写
2.固定的表结构,灵活度稍欠
3.高并发读写需求,对于传统关系型数据库来说,硬盘I/O是一个很大的瓶颈
非关系型数据库
非关系型数据库,又被称为NoSQL,意为不仅仅是SQL。对NoSQL最普遍的定义是”非关联型的“,强调Key-Value存储和文档数据库的优点,是分布式数据库,近几年分布式数据库用的比较火的是Redis。
注:存储的方式有很多:”键值对“存储,列存储,文档存储,图形数据库等。
常见的非关系型数据库有:Redis、Amazon DynamoDB、Memcached、Microsoft Azure Cosmos DB和Hazelcast
非关系数据库的优点和缺点
优点:
高可扩展性,分布式计算,低成本,架构的灵活性,没有复杂的关系
缺点:
没有标准化,查询功能有限
DBMS支持的数据模型
1.层次模型
2.网状模型
3.关系模型
4.面向对象模型
MySQL体系架构
连接层
思想:为解决资源的频繁分配、释放所造成的问题,为数据库连接建立一个”缓冲池“
原理:预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从”缓冲池“中取出一个,使用完毕之后再放回去。
作用:进行身份验证,线程重用,连接限制,检查内存,数据缓存,管理用户的连接,线程处理等需要缓存的需求
SQL层
管理服务和工具组件:从备份和恢复的安全性,复制,集群,管理,配置,迁移和元数据等方面管理数据库
SQL接口组件:进行DML,DDL,存储过程,视图,触发器等操作和管理;用户SQL命令接口
解析器组件:验证和解析SQL命令
查询优化器组件:对SQL语句查询进行优化”选取,投影和连接“
缓存和缓存区:由一系列小缓存组成的,比如表缓存,记录缓存,key缓存,权限缓存等
插件式存储引擎
MySQL的存储引擎是插件式的。它根据MySQL AB公司提供的文件访问层的一个抽象接口来定制一种文件访问机制,这种访问机制就叫存储引擎。
myisam
它查询速度快,有较好的索引优化和数据压缩技术。但是它不支持事务。
innodb
它支持事务,并且提供行级的锁定,应用也相当广泛
物理文件层
1.支持的文件类型:
ext3,ext4,NTFS,NFS
2.文件内容
数据文件
日志文件
配置文件
其他文件
SQL语句分类
DDL
Data Definition Language:数据定义语言,定义对数据库对象 (库,表,列,索引) 的操作。create,drop,alter,rename,truncate等。
DQL
Data Query Language:数据查询语言,select语句
DCL
Data Control Language:数据库控制语言,定义对数据库、表,字段,用户的访问权限和安全级别。 grant,revoke等
DML
Data Manipulation Language:数据操作语言,定义对数据库记录的操作。insert,delete,update等
TCL
Transaction Control:事务控制。commit,rollback,savepoint等。
作业
1、显示所有职工的基本信息。
mysql> select * from worker;
2、查询所有职工所属部门的部门号,不显示重复的部门号。
mysql> select distinct 部门号 from worker;
3、求出所有职工的人数。
mysql> select count(*) from worker;
4、列出最高工资和最低工资。
mysql> select max(工资),min(工资) from worker;
5、列出职工的平均工资和总工资。
mysql> select avg(工资) as 平均工资, sum(工资) as 总工资 from worker;
6、创建一个只有职工号、姓名和工作时间的新表,名为工作日期表。
mysql> create table worker_date select 职工号,姓名,出生日期 from worker;
7、显示所有女职工的年龄。
mysql> select 性别,2023-year(出生日期) 年龄 from worker where 性别='F';
8、列出所有姓刘的职工的职工号、姓名和出生日期。
mysql> select 职工号,姓名,出生日期 from worker where 姓名='刘%';
9、列出1960年以前出生的职工的姓名、参加工作日期。
mysql> select 姓名,工作时间 from worker where year(出生日期) < 1960;
10、列出工资在1000-2000之间的所有职工姓名。
mysql> select 姓名 from worker where 工资 between 1000 and 2000;
11、列出所有陈姓和李姓的职工姓名。
mysql> select 姓名 from worker where 姓名 like '李%' or '陈%';
12、列出所有部门号为2和3的职工号、姓名、党员否。
mysql> select 职工号,姓名,政治面貌,if(政治面貌='党员','是','否') 是否党员 from worker where 部门号 in (101,102);
13、将职工表worker中的职工按出生的先后顺序排序。
mysql> select * from worker order by year(出生日期) asc;
14、显示工资最高的前3名职工的职工号和姓名。
mysql> select 职工号,姓名 from worker order by 工资 desc limit 3;
15、求出各部门党员的人数。
mysql> select count(*) from worker where 政治面貌='党员';
16、统计各部门的工资和平均工资
mysql> select 部门号,sum(工资) 总工资,avg(工资) 平均工资 from worker group by 部门号;
17、列出总人数大于4的部门号和总人数。
mysql> select 部门号,count(*) 总人数 from worker group by 部门号 having count(*)>4;