mysql概念知识
1. 数据库的三范式:第一范式,一张表中每一列都是不可拆分的原子数据,如地址信息,将可以拆分的数据存到另一张表;第二 范式,每一列内容与主键相关,存在联合主键,则存在部分相关,将当前关联数据存到另一张表;第三范式,表中不能存在不 依赖主属性的列。第三范式一定属于第二范式,第二范式一定属于第三范式。
2.char和varchar:char存储容量较小,varchar容量大。char是固定长度,存入字符长度小于限定长度补空格,varchar是可变长 度,小于最大长度正常存入。
3.float,double和decimal:float是单精度浮点型,double是双精度浮点型,decimal是定点型;float和double不指定精度时会按 实际精度保存,decimal会按整数位10,小数位未0表示;
4. innoDb存储引擎的b+tree将数据存放在叶子节点,MyIsam的b+tree叶子节点存放数据的地址。
5. ACID:
原子性(Atomicity):事务中的所有操作是一个原子操作,要么全部成功,要么全部失败。
一致性(Consistency):数据库当前状态和事务执行后的状态一直。
隔离性(Isolation):事务之间互不干扰。
持久性(Durability):事务一旦提交就是永久性的,会将结果写入磁盘。
6. 事务隔离:主要作用于多个事务修改同一张表
READ_UNCOMMITTED(读未提交):事务A正在执行修改数据,事务B可以读到事务A未提交的数据。如果事务A之完成后 回滚,会导致事务b读出来的是脏数据。(脏读)
READ_COMMITED(读提交):事务A正在执行,还未提交的情况下,事务B只能读到事务A未修改之前的数据。如果事务B 先执行一次查询,这时事务A将更改提交,事务B再次执行查询,发生两次同样的查询,结果 不一致。(不可重复读)。
REPEATABLE_READ(可重复读):在事务a开始执行的时候获取数据库当前快照,第二次查询通过数据库快照查询,保证 两次查询结果一致(数据库的默认级别)。当事务A更新表中所有数据时,事务b向数 据库中插入一条数据,导致事务A执行完成后存在未更新数据(幻读)。
SERLALIZABLE(序列化):序列化是通过对查询语句加入共享锁实现(亲测并非事务阻塞,查看网上资料发现都在说事务 顺序执行)。可以避免以上所有的问题。
7.视图:
视图就是一个select语句查询结果集的虚拟表。不存储具体数据。
视图的优点:可以方便查询,减少sql的复杂度;更加安全,可以将数据库授权命令定位到行列级别。
视图中的修改:视图中只存一张表的数据,对视图中数据可以进行增删改操作,且更改会作用到原表。
8. 存储过程:
存储过程是在大型数据库系统中,一组完成特定功能的sql语句集,一次编译后不需要再次编译。
扩展:jdbc多次执行也不需要编译,他们之前有什么关联呢?jdbc是通过将sql发送给数据库获得编译后的结果,之后的调用直 接发送编译后的语句。