1. 数据库范式
目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。
2. mysql有关权限的表
user权限表:记录允许连接到服务器的用户帐号信息,里面的权限是全局级的。
db权限表:记录各个帐号在各个数据库上的操作权限。
table_priv权限表:记录数据表级的操作权限。
columns_priv权限表:记录数据列级的操作权限。
host权限表:配合db权限表对给定主机上数据库级操作权限作更细致的控制。这个权限表不受GRANT和REVOKE语句的影响。
事务的四大特性(ACID)
原子性:事务是最小的执行单位,不允许分割。
事务的原子性确保动作要么全部完成,要么完全不起作用;
一致性:执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的;
隔离性:并发访问数据库时,一个用户的事务不被其他事务所干扰,
各并发事务之间数据库是独立的;
持久性:一个事务被提交之后。它对数据库中数据的改变是持久的, 即使数据库发生故障也不应该对其有任何影响。
SQL语句主要分为哪几类
数据定义语言DDL(Data Ddefinition Language)CREATE,DROP,ALTER
数据查询语言DQL(Data Query Language)SELECT
数据操纵语言DML(Data Manipulation Language)INSERT,UPDATE,DELETE
数据控制功能DCL(Data Control Language)GRANT,REVOKE,COMMIT,ROLLBACK
Grant(GRANT — 赋予一个用户,一个组或所有用户访问权限 // REVOKE - 回收权限
Grant <权限> on 表名[(列名)] to 用户 With grant option
或 GRANT <权限> ON <数据对象> FROM <数据库用户> )
MySQL分库分表的目的
分库分表就是为了 解决由于数据量过大而导致数据库性能降低的问题, 将原来独立的数据库拆分成若干数据库组成,将数据大表拆分成若干数据表组成, 使得单一数据库、单一数据表的数据量变小,从而达到提升数据库性能的目的。
死锁
死锁是指两个或多个事务在同一资源上相互占用,并请求锁定对方的资源,从而导致恶性循环的现象。
解决死锁的方法:
- 如果不同程序会并发存取多个表, 尽量约定以相同的顺序访问表,可以大大降低死锁机会。
- 在同一个事务中,尽可能做到一次锁定所需要的所有资源,减少死锁产生概率;
- 对于非常容易产生死锁的业务部分,可以尝试使用升级锁定颗粒度,通过表级锁定来减少死锁产生的概率;
脏读 幻读 不可重复读
脏读(Drity Read):某个事务已更新一份数据,另一个事务在此时读取了同一份数据, 由于某些原因,前一个RollBack了操作,则后一个事务所读取的数据就会是不正确的;脏读是指在一个事务处理过程里读取了另一个未提交的事务中的数据。
不可重复读(Non-repeatable read):在一个事务的两次查询之中数据不一致, 这可能是两次查询过程中间插入了一个事务更新的原有的数据。
幻读(Phantom Read):在一个事务的两次查询中数据笔数不一致, 例如有一个事务查询了几列(Row)数据, 而另一个事务却在此时插入了新的几列数据,先前的事务在接下来的查询中, 就会发现有几列数据是它先前所没有的。
四种隔离级别:
① Serializable (串行化):可避免脏读、不可重复读、幻读的发生。
② Repeatable read (可重复读):可避免脏读、不可重复读的发生。
③ Read committed (读已提交):可避免脏读的发生。
④ Read uncommitted (读未提交):最低级别,任何情况都无法保证。
视图
视图的列可以来自不同的表,是表的抽象和在逻辑意义上建立的新关系。
视图是由基本表(实表)产生的表(虚表)。视图的建立和删除不影响基本表。
视图是从一个或几个基本表(或视图)导出的表。
它与基本表不同,是一个虚表。数据库只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。
对视图内容的更新(添加,删除和修改)直接影响基本表。
当视图来自多个基本表时,不允许添加和删除数据。
视图的操作包括创建视图,查看视图,删除视图和修改视图。
=============》
--创建视图 create view View_EdsProd as select A.*,b.Code bcode,B.Name bName from Tab_A A left join Tab_B B ON (A.Mid=B.Mid) where A.Mid>1
SQL的生命周期
- 应用服务器与数据库服务器建立一个连接
- 数据库进程拿到请求sql
- 解析并生成执行计划,执行
- 读取数据到内存并进行逻辑处理
- 通过步骤一的连接,发送结果到客户端
- 关掉连接,释放资源