SQL(struct query language结构化查询言语)
功能:数据查询、数据界说、数据操作、数据操控
A8站源码交易平台
函数依靠:
彻底函数依靠:假定R(U)是特点全集上的一个联系形式,X和Y是U的子集。假如X->Y,而且关于任何一个X的真子集X',有X'->Y都不树立,则称Y彻底依靠于X,记作X----F---> Y
部分函数依靠:
传递函数依靠:X->Z ,Z->Y 可是 Z->X 不树立,则Y传递依靠于X.
范式:
榜首范式1NF:联系中的每个特点都是不行再分的最小数据单位。即特点不行再分。
第二范式2NF:满意榜首范式的前提下,且每个非主特点都彻底依靠于R的码(任何非主特点都不部分依靠于码)。
第三范式3NF:假如联系形式R∈2NF,且每个非主特点都不传递依靠于R的码。
数据库业务的四个特性(ACID):
原子性:(Atomicity):业务所包括的一切操作要么悉数成功,要么失利悉数回滚。
一致性:(Consistency)业务有必要使数据库从一个一致性状况转换为另一个一致性状况。也便是说一个业务履行前和履行后都有必要处于一致性状况。拿转账来说,假定用户A和用户B两者的钱加起来一共是5000,那么不论A和B之间怎么转账,转几回账,业务完毕后两个用户的钱相加起来应该还得是5000,这便是业务的一致性。
阻隔型:(Isolation):一个业务所做的修正在终究提交曾经,对其他业务是可不见的。当多个用户并发拜访数据库时,比方操作同一张表时,数据库为每一个用户敞开的业务,不能被其他业务的操作所搅扰,多个并发业务之间要彼此阻隔。
持久性:(Durability):持久性是指一个业务一旦被提交了,那么对数据库中的数据的改动便是永久性的,即便是在数据库体系遇到毛病的情况下也不会丢掉提交业务的操作。
阻隔等级:
Read Uncommitted(读取未提交[增加中文释义]内容):最低的阻隔等级,什么都不需求做,一个业务能够读到另一个业务未提交的成果。一切的并发业务问题都会发作。
Read Committed(读取提交内容):只要在业务提交后,其更新成果才会被其他业务看见。能够处理脏读问题。
Repeated Read(可重复读):在一个业务中,关于同一份数据的读取成果总是相同的,不管是否有其他业务对这份数据进行操作,以及这个业务是否提交。能够处理脏读、不行重复读。
Serialization(可串行化):业务串行化履行,阻隔等级最高,献身了体系的并发性。能够处理并发业务的一切问题。
并发引起的问题:
丢掉更新(lost update):业务T1,T2对同一数据进行更新。T2在T1将更新数据写回前,读取数据,则会导致T2丢掉了T1对数据的更新。并发写引起的抵触成为 写-写抵触(write-write conflict)
读脏数据(dirty read):业务T2 读取业务T1更新后的某一数据,这以后T1由于某种原因被吊销,T1更新后的数据康复原值,此刻T2读取的数据与数据库中数据不一致。读脏数据是 一个业务读取另一个业务没有提交的数据引起的,也称 读-写抵触。
读值不行重现(unrepeatable read):业务T1两次读取同一数据,在两次读值期间,业务T2履行更新操作,使得T1无法重现前一次的读取成果。也是由于 读 -写抵触引起的。
封闭:
排它锁(写锁 X锁):业务T对某数据目标 R加上X锁,只答应T读取和修正R,在T免除对数据目标R的锁之前,不答应其他业务再对数据目标增加任何类型的锁。具有排他性:exclusive
同享锁(读锁 S锁):业务T对某数据目标 R加上S锁,只答应T读取R但不答应修正R,其他业务能够对R再加S锁,但在R上的一切S锁免除之前不答应其他业务再对R加X锁。
封闭协议: A8站源码交易平台
一级封闭协议:处理丢掉更新问题
二级封闭协议:处理读脏数据问题
三级封闭协议:处理读值不行重现问题
封闭带来的问题:
活锁:体系分配导致某个业务永久处于等候状况,得不到封闭的时机,处理办法:先来先服务,改动优先级
死锁:
死锁的防备:
Sql言语必知必会
判别空或非空,一般用 IS NULL 和 IS NOT NULL 而 ==NULL 、!=NULL 等 成果永久回来0行,而且不会报语法错误。由于NULL表明 Unknow 所以进行算术运算符永久回来false.
group by 子句中,挑选列表中的任一非聚合表达式内的一切列都应包括在group by类表中,或许group by 表达式有必要与挑选列表表达式彻底匹配。
where 子句与having 子句的差异在于 效果目标不一样,where 子句效果于根本表或视图,从中挑选满意条件的元组。having短语效果于分组,从中挑选满意条件的元组。
索引(只评论MySql数据库中):
集合索引:(主键索引)将数据行与相邻的键值(索引)严密的存储在一起,找到键值(索引)也就找到了数据。
由于无法把数据行存储在两个方位,所以一个表只能有一个集合索引。
非集合索引:(仅有索引、全文索引、一般索引)将数据存储与索引分隔存储,索引的叶子节点一般只存了主键。需求二次查找。
各自长处:
集合索引由于把相关数据存储在一起,削减IO操作
运用集合索引的查询功率要比非集合索引的功率要高,可是假如需求频频去改动集合索引的值,写入功能并不高,由于需求移动对应数据的物理方位。
怎么处理非集合索引的二次查询问题
复合索引(掩盖索引)
树立两列以上的索引,即可查询复合索引里的列的数据而不需求进行回表二次查询,如index(col1, col2),履行下面的句子
MySQL里主键便是集合索引
要注意运用复合索引需求满意最左面索引的准则,也便是查询的时分假如where条件里边没有最左面的一到多列,索引就不会起效果。