前言:数据库是存放数据的仓库。它的存储空间很大,可以存放百万条、千万条、上亿条数据。但是数据库并不是随意地将数据进行存放,是有一定的规则的,否则查询的效率会很低。当今世界是一个充满着数据的互联网世界,充斥着大量的数据。即这个互联网世界就是数据世界。数据的来源有很多,比如出行记录、消费记录、浏览的网页、发送的消息等等。除了文本类型的数据,图像、音乐、声音都是数据。
数据库是一个按数据结构来存储和管理数据的计算机软件系统。数据库的概念实际包括两层意思:
(1)数据库是一个实体,它是能够合理保管数据的“仓库”,用户在该“仓库”中存放要管理的事务数据,“数据”和“库”两个概念结合成为数据库。
(2)数据库是数据管理的新方法和技术,它能更合适的组织数据、更方便的维护数据、更严密的控制数据和更有效的利用数据。
一、数据库基本概念
数据:存储在以“记录”为行,以“字段”为列的数据表中
表的功能:用来存储具体的数据
数据库:表的集合,是存储数据的仓库,以一定的组织方式存储的相互有关的数据集合
ps:数据库可以完成数据持久化保存+快速提取
数据如何保存:最外层是mysql服务——>mysql数据库——>数据表——>记录为行,字段为列——>数据保存在一行行记录中
那么想要实现以上功能,需要编写一系列的规则--》SQL语句;而SQL语句按功能分类:增/删/改/查。
二、数据库的发展史
第一代数据库
①自二十世纪60年代起,第一代数据库问世
②是层次模型和网状模型的数据库系统
③为统一管理和数据共享提供了有力支撑
第二代数据库
①20世纪60年代起,第二代数据库系统问世
②20世纪80年代初,IBM公司关系数据系统DB2问世,开始逐步取代层次网状模型数据库,成为行业主流
③到目前为止,关系数据库系统仍占据系统数据库应用的主要地位
第三代数据库
①自20世纪80年代开始,适应不同领域的新型数据库系统不断涌现
②面向对象的数据库系统,实用性强、适应面广
③20世纪90年代后期,形成了多种数据库系统共同支撑的局面
一些新的元素被添加进主流数据库系统中
三、当下主流的数据库
①SQL Serer (微软公司产品)
面向Windows操作系统
简单、易用
②Oracle (甲骨文公司产品)
面向所有主流平台
安全、完善、操作复杂
③DB2 (IBM公司产品)
面向所有主流平台
大型、安全、完善
④MySQL(甲骨文公司收购)
免费、开源、体积小
四、关系型数据库(SQL)
实体-关系 表(E-R表)
记录(行)表示了一个实体(的属性)
而E-R图
实体与实体之间的联系(关系)
即表与表的关系
实体:也称实例,对应现实世界中可区别其他对象的“事件”或“事务”,如银行客户、银行账户等
属性:实体所具有的某一特性,一个实体可以有多个属性,如“银行客户”实体集体中的每一个实体均具有姓名、住址、电话等属性
联系:实体集之间对应关系称为联系,也称为关系,如银行客户和银行账户之间存在“储蓄”的关系
存储方式:二维数据表:数据存储在记录为行,以字段为列的数据表中
每一行称为一条记录,用来描述一个对象的信息
每一列称为一个字段,用来描述对象的一个属性
存储内容:数字、文字、图形、图像、声音、档案记录等;包含:实体、关系、属性
常用的关系数据库:Mysql (Oracle公司;5.6升级到5.7的;mariadb,mysql的轻量版)、SQL server ( 微软)、access (微软公司office产品)/Oracle (税务局)、DB2 ( IBM公司,国电),sybase ( sybase)等等
五、非关系型数据库(NoSQL:not only sql)
概念:存储海量数据,给与”大数据“进行分析,筛选出有价值的部分
存储方式:不以关系模型为依据,不需要固定的表格式;
存储内容:存储图片、视频、音频等一些非关系型
优点:
高并发读写
对海量数据高效率存储与访问;比如高德:实时分析平台
具有高扩展性与高可用性;分布式特性
常用非关系型数据库(NoSQL) :
MongoDB 、Redis (内存数据库/缓存数据库) K-V键值对、与之类似的Memcache, K-v键值对
redi s-memecache对比:
相同点:存储高热数据(在内存中高速运行)
不同点: redis可以做持久化保存,可以存储对象
K-V:workdi r=/usr/local /nainx
tomcat --------redis(内存、缓存)---数据库mysql(数据库数据保存在磁盘里面)
tomcat跟数据库进行快速交互时,为了提高效率,可以在中间加载redis,一方面提高加载速率,另一方面降低mysql的压力
引申: redis 持久化方式
以键值存储数据,数据保存在内存中,但会定期将数据写入磁盘(持久化方式)
使用非关系型数据库存储,如果需要持久化,就可以使用redis
六、时序数据库-TSD
类似心电图;持续性的,根据时间点进行变化的一组连续性的数据
七、Mysql 数据库--日志
数据库日志文件用于备份,恢复,是最核心的部分
mysql与oracle日志有所区别
MySQL写一条数据,同步到日志中一条
Oracle重做日志组
一个组中至少3个日志成员,轮流存储日志;还会有另一个组与之同步/备份
阿里云对象存储:存储大都是一些静态文件,图片、音频、视频,不能直接在对象存储中修改数据
飞天平台:使用盘古系统,钟馗:安全;女娲:选举/调度;盘古一式三份
MySQL:存储引擎;分类
myisam和innodb 两种引擎
myisam:快速读取,不支持事务
innodb:更注重写,支持事务
八、数据库基本命令
常用数据类型:
int:整形 ###用于定义整数类型的数据
float:单精度浮点4字节32位 ##准确表示到小数点后六位
double:双精度浮点8字节64位 ##float的双倍
char:固定长度的字符类型 ##用于定义字符类型数据;比如:手机号码char(11)
varchar: 可变长度的字符类型 ##设置上限;比如:varchar(11)字符上限11个
text: 文本
image:图片
decimal(5,2): 5个有效长度数字,小数点后面有2位 ##指定长度数组;比如:若为12345.899和1 2345.891会显示12345.90和12345.89;四舍五入
#Char如果存入数据的实际长度比指定长度要小,会补空格至指定长度,如果存入的数据的实际长度大于指定长度,低版本会被截取,高版本会报错
截取:四舍五入
截断:不四舍五入
九、SQL语言分类
Structured Query Language的缩写,即结构化查询语言
关系型数据库的标准语言
用于维护管理数据库
◆包括数据查询、数据更新、访问控制、对象管理等功能(增、删、改、查)
DDL:数据定义语言,用于创建数据库对象,如库、表、索引等
DML:数据操纵语言,用于对表中的数据进行管理
DQL:数据查询语言,用于从数据表中查找符合条件的数据记录
DCL:数据控制语言,用于设置或者更改数据库用户或角色权限
十、基于数据表基础命令的高级操作
create table test1 like test; #复制格式,通过LIKE方法,复制yyy表结构生成yyy2表
insert into test1 select * from test; #备份内容;备份来自于test做复制
实例:
create table zzz like zw;
insert into zzz select * from zw;
select * from zzz;
克隆表,将数据表的数据记录生成到新的表中
CREATE TABLE test02 (SELECT * from test) ; #复制test表数据到test02中
show create table test02\G #获取数据表的表结构、索引等信息;
SELECT * from test02;
实例:
create table test (select * from zw);
show create table test\G; ##看下图,实际复制的创建表的SQL语句
select * from test;
复制完表结构之后可以使用slter table更改需要的信息
show create table zw
清空表,删除表内的所有数据
方法一:
delete from yyy3;
#DELETE清空表后,返回的结果内有删除的记录条目;
DELETE:工作时是一行一行的删除记录数据的;如果表中有自增长字段,使用DELETE FROM 删除
所有记录后,再次新添加的记录会从原来最大的记录ID后面继续自增写入记录
delete from test1 不会删除表的结构
方法二:
truncate table test01 ;
#TRUNCATE清空表后,没有返回被删除的条目:TRUNCATE工作时是将表结构按原样重新建立,因此在速度上TRUNCATE会比DELETE清空表快;使用TRUNCATE TABLE清空表内数据后,ID会从1开始重新记录
truncate table test01 不会删除表的结构
十一、创建临时表
临时表创建成功之后,使用SHOW TABLES命令是看不到创建的临时表的,临时表会在连接退出
后被销毁
如果在退出连接之前,也可以可执行增删改查等操作,比如使用DROP TABLE语句手动直接删除
临时表。
PS:无法创建外键
CREATE TEMPORARY TABLE表名(字段1 数据类型,字段2数据类型[,...] [,PRIMARY KEY (主键名) ]) ;
记录数据的过程
sql写入——>数据表中——>先把数据保存在内存中——>写入到磁盘
insert into info——>info这张表,会先复制一份表数据到内存里面,给我们进行修改
——>敲完回车之后,确定提交了,才会写入数据表中——>再保存在磁盘里面
create table test01——>只会保存在内存中,在数据库退出连接之前的所有操作,都是在内存中进行的,不会保存在磁盘里面,退出连接后,临时表会释放掉
临时表的创建
示例:
create temporary table XXX (
id int(4) zerofill primary key auto increment,
name varchar (10) not null,
cardid int (180) not null unique key,
hobby varchar (50) );
insert into XXX values (1, ' zhangsan' , 123456, ' running') ;
select * from test03;
show tables ;
quit
select * from test03;
十二、MySQL中6种常见的约束/规则
主键约束(primary key)
外键约束(foreign key)
非空约束(not null)
唯一性约束(unique [key| index] );index:索引
默认值约束(default)
自增约束(auto increment)
十三、数据库提权
授予权限
grant:提权
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'来源地址' [ IDENTIFIED BY '密码'] ;
grant all on *.*:代表提权所有表
权限列表:用于列出授权使用的各种数据库操作,以逗号进行分隔,如“select,insert,update”, 使用"all"表示所有权限,可授权执行任何操作
数据库名.表名:用于指定授权操作的数据库和表的名称,其中可以使用通配符"*"。
例如,使用“kgc.*"表示授权操作的对象为kgc数据库中的所有表
'用户名@来源地址':用于指定用户名称和允许访问的客户机地址,即谁能连接、能从哪里连接。来源地址可以是域名、IP地址,还可以使用“%”通配符,表示某个区域或网段内的所有地址,如“%.kgc. com"、“192. 168.226.%”等。
IDENTIFIEDBY:用于设置用户连接数据库时所使用的密码字符串。
在新建用户时,若省略“IDENTIFIED BY"部分,则用户的密码将为空。