数据库基础知识概括

数据库简介

进入21世纪现代信息化社会,信息、物质、能源已经成为人类赖以生存的三大支柱,数据库技术是计算机科学与技术中发展最快、应用最广泛的重要分支,已成为各种业务数据处理、数据资源共享、信息化服务的重要基础和核心,并与计算机网络、人工智能一起被称为计算机界三大热门技术。

“谁掌握了信息,谁控制了网络,谁就将拥有整个世界”——著名未来学家阿尔文·托夫勒

  一、数据库的一些相关概念

       1. Data:数据,是数据库中存储的基本对象,是描述事物的符号记录。
       2. DataBase:数据库,是长期储存在计算机内、有组织的、可共享的大量数据的集合。
       3. DBMS:数据库管理系统,是位于用户与操作系统之间的一层数据管理软件,用于科学地组织、存储和管理数据、高效地获取和维护数据。
       4. DBS:数据库系统,指在计算机系统中引入数据库后的系统,一般由数据库、数据库管理系统、应用系统、数据库管理员(DBA)构成。


       5. 数据模型:是用来抽象、表示和处理现实世界中的数据和信息的工具,是对现实世界的模拟,是数据库系统的核心和基础;其组成元素有数据结构、数据操作和完整性约束。

数据模型的类型:
       6. 概念模型:也称信息模型,是按用户的观点来对数据和信息建模,主要用于数据库设计。
       7. 逻辑模型:是按计算机系统的观点对数据建模,用于DBMS实现。
       8. 物理模型:是对数据最底层的抽象,描述数据在系统内部的表示方式和存取方法,在磁盘或磁带上的存储方式和存取方法,是面向计算机系统的

概念模型的相关概念:
       9. 实体和属性:客观存在并可相互区别的事物称为实体。实体所具有的某一特性称为属性。

概念模型的表示方法:
       10.E-R图:即实体-关系图,用于描述现实世界的事物及其相互关系,是数据库概念模型设计的主要工具。其使用的基本图形构件包括四种:矩形、菱形、椭圆形、连接线。

关心模型的概念:
       11.关系模式:从用户观点看,关系模式是由一组关系组成,每个关系的数据结构是一张规范化的二维表。
       12.型/值:型是对某一类数据的结构和属性的说明;值是型的一个具体赋值,是型的实例。

数据库系统的模式结构:
       13.数据库模式:是对数据库中全体数据的逻辑结构(数据项的名字、类型、取值范围等)和特征(数据之间的联系以及数据有关的安全性、完整性要求)的描述。
       14.数据库的三级系统结构:外模式、模式和内模式。
       数据库内模式:又称为存储模式,是对数据库物理结构和存储方式的描述,是数据在数据库内部的表示方式。一个数据库只有一个内模式。
       数据库外模式:又称为子模式或用户模式,它是数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图。通常是模式的子集。一个数据库可有多个外模式。
       数据库的二级映像:外模式/模式映像、模式/内模式映像。

主流的数据库软件都有哪些?开源可以跨平台的数据库都有哪些?

甲骨文:orcale

IBM:DB2

微软:SQL server

开原的可以跨平台的:

Mysql:开源切跨平台;           Orcale   DB2:跨平台不开源

SQL server  :不跨平台,不开源;

mysql的服务进程叫什么名字?端口是多少? 默认数据库的目录?

进程名:mysqld           端口:3306             默认目录:/var/lib/mysql

mysql默认的三个库名叫什么名字?哪个库的数据不占磁盘空间?

mysql  ,test   , information_schema

information_schema:不占磁盘空间,存在内存里面。

请列出mysql的常用数据类型?写出定义这些数据类型所定义的关键字?

数值类型:int (整数性)、float (浮点型)

玫举类型:set 、  enum

字符类型:char、varchar

日期时间类型:time、year、datetime

索引的优点和缺点?默认保存索引信息的是哪个文件?

优点:索引像一本书的目录,可以加快查询的速度;

缺点:会降低插入、更新表记录数据的速度;

索引信息默认保存在表名.MYI的文件中。

请简述在表中创建外键字段要满足哪些条件?

1.表类型必须都是Innodb存储引擎;

2.表的外键字段的类型要明确匹配;

3.被参照的字段要有明确的索引。

简述mysql的结构体系?每个组件都有什么作用?

连接池:内存检查,缓存检查,进程数的限制

SQL接口:用户通过sql客户端发来的命令,由sql接口接收,执行sql操作。(DML操作语言:查询,修改,升级数据。DDL数据操作语言:创建新的库,新的索引,创建新的用户);存储过程,视图触发器。

分析器:分析数据库的查询语句、数据处理、对象的访问权限;

优化器:优化访问路径,生成执行树;

缓存缓冲器:查询结果的缓存;

存储引擎:用来管理存储的文件系统,讲逻辑结构转化为物理结构的程序,不同的存储引擎有不同的存储方式和功能;

管理工具:负责数据的备份,回复,安全,移植,集群,这些管理用具一般和文件系统打交道,不和mysql-server打交道,都是通过命令去执行;

物理存储设备(文件系统)。

mysql数据库访问的执行过程?

1.客户端发起请求                            

2.服务器开启线程享应客户端的请求

3.客户端发起sql查询语句          

4.缓存查询,先记录sql语句,查看是否有缓存,有缓存直接在缓存提出,如果缓存没有则进入分析器                    

5.分析器:进行分析sql命令是否正确,将客户的命令进行切换,将每个词用空格隔开,获得用户要查询的表,内容,用户权限

6.优化器:执行路径的选择,生成执行树。

7.存储引擎:管理存储的文件系统;不同的存储引擎有不同的功能和存储方式。

简述mysql数据库中查询,插入,更新,删除表记录的指令格式?

插入记录的指令格式:insert    into   表名(字段名)    values(key值)

查询记录的指令格式:select    字段名    from    表名      where    条件

更新表记录的指令格式:update   表名    set    字段=更新的key值;

删除表记录的指令格式:delete   from    表名   where    条件

简述用户授权命令的格式?

grant    权限     on   库.表      to     用户名@访问地址       identified   by   密码    with   grant   option(是否给用户授权的权限);

简述mysqldump  备份数据库时库名的表示方式?

--all-database :表示所有库       或     -A

数据库名    :表示单个库

数据库名.表名:表示单个表

-B  数据库1,数据库2,.... :表示备份多个库

什么是mysql集群?

mysql集群是一个无共享的,分布式节点架构的存储方案。

建造集群的目的是:提高数据的容错性和高可用性能。

mysql集群和mysql主从的区别?

集群:包含成员,消息,冗余,故障转移等功能;

主从:也可以理解为数据的复制,也就是一个服务器想另一个服务器发送消息的功能。

mysql集群的特点?

是为了实现最高性能,达到高可用性和冗余等目标。主库对从库进行数据复制。数据复制采用的是同步机制,主库数据同步到其他从库数据节点上,数据在多个数据节点保存。

mysql集群有一些创建高可用系统的专用功能,主要包括哪些?

节点回复、日志、检查点、系统恢复、热备份恢复、无单点故障、故障转移,分区、联机操作。

mysql中myisam和innodb的区别?

存储限制          myisam支持256G     innodb支持64G
事务          myisam不支持事务       innodb支持事务
索引          两者都支持    两者都支持
锁粒度        myisam支持标级锁    innodb支持行级锁
数据压缩        myisam支持数据压缩    innodb不支持数据压缩
外键           myisam不支持外键    innodb支持外键

                                        

什么是读写分离?

读写分离就是让主库处理事务性查询,从库处理select查询。数据库复制被用来把事务性查询导致的数据变更同步到从库,当然,主库也可以select查询。

读写分离最大的作用就是缓解服务器的压力。

读写分离的好处都有哪些?

增加冗余;            

缓解服务器的压力;增加机器的处理能力;

对于读应用较多的,应用读写分离是最好的,可以确保写的服务器压力更小,而读的服务器又可以接受点时间上的延迟。

 读写分离提高性能的原因?

1.物理服务器增加;负荷增加;

2.主库和从库只负责自己的写和读操作,极大的缓解了X锁和S锁;

3.从库可以配置为myisam引擎,提高读的性能及节省系统开销;

4.从库同步主库的数据和主库直接写还是有区别的,从库是通过主库发来的binlog来同步的,但是呢,区别在于主库向从库发送binlog是异步的,所以同步数据也是异步的。

5.读写分离适用于读的操作应用较多的场景,如果只有一台服务器,当select很多时,update和delete会被select的访问堵塞,这时就需要等待select结束,并发性能不高;当读和写比例相近时,可以设置成互为主从。

6.分摊读写,这个就是拿机器数量去换性能。

7.增加冗余,提高容错,当主故障时,可以迅速地把从切换为主来使用。

char和varchar的区别?

char:是定长变量 (容易出现数据冗余,占用存储空间)                           varchar:是可变化长度的变量(减少数据冗余)

mysqldump和xtranbackup的实现原理?备份恢复时间?

mysqldump:采用了sql级别的备份机制,是把数据导成sql脚本文件,在不同的mysql版本升级之间较合适;

xtranbackup:是innodb的hotbackup工具,在启动的时候会复制所有的日志文件,同时会启动一个后台进程,监视事务日志,并且从事务日志中复制最新的修改。因此,在xtranbackup启动的开始就将每个事务日志的修改都记录了下来。

mysqldump:备份恢复的时间都很慢,任何数据的更新和变化都会被挂起,不适用于生产中的备份,

xtranbackup:备份和恢复的时间比nmysqldump快,但是会锁表。

mysql中的innodb的行锁,是通过加载什么上面完成的?

是通过加在索引上来实现的。

mysql的数据备份方式?

完全备份、增量备份、差异备份

mysql的主从复制原理?

分为同步复制和异步复制,实际复制架构中大部分为异步复制。

复制过程:1.slave上的IO进程连接到master,并请求从binlog日志的指定位置复制之后的日志内容;

2.master接到来自slave的IO请求后,通过IO的请求读取binlog日志的指定位置之后的日志内容,返回给slave的IO线程,在返回信息中还包括了本次master的binlog的文件名称以及binlog日志的位置;

3.slave的接收到IO进程的返回信息后,将日志信息依次添加到relay-log的最末端,

4.sql进程检测到relay-log增加了新内容,解析成sql命令,在本身执行;

同步复制:把数据都load到内存中,对内存的要求非常大,实施性不大。

关系数据库基础

数据库集中式控制的优点:

1.降低存储数据的冗余度

2.更高的数据一致性

3.存储的数据可以共享

4.可以建立数据库所遵循的标准

5.便于维护数据完整性

6.能够实现数据的安全性

7.用户可以添加、修改或查询数据


在数据库中数据以结构化的格式被组织和分类,这种格式成为元数据(meta data),元数据是标书被存储的数据的数据。
关系模型把世界看做是由实体和联系组成的。

实体:是指客观存在并相互区别的事物,实体具有的特性称为属性,实体可以通过属性来描述。


数据库发展史上出现的数据模型:

层次模型、网状模型、关系模型、对象模型。


关系模型用组成数据的表的行和列结构。

关系型数据中的主键(primary key)是每一行的唯一标志

外键(forergn key)与其他表的主键相连,用来表达表和表之间的关联关系。


以关系模型创建的数据库成为关系型数据库(relationnal database)表示关系型数据库的核心单元,是数据存储的地方。

在表的内部数据被分成行(row)和列(column),每一行为一个实体(0到多个),每一列代表实体的一个属性(1到多个,说明数据的名称,同时也限定了数据类型)。关系型数据库中允许某些值为空,即null。


表之间有三种基本关系:一对一关系、一对多关系、多对多关系


关系型数据库管理系统(relational database management system 简称RDBMS)是管理、操作和维护关系型数据库的一种软件程序。分为本地(local)和服务器(server)数据库管理系统两种类型。


SQL即结构化查询语言(structured query language 简称SQL),是一种用于管理关系型数据库并与数据库中的数据进行通讯的计算机语言,可以通过编写SQL语句访问和操纵数据库中的数据。


SQL语句分为:

a、数据定于语言DDL(Data Definition Language):用于创建(create database、create table、create index)、修改和重命名(alter table、rename table)、删除(drop database、drop table、drop index)数据库内的数据结构。
b、数据查询语言DQL(Data Query Language):用于从数据库中的表中查询指定的数据。使用select语句。
c、数据操作语言DML(Data Manipulation Language):用于修改数据库中的数据,包括插入(insert)、更新(update)、删除(delete)数据。
d、数据控制语言DCL(Data Contral Language):用于控制对数据库的访问。使用grant语句授权访问,使用revoke语句禁止访问。
目前流行的关系型数据库管理系统有:甲骨文公司的MySQL、Orace、微软的SQL Server

管理数据库的表

数据类型:

整数型(int)、浮点型(float、double)、字符串型(char、varchar)、日期和时间类型(date、datetime)和其他一些类型。
创建数据库语句:

create database 数据库名;
连接到数据库语句:

use 数据库名;在用户界面中可以直接点。
删除数据库语句:

drop database 数据库名;
创建表语句:

create table 表名(列名 列的数据类型 (列的约束),列名 列的数据类型 (列的约束),……,列名 列的数据类型 (列的约束));

要求:
1.创建表时首先需要选中某一个数据库

2.每个属性之间用逗号(英文版本的)隔开

3.最后一个属性不加符号结束
修改编码格式:

CREATE TABLE 表名( 列的各种数据 )DEFAULT CHARSET utf8;
删除表语句:

drop table 表名;


创建临时表语句

在正式 表名 前加#或##。当创建本地临时表时加#,创建全集临时表时加##。


复制表语句:

select * into 新表名 from 原表名;


修改表语句:

加一列 alter table 表名 add 列名 列的数据类型 (列的约束);
改类型 alter table 表名 modify 列名 要改的东西;
删除列 alter table 表名 drop column 列名;
alter table语句同其他选项一起可以更改表结构。包括增删改列、主键、外键或其他约束等。 


创建索引语句:create index 索引名 on 表名 (列名1,列名1,……);
删除索引语句:drop index 表名.列名 on index;

保证数据完整性

关系型数据库必须确保数据的完整性,即数据的可靠性和准确性。
根据数据完整性实施的方法分:

实体完整性、域完整性、引用完整性、自定义完整性。


实体完整性保证表中的每一行都是不同的实体,域完整性保证输入到每一列数据的正确性和准确性,引用完整性保证标间关系的正确性和准确性。
数据完整性的实现:

创建非空约束 not null;

设置主键约束 primary key (自增长:auto_increase);

设置唯一约束 unique;

指定默认值 default;

设置检查约束 check(逻辑表达式);
使用外键约束连接的两个列必须是相同的数据类型,
如果要删除一个被其他表引用的表,首先必须去掉引用关系。


使用DML语句更改数据

向表中添加数据语句:

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

列名列表中各参数之间用逗号隔开,其中参数可以为1到多个;

值列表可以有1到多个,当使用value时只能有一个值列表。

如果不指定列名,values列表中的值必须和表中列的顺序、个数一样。


插入多行的语句:

insert into 表名 (列名列表)select select语句;

其实质为赋值,但是两个表的列名和列数不一定相同,列名列表 也可以省略不写。该语句中列的数目必须等于从select语句返回的列数,列的数据类型必须和返回的对应数据类型一直。


复制表语句:

create table 新表名 select * from 原表名;

 * 代表所有列。复制表的结构和数据。
select 列名 into 新表名 from 原表名;

注:MySQL中不支持该语句。  

更新数据语句:

update 表名 set 新列值列表 where 过滤条件;

如果不指定where则更新全表数据
 update 表名 set 列1=新值1,列2=新值2,…… where 过滤条件;

前面两个列之间要用逗号隔开,and只能用在where后的条件中
通过更新删除列中的数据,即把列值更新为null。
设置空:赋值为null或者赋值为单引号

删除数据语句:

delete from 表名 where 过滤条件;

如果不指定where则删除全表数据
delete 关键字只能删除整行数据,要删除单个字段可以使用语句:update 列=null where 条件 。
delete 关键字只能删除表中的数据,不能删除表。删除表要用 drop table 表名;
truncate table 表名;

删除表中的所有行,但是表的结构、列、约束、索引等不会被改动。数据被永久删除,不可回滚。不适用有外键约束的表。


简单的数据查询

投影操作是指在SQL查询中,使用select语句,选择将对表中的哪些列进行操作,这些列将出现在结果中。
语句结构:

select 列名列表 from 表名;

 单个列直接写,多个列名之间用逗号隔开,全部列用*号代替。
表名前缀结构:

表名.列名     表、列别名:select  列A as a,列B as b  from 表名 as T;
例如:select T.列A as a, T.列B as b  from 表名 as T; (其中as可以省略
列计算语句:例如 select A, B,A*B as AB from T; -- 在SQL语句中可以对列执行一般的加减乘除数学运算
去重语句:select distinct 列名 from 表名;
多列情况:select distinct 列A,列B from 表名; -- 此处 列A、列B要同时满足才算满足条件(即都重复才算重复)
返回限定行数的查询: select top rowcount columnA,columnB from table;
例如:select top 10 columnA,columnB from table; -- 返回前10行的A、B列数据
select top 10 percent columnA,columnB from table; -- 返回前10%行的A、B列数据
查询操作就是在SQL查询中,通过where子句指定查询条件,只从表中提取或显示满足条件的数据。

语句:select 列名列表 from 表名 where 条件;


单条件查询语句:

select 列A,列B from 表名 where  列C 比较运算符(=、!=、>、<、>=、<=)值; 


多条件查询语句:

select 列A,列B from 表名 where 条件1 链接关键字(and、or、and not) 条件2;


范围查询语句:

select 列A,列B from 表名 where  列C (not) between 下限 and 上限; (上限和下限顺序不可颠倒),between前可加not


集合查询语句:

select 列A,列B from 表名 where  列C in (值集合);(值集合可以是几个常量,也可以是select语句


模糊查询语句:

select 列A,列B from 表名 where  列C like 模式; -- 模式由字符常量加上通配符组成,通配符_代表一个或%代表任意个字符。


含有limit的语句:

limit num1,num2;num1是索引从0开始,num2是要查询的行数,当num1省略时默认值为0。limit放在语句最后。


显示修改后的查询结果语句:

select f_age+10 from 表名 where 查询条件; (显示加10后的年龄


限制不同的语句:

select distinct pk_id,f_name from t_student1 where f_age between 18 and 25 ;( 不同的限制加前面


空值数据处理:

select 列A,列B from 表名 where  列C is (not) null; (与空值有关的处理必须使用is,其他都不对,null=null结果是false,空值之间并不相等 


排序语句:

select 列A,列B from 表名 order by 列A(排序方法),列B(排序方法),列C(排序方法)……  asc(desc);(by 后面为排序条件,多个条件时,按条件先后书序执行排列,asc为升序可省略(因为是默认升序的),desc为降序不可省
如果表名或列名是SQL关键字或是保留字,则需要用中括号或双引号括起来。


聚合函数与分组


常用的聚合函数有:

count、sum、avg、max、min。(都可以取别名,不能用来计算字符串型数据


计数规范关键字:

1、* 计数所有选择的行;

2、all 列 计数指定列的所有非空值行;

3、distinct 计数指定列的所有唯一非空值行。


语句:select count(计数规范) as 别名 from 表名;-- count(*)返回所有结果的行数。select count(distinct 列名) from table;-- 先去重再计数
select sum(计数规范) as 别名 from 表名;
select avg(计数规范) as 别名 from 表名;
select max(计数规范) as 别名 from 表名;
select min(计数规范) as 别名 from 表名;


select round(聚合函数,int(int为保留个小数位数)) from 表;(不写int参数默认保留整数
concat( )拼接:select concat(,,,,) FROM 表;
分组:

select 列A,列B,聚合函数 from 表名 where 过滤条件 group by 列C;-- 分组后看到的是每组的第一个实体的内容
select 列A,列B,聚合函数 from 表名 where 过滤条件 group by 列C having 聚合函数过滤条件; -- where过滤条件发生在聚合函数计算之前,所以聚合函数计算不能放在过滤条件的位置
SQL语句的执行顺序:from——where——group by——select——having——order by——limit
书写顺序:select、from、where、group by、order by、having、limit

组合查询

子查询:

嵌套在其他查询中的查询,也称为内部查询,分相关子查询和非相关子查询,包含子查询的语句称为外部查询。

非相关子查询总共执行一次,执行完将值传给外部查询;

相关子查询,外部查询返回一行就执行一次。


嵌套查询的相关结构: select (相关子查询) from (子查询、必须取别名) where (非相关子查询);
where 子句中的子查询:select 列A from table where column =(子查询);
返回多个结果的子查询:select 列A from table where column in (子查询);
子查询中使用运算符: select 列A from table where exists(子查询);
select 列A from table where column > all(子查询); -- all运算符与子查询和比较运算符(=、>、<等)一起使用。
select 列A from table where column > any(子查询); 在子查询返回的值中,只要有一行满足比较运算(=、>、<等),表达式就为真。
组合查询:union 运算符:查询语句1 union 查询语句2;
 例如:select columnA from tableA union select columnB from tableB;
 保留重复行使用 union all 运算符:查询语句1 union all 查询语句2;
 例如:select columnA from tableA union all select columnB from tableB;


联接


表联接可以分为:内联接、外联接、交叉联接和自联接。


内联接(inter):使用=、>、<等的比较运算符,包括相等联接、非相等联接和自然联接。
select tableA.column1,tableB.column2 from tableA inner join tableB on tableA.column1=tableB.column2;
外联接(outer):分左外联接、右外联接和全外联接。

左外联接(left join 或者left outer join)以左表为基准;

右外联接(right join 或者right outer join)以右表为基准;

全外联接(full join 或者 full outer join)返回左表和右表中的所有行,没有数据的返回null。

实例:
 

select * from tableA left outer join tableB on tableA.column1=tableB.column2;
select * from tableA right outer join tableB on tableA.column1=tableB.column2;
select * from tableA full outer join tableB on tableA.column1=tableB.column2;

               
以上一些内容细节方面的知识点后期会进一步完善,还在深入学习中~

猜你喜欢

转载自blog.csdn.net/weixin_41719737/article/details/88365018