数据库专项训练
一、数据库的增删查改
- drop是完全删除表,包括表结构
- delete是删除表数据,保留表的结构,而且可以加where,只删除一行或者多行
- truncate 只能删除表数据,会保留表结构,而且不能加where
-- 创建test数据库
CREATE DATABASE test
-- 创建person的数据表
CREATE TABLE person(
name VARCHAR(128),
age INTEGER
)
-- 删除数据表person
DROP TABLE person
查看数据表: SHOW CREATE TABLE 数据表名称
-
有关系 R 和 S , R -( R - S )的运算等价于
R∩S
-
DML(data manipulation language):
数据操作语句:包括SELECT、UPDATE、INSERT、DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言
DDL(data definition language):
数据定义语句:DDL比DML要多,主要的命令有CREATE、ALTER、DROP等,DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,他们大多在建立表时使用
DCL(Data Control Language):
数据控制语句:是用来设置或更改数据库用户或角色权限的语句,包括(grant授权,deny,revoke收回权限等)语句。在默认状态下,只有sysadmin,dbcreator,db_owner或db_securityadmin等人员才有权力执行DCL
事务控制语句:
(1)BEGIN或START TRANSACTION:显式地开启一个事务
(2)COMMIT:提交事务。使已对数据库进行的所有修改成为永久性的
(3)ROLLBACK:回滚。会结束用户的事务,并撤销正在进行的所有未提交的修改
(4)SAVEPOINT identifier:SAVEPOINT允许在事务中创建一个保存点,一个事务中可以有多个SAVEPOINT
(5)RELEASE SAVEPOINT identifier:删除一个事务的保存点,当没有指定的保存点时,执行该语句会抛出一个异常
(6)ROLLBACK TO identifier:把事务回滚到标记点
(7)SET TRANSACTION:设置事务的隔离级别。InnoDB存储引擎提供事务的隔离级别有READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ和SERIALIZABLE
- 修改表结构包括:增加字段、删除字段、增加约束、删除约束、修改缺省值、修改字段数据类型、重命名字段、重命名表等。这些操作都是用 alter table 命令来完成。常用用法如下:
1、增加字段:ALTER TABLE 表名 ADD 字段名 字段类型;
2、删除字段:ALTER TABLE 表名 DROP COLUMN 字段列名;
3、增加约束:ALTER TABLE 表名 ADD CHECK(字段名<>'')或者 ALTER TABLE 表名 ADD CONSTRAINT 约束名 UNIQUE(字段名);
4、删除约束:ALTER TABLE 表名 DROP CONSTRAINT 约束名;
5、修改字段缺省值:ALTER TABLE 表名 ALTER COLUMN 字段名 SET DEFAULT 默认值;
6、 修改字段数据类型:ALTER TABLE 表名 ALTER COLUMN 字段名TYPE l类型;
7、重命名字段:ALTER TABLE 表名 RENAME COLUMN 旧字段名TO 新字段名;(修改列: ALTER TABLE 表名 modify 字段名)
8、重命名表:ALTER TABLE 表名 RENAME TO 新表名。
修改表名RENAME TO;修改字段名和数据类型CHANGE;修改字段数据类型MODIFY;修改字段位置MODIFY…AFTER
ALTER和Modify的区别。
alter 是针对表整体,modify是对表中的某一项字段进行修改。
例如alter table table_name和modify id int;
UPDATE(修改表格中原有的数据)
UPDATE table_name
SET column1=value1, column2=value2
WHERE condition
INSERT(向表格中添加新行)
INSERT INTO table_name(column1, column2....)
VALUE(value1, vaule2......),
(value1, vaule2......),
(value1, vaule2......),
.........................
- where过滤from所指定的数据源,但对于group by所产生的分组无效;
having过滤分组,它依附于group by存在。
SQL语句的语法顺序是:
SELECT[DISTINCT]
FROM
WHERE
GROUP BY
HAVING
UNION
ORDER BY
而执行顺序为:
FROM
WHERE
GROUP BY
HAVING
SELECT
DISTINCT
UNION
ORDER BY
select,join,on,where,group by,with,having,select,distinct,order by,limit
FROM才是SQL语句执行的第一步,并非SELECT。数据库在执行SQL语句的第一步是将数据从硬盘加载到数据缓冲区中,以便对这些数据进行操作。
聚合函数又叫组函数,通常是对表中的数据进行统计和计算,一般结合分组(group by)来使用,用于统计和计算分组数据。
常用的聚合函数:
count(col): 表示求指定列的总行数
max(col): 表示求指定列的最大值
min(col): 表示求指定列的最小值
sum(col): 表示求指定列的和
avg(col): 表示求指定列的平均值
- 数据库常用的关系运算 有三种
1、选择:从二维表中选出符合条件的记录,它是从行的角度对关系进行运算,从关系中挑选出指定的元组组成新关系的运算
2、投影:从二维表中选出所需要的列,它是从列的角度对关系进行运算:从关系中挑选出指定的属性组成新关系的运算
3、连接:同时涉及到两个二维表的运算,它是将两个关系在给定的属性上满足一定条件的记录连接起来 从而得到一个新的关系
并:属性不变,元组可能增加(集合相等时不增加)
交:属性不变,元组可能减少(集合相等时不减少)
笛卡尔积:属性增加,元组可能增加(只有1个元组时不增加)
投影:属性可能减少(全投影时不减少),元组可能减少(投影后无重复项时不减少)
- 创建视图语句:create view 视图名 as select * from 表名 where 条件
视图设计的几种方法:
1、自顶向下。先全局框架,然后逐步细化
2、自底向上。先局部概念结构,再集成为全局结构
3、由里向外。先核心结构,再向外扩张
4、混合策略。1与2相结合,先自顶向下设计一个概念结构的框架,再自底向上为框架设计局部概念结构
(1)若视图的字段是来自字段表达式或常数,则不允许对此视图执行INSERT、UPDATE操作,允许执行DELETE操作
(2)若视图的字段是来自库函数,则此视图不允许更新
(3)若视图的定义中有GROUP BY子句或聚集函数时,则此视图不允许更新
(4)若视图的定义中有DISTINCT任选项,则此视图不允许更新
(5)若视图的定义中有嵌套查询,并且嵌套查询的FROM子句中涉及的表也是导出该视图的基表,则此视图不允许更新
(6)若视图是由两个以上的基表导出的,此视图不允许更新
(7)一个不允许更新的视图上定义的视图也不允许更新
(8)由一个基表定义的视图,只含有基表的主键或候补键,并且视图中没有用表达式或函数定义的属性,才允许更新
- 数据库物理设计:
1)确定物理结构:存取方法和存储结构;
2)物理结构评价。
- 执行以下SQL,(
JACKSON
和DAVID
)会被查询出来
Select firstname from stafflist
where firstname like'_A%'
_ 总是匹配一个字符,不能多也不能少,也就是必须也只能匹配上一个字符。
% 可以匹配任意多个字符,也可以是0
case
when *** then
when ** then
end
unique:唯一约束,保证某列的每行必须有唯一的值
primary:主键约束,NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
foreign:外键约束,保证一个表中的数据匹配另一个表中的值的参照完整性
not null:非空约束,指示某列不能存储 NULL 值
default:默认,规定没有给列赋值时的默认值
check:保证列中的值符合指定的条件
- 窗口函数:
1、over()窗口函数的语法结构
over()函数中包括三个函数:分区partition by 列名、排序order by 列名、指定窗口范围rows between 开始位置 and 结束位置(可用\可以不用)
若over()函数中不使用这三个函数,窗口大小是针对查询产生的所有数据,如果指定了分区,窗口大小是针对每个分区的数据。
1.1 partition by
partition by可理解为group by 分组。over(partition by 列名)搭配分析函数时,分析函数按照每一组每一组的数据进行计算的。
1.2rows between 开始位置 and 结束位置
是指定窗口范围,比如第一行到当前行。而这个范围是随着数据变化的。over(rows between 开始位置 and 结束位置)搭配分析函数时,分析函数按照这个范围进行计算的。
2、常与over()一起使用的分析函数:
2.1、聚合类
avg()、sum()、max()、min()
2.1、排名类
rank() 按照值排序时产生一个自增编号,值相等时会重复,会产生空位(如:1、3、3、6、9)
dense_rank() 按照值排序时产生一个自增编号,值相等时会重复,不会产生空位(如:1、2、2、3、3、4)
row_number() 按照值排序时产生一个自增编号,不会重复(如:1、2、3、4、5、6)
二、数据库特点
-
文件系统存在以下缺点: 数据共享性差,冗余度大; 数据独立性差
数据库系统实现整体结构化,这是数据库的主要特征之一,也是数据库系统与文件系统的本质区别。 -
一个表的 主键 只能有一个,但是可以包含多个属性,如联合主键,而唯一索引可以建多个。
主键可以作为其它表的外键。
主键不可为null,唯一索引可以多个数据为null。 -
系统数据库是由 SQL Server内部创建和提供的一组数据库。其中最主要的数据库有 4个。它们分别是Master、Msdb、Model和Tempdb。
① Master数据库:记录了Sqlserver所有的服务器级系统信息,所有的注册帐户和密码,以及所有的系统设置信息,还记录了所有用户定义数据库的存储位置和初始化信息。
②Msdb数据库:由 Enterprise Manager和Agent使用,记录着任务计划信息、事件处理信息、数据备份及恢复信息、警告及异常信息。
主要被sqlserver agent用来进行复制、作业调度以及管理报警等活动。该数据库常被用来通过调度任务排除故障。
③Model数据库:是用户建立新数据库的模板,它包含了将复制到每个用户数据库中去的系统表。每当创建数据库的语句create database执行时,服务器总是通过复制model数据库来建立新数据库的前面部分,新数据库的后面部分被初始化成空白的数据页,以供用户存放数据。
④tempdb数据库:记录了所有的临时表、临时数据和临时创建的存储过程。Tempdb数据库是一个全局资源,没有专门的权限限制,允许所有可以连上Sqlserver服务器的用户使用。
在Tempdb数据库存放的所有数据信息都是临时的。每当连接断开时,所有的临时表和临时存储过程都将自动丢弃。每次系统启动时Sqlserver都会根据Model数据库重新创建Tempdb数据库。 -
关系规范化中的插入操作异常是指应该插入的数据未被插入,删除异常是不该删除的被删除。
-
DATEADD() 函数在日期中添加或减去指定的时间间隔。
语法
DATEADD(datepart,number,date)
datapart参数的取值范围是{yy/yyyy,qq/q,mm/m,dy/y,dd/d,wk/ww,dw/w,hh,mi/n,ss/s,ms,mcs,ns}
number 是您希望添加的间隔数
date 参数是合法的日期表达式
DATEDIFF(datepart, startdate, enddate) 函数返回两个日期之间的时间。
datediff(dd,RDATE,getdate())=0
表示当天
- 数据库设计通常分为6个阶段
1.需求分析:分析用户的需求,包括数据、功能和性能需求;
2.概念结构设计:主要采用E-R模型进行设计;
3.逻辑结构设计:通过将E-R图转换成表,实现从E-R模型到关系模型的转换;
4.数据库物理设计:主要是为所设计的数据库选择合适的存储结构和存取路径;
5.数据库的实施:包括编程、测试和试运行;
6.数据库运行与维护:系统的运行与数据库的日常维护。
-
码是数据库中的基本概念,所谓码就是能唯一标识实体的属性,他是整个实体集的性质,而不是单个实体的性质,它包括超码,候选码,主码
-
A.主索引是不允许索引关键字中出现重复值的索引。
候选索引同主索引一样,不允许索引关键字中出现重复值,这种索引是主索引的候选者。
因此主索引和候选索引都能保证表记录的唯一性。
B.建立索引是加快查询速度的有效手段,能快速定位到需要查询的内容。
C.一个表只能有一个主索引,只有数据库表才能建立主索引,自由表不能。
表可以有多个候选索引,数据库表和自由表都可以建立候选索引。
D.数据库的索引,在查找的时候,可以快速的找到位置。
对于数据库的插入,一般都是插入在最后的一行,索引不能提高插入的性能。
索引的特点:
大大加快检索数据的速度
通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性
加速表与表之间的连接
查询语句汇总含有分组或者排序的语句时,速度更快
查询的过程中,使用索引,使用优化隐藏器,从而提高系统的性能
索引的不足:
创建和维护索引,比较耗费时间,随着数据量的增大而增大
创建索引,占一定的物理空间(聚簇索引,占用空间会更大)
在对表进行增删改的时候,索引相应的也需要进行动态的更新
1.主索引是候选索引的特例,能唯一标识一条记录,只能由一个字段组成。一个表只能建立一个主索引。
2.候选索引也能唯一标识一条记录,但不一定只由一个字段组成,可以由两个或两个以上字段组成,一个表可以建立多个候选索引。
3.普通索引就没有任何限制了,不能唯一标识一条记录,可以任意建立,数量不限。建立普通索引的主要目的是为了加快查询速度和建立表之间的联系。
4.唯一索引已经淘汰不用了,它的唯一性是指索引项的唯一而不是字段值的唯一。
- 根据模型应用的不同目的,可以将这些数据库模型划分为两大类,它们分别属于两个不同的层次,第一类是概念模型,第二类是逻辑模型和物理模型
第一类概念模型也称信息模型,它是按用户的观点来对数据和信息建模,主要用于数据库设计
第二类中的逻辑模型主要包括层次模型,网状模型,关系模型,面向对象数据模型和对象关数据模型半结构化数据模型等,它是按计算机系统的观点对数据建模,主要用于数据库管理系统的实现
- 层次模型是数据库系统中最早出现的数据模型,层次数据库系统采用层次模型,作为数据的组织方式
层次模型像一颗倒立的树,节点的双亲是唯一的,其一个基本的特点是任何一个给定的记录值,只能按其层次路径查看,没有一个子女记录值,能够脱离双亲记录纸而独立存在 - 在数据库中,把满足以下两个条件的基本层次联系集合称为网状模型:
1.允许一个以上的结点,无双亲,
2.一个结点可以有多于一个的双亲 - 关系模型是最重要的一种数据模型,关系数据库系统采用关系模型作为数据的组织方式
关系模型要求关系必须是规范化的,既要求关系必须满足一定的规范条件,这些规范条件中,最基本的一条就是关系的每个分量必须是一个不可分的数据项,也就是说不允许表中还有表
- 数据库的三级模式结构指数据库系统由外模式、模式和内模式3级构成。
外模式,也称子模式或用户模式,它是数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。
模式也称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。
内模式也称存储模式,是数据物理结构和存储方式的描述。
外模式/模式映像保证了数据库系统中的数据能具有较高的逻辑独立性、
模式/内模式映像保证了数据库系统中的数据具有较高的物理独立性
数据独立性分为两个方面:
1、物理独立性。用户的应用程序和存储在磁盘上数据库的数据是相互独立的,数据怎样在磁盘中存储是DBMS的管理的,用户不需要了解
即数据的物理存储改变了,应用程序不需要改变
2、逻辑独立性。用户的应用程序与数据库中数据的逻辑结构是相互独立的
即数据库中数据的逻辑结构改变时,应用程序不需要改变
逻辑独立性更难实现,因为程序对数据的逻辑结构依赖较大
-
在SQL中删除触发器:DROP TRIGGER
-
关系完备的系统支持:关系数据结构、所有的关系代数操作
-
在数据库中存在多列的情况下,若要删除表中的某一列应该使用SQL语句(
ALTER TABLE tableName DROP COLUMN columnName
)
drop通常针对于表结构来进行操作,比如删除整个表,删除表中的字段,是针对于结构而言的。
而truncate和delete针对的是数据,不会对表的结构产生任何影响
truncate是删除表中的所有数据。
delete可以删除某一行,符合查询条件的某些行。
- 事务四大特性(简称ACID)
1、原子性(Atomicity): 事务是最小的执行单位,不允许分割。要么全部完成,要么均不执行。
2、一致性(Consistency):执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的。
3、隔离性(Isolation):并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的。
4、持久性(Durability):一个事务被提交之后,它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。
5、脏读(Drity Read):某个事务已更新一份数据,另一个事务在此时读取了同一份数据,由于某些原因,前一个RollBack了操作,则后一个事务所读取的数据就会是不正确的。
6、不可重复读(Non-repeatable read):在一个事务的两次查询之中数据不一致,这可能是两次查询过程中间插入了一个事务更新了原有的数据。
7、幻读(Phantom Read):在一个事务的两次查询中数据笔数不一致,例如有一个事务查询了几列(Row)数据,而另一个事务却在此时插入了新的几列数据,先前的事务在接下来的查询中,就会发现有几列数据是它先前所没有的。
事务是一个不可分割的数据库操作序列,也是数据库并发控制的基本单位,其执行的结果必须使数据库从一种一致性状态变到另一种一致性状态。事务是逻辑上的一组操作,要么都执行,要么都不执行。
- 数据库范式:
第一范式:列不可再分
第二范式:非主键属性全部依赖于主键属性
第三范式:非主键属性之间无依赖关系
第四范式:主键属性之间无依赖关系
- 锁
(1)共享锁【S锁】
又称读锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。
(2)排他锁【X锁】
又称写锁。若事务T对数据对象A加上X锁,事务T可以读A也可以修改A,其他事务不能再对A加任何锁,直到T释放A上的锁。这保证了其他事务在T释放A上的锁之前不能再读取和修改A。
两段锁协议:是指每个事务的执行可以分为两个阶段:生长阶段(加锁阶段)和衰退阶段(解锁阶段)。
加锁阶段:在该阶段可以进行加锁操作。在对任何数据进行读操作之前要申请并获得S锁,在进行写操作之前要申请并获得X锁。加锁不成功,则事务进入等待状态,直到加锁成功才继续执行。
解锁阶段:当事务释放了一个封锁以后,事务进入解锁阶段,在该阶段只能进行解锁操作不能再进行加锁操作。
两段封锁法可以这样来实现:事务开始后就处于加锁阶段,一直到执行ROLLBACK和COMMIT之前都是加锁阶段。ROLLBACK和COMMIT使事务进入解锁阶段,即在ROLLBACK和COMMIT模块中DBMS释放所有封锁。
- 故障
1、事务故障是由于程序执行错误而引起事务非预期的、异常终止的故障。它发生在单个事务的局部范围内,实际上就是程序的故障。
事务故障更多的是非预期的,不能由事务程序处理的情况,主要有:
①逻辑上的错误,如运算溢出、死循环、非法操作、地址越界等等;
②违反完整性限制的无效的输入数据;
③违反安全性限制的存取权限;
④资源限定,如为了解除死锁、实施可串化的调度策略等而ABORT一个事务;
⑤用户的控制台命令。
2、系统故障是指系统在运行过程中,由于某种原因,造成系统停止运行,以致事务在执行过程中以非正常的方式终止,致使内存中的信息丢失,而存储在外存上的数据未受影响。
3、介质故障是指外存储设备故障,主要有磁盘损坏,磁头碰撞盘面,突然的强磁场干扰,数据传输部件出错,磁盘控制器出错等。
-
一个关系模型对应一张二维表,每一行记录即为一个元组,任意两个元组值不能完全相同,因为受到主键的限制。通过主键来唯一标识每一条记录。
-
完整性约束有四类:
1) 实体完整性:规定表的每一行在表中是惟一的实体。
2) 域完整性:是指表中的列必须满足某种特定的数据类型约束,其中约束又包括取值范围、精度等规定。
3) 参照完整性:是指两个表的主关键字和外关键字的数据应一致,保证了表之间的数据的一致性,防止了数据丢失或无意义的数据在数据库中扩散。
4) 用户定义的完整性:不同的关系数据库系统根据其应用环境的不同,往往还需要一些特殊的约束条件。用户定义的完整性即是针对某个特定关系数据库的约束条件,它反映某一具体应用必须满足的语义要求。
- 关于查询树的启发式优化规则的代数优化,对关系代数表达式的查询树进行优化,典型的启发式规则有
1.选择运算尽可能早做,在优化策略中这是最重要,最基本的一条,它常常可以使执行节约几个数量级,因为选择运算一般使计算的中间结果大大变小
2.把投影运算和选择运算同时进行。如果有若干的投影和选择运算,并且他们都对同一个关系进行操纵的话,就可以在扫描此关系的同时完成所有的这些运算以避免重复扫描关系。
3.把投影同其前或其后的双目运算结合起来,没有必要为了去掉某些字段而扫描一遍关系
4.把某些选择同在他前面要执行的笛卡儿积结合成一个连接运算,连接特别是等值连接运算要比同样关系上的笛卡儿积省很多时间
5.找出公共子表达式
运算包括:
1.比较运算:>,>=,<,<=,=,<>(或!=);
2.范围查询:BETWEEN...AND;
3.集合查询:IN;
4.空值查询:IS NULL;
5.字符串匹配查询:LIKE;
6.逻辑查询:AND,OR,NOT。
- 数据库设计里,视图(View)可以使得我们为一个或多个数据表定义一个特殊的表现形式,视图在行为上与数据表没啥特别区别,可以使用基本的select,insert,update等命令修改数据,但对于update操作,也有一些限制如下:
1.包含以下关键字的SQL语句: 聚合函数(SUM, MIN. MAX, COUNT等) DISTINCT, GROUP BY, HAVING, UNION或者UNION ALL
2.常量视图
3.SELECT中包含子查询
4.FROM一个不能更新的视图
5.WHERE的子查询引用了FROM中的表
即如果视图的更新不能唯一的有意义的转换成对应基本表的更新,那么视图就无法更新
-
触发器是与表有关的数据库对象,在 insert/update/delete 之前或之后触发并执行触发器中定义的 SQL语句,
SQL server有三种触发器类型:
-
常见的数据模型(现实的数据抽象):概念模型(er图)、逻辑模型(网状、层次、关系、面向对象)、物理模型
1.概念数据模型(Concept Data Model)
--用来描述概念化结构,不依赖DBMS来描述世界。
属于信息模型:实体-联系(ER模型)、扩展实体-联系(EER模型)、IDEF1模型、面向对象模型等。
2.逻辑数据模型(Logical Data Model)
a.用户从数据库中看到的数据模型
b.与DBMS有关。DBMS使用逻辑模型分类
c.关系数据模型最为常用
d.DBMS的实现过程中,概念数据模型表示的数据必须转化为逻辑数据模型
e.也称结构数据模型,需要形式化定义,用于机器数据的模型
3.物理数据模型(Physical Data Model)
--反映数据的存储结构;e.g.--物理快、指针和索引
总结:概念模型用于数据库的设计,逻辑和物理模型用于DBMS的实现。
- DBMS的功能:
(1)数据定义功能。DBMS提供相应数据语言来定义(DDL)数据库结构,它们是刻画数据库框架,并被保存在数据字典中。(最主要功能)
(2)数据存取功能。DBMS提供数据操纵语言(DML),实现对数据库数据的基本存取操作:检索,插入,修改和删除。
(3)数据库运行管理功能。DBMS提供数据控制功能,即是数据的安全性、完整性和并发控制等对数据库运行进行有效地控制和管理,以确保数据正确有效。
(4)数据库的建立和维护功能。包括数据库初始数据的装入,数据库的转储、恢复、重组织,系统性能监视、分析等功能。
(5)数据库的传输。DBMS提供处理数据的传输,实现用户程序与DBMS之间的通信,通常与操作系统协调完成。
最主要的功能是定义数据库
- 数据模型是客观事物及其联系的数据描述。数据模型采用了形式化描述方法,表示了数据和数据之间的联系,数据库类型是根据数据模型来划分的。
存储的结构是划分数据库类型的主要依据。当今的互联网中,通常把数据库分为两类,即关系型数据库和非关系型数据库。
一、关系型数据库,指采用了关系模型来组织数据的数据库,而关系模型是由二维表及其联系组成的数据组织。
二、非关系型数据库,也称为NOSQL(Not Only SQL),作为关系型数据库的一个补充,能在特定场景和特点问题下发挥高效率和高性能。常见的非关系型数据库类型有键值(Key-Value)存储数据库和面向文档数据库(Document-oriented)。
键值存储数据库类似hash,通过key做添加、删除、查询,性能高,优势在于简单、易部署、高并发。
一、优点:
1、易于维护:都是使用表结构,格式一致;
2、使用方便:SQL语言通用,可用于复杂查询;
3、复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询。
二、缺点:
1、读写性能比较差,尤其是海量数据的高效率读写;
2、固定的表结构,灵活度稍欠;
3、高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈。
-
数据库保护又叫做数据库控制,是通过四方面实现的,即安全性控制,完整性控制,并发性控制和数据恢复。
-
需求模型:数据流程图
概念模型: E-R图
逻辑模型:UML类图 -
TOKUDB
TokuDB优点:
高压缩比,默认使用zlib进行压缩,尤其是对字符串(varchar,text等)类型有非常高的压缩比,比较适合存储日志、原始数据等。官方宣称可以达到1:12。
在线添加索引,不影响读写操作
HCADER 特性,支持在线字段增加、删除、扩展、重命名操作,(瞬间或秒级完成)
支持完整的ACID特性和事务机制
非常快的写入性能, Fractal-tree在事务实现上有优势,无undo log,官方称至少比innodb高9倍。
支持show processlist 进度查看
数据量可以扩展到几个TB;
不会产生索引碎片;
支持hot column addition,hot indexing,mvcc
TokuDB缺点:
不支持外键(foreign key)功能,如果您的表有外键,切换到 TokuDB引擎后,此约束将被忽略。
TokuDB 不适大量读取的场景,因为压缩解压缩的原因。CPU占用会高2-3倍,但由于压缩后空间小,IO开销低,平均响应时间大概是2倍左右。
online ddl 对text,blob等类型的字段不适用
没有完善的热备工具,只能通过mysqldump进行逻辑备份
适用场景:
访问频率不高的数据或历史数据归档
数据表非常大并且时不时还需要进行DDL操作