先简单了解一下mysql
存储引擎的区别
innoDB、MyIsam、Merory
关系型数据库与NeSQL(非关系型)的区别
主流的关系型数据库:Oracle、MySQL
主流的非关系型数据库:Redis
Mysql和Redis的关系不是替代关系,而是在数据量非常大、数据库并发操作非常频繁的情况下,可以通过搭建Reis缓存服务器来分担Mysql的压力
视图、存储过程、存储函数、触发器
SQL语句优化和数据库优化的思路
数据库的备份
冷备份指的是停机(关闭数据库)后备份,此时服务不可用
热备份指的是不停机备份,此时服务可用
通常使用varchar的长度不会超过5000,否则就会使用text
Mysql(重点)
数据类型
1.float和double区别:
float单精度、double双精度
float4字节,double8字节
double精度比float更高
但是float和double都不是绝对精确地小数
2.char和varchar的区别:
char支持的长度是0~255
vachar支持的长度是0~65535
char的长度是定长的,varchar会根据填入的数据长度自动调整
char是以空间换时间,varchar是时间换空间
varchar需要进行动态的空间计算,性能没有char好,但是varchar更节约存储空间
3.char和varchar中()里的长度是字节数还是字符数
mysql5.0版本之前是字节、之后改为字符
假设字符集是UTF-8,一个中文三个字节那么char(32)只能存储10个中文字符
4.用什么类型存储金额
用定点数decimall(a,b) a表示一共有多少位,b表示小数位有多少位
使用长整型(longint)存储到最小单位
5.超长(5000字节)的文本博客文档怎么存储
严禁使用varchar存储长文本,改用blob或者text
并且应该把超长文本字段拆分,独立建表,与主表主外键关联,防止影响主表的查询效率
6.二进制文件(图片、视频、音频)怎么存储
MySQL数据库是可以存储二进制数据的,使用binary但是性能比较差
正确做法:二进制文件直接存放在磁盘中,然后在数据库创建字段来存储文件地址(绝对路径)
7.Mysql的整型支持无符号,通过关键词UNSIGNED
age tinyint ------age字段取值范围(-128~127)
age tinyint unsigned ---------age字段范围是(0~255)
约束
1.非空约束 not null
2.检查约束 check(MySQL不支持)
3.唯一约束 unique
4.主键约束 primary key
5.外键约束 foreign key
SQL的分类,语法整理(DDL、DML、DQL、DCL)
数据定义语言DDL(Data Ddefinition Language)
CREATE,DROP,ALTER、show
数据操纵语言DML(Data Manipulation Language)executeUpdate 返回int
INSERT,UPDATE,DELETE
数据查询语言DQL(Data Query Languagejava中executedQury返回resultSet
SELECT,FROM,WHERE,GROUP BY,ORDER BY,having,inner join等
数据控制语言DCL(Data Control Language)
GRANT,REVOKE,COMMIT,ROLLBACK
grant和revoke是授予和回收给用户的权限
grant 权限 on 数据库对象 to 用户 identified by 密码
关系类型和三范式、反三范式
数据库表关系一对一、一对多、多对多
三范式目的:以时间换空间(增加关系来减少冗余数据)
反三范式目的:以空间换时间(允许适量的冗余数据,减少关系)
第一范式:列属性不能再拆分
第二范式:在第一范式基础上,属性完全依赖于主键(消除部分子函数依赖)
第三范式:属性不依赖于其他非主属性(消除传递依赖)
事物的四大特性和四种隔离级别
事务的四大特性
1. 原子性(Atomicity)
事务包含的所有数据库操作要么全部成功,要不全部失败回滚。
2. 一致性(Consistency)
一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。一致性规定事务提交前后只存在两个状态,提交前的状态和提交后的状态,绝对不会出现中间的状态。最典型的例子就是银行转账,A和B之间互相转账,账面加起来总和5000元,无论A和B之间怎么转,转几次,成功与否,事务结束后A和B账面总和还是5000元。
3. 隔离性(Isolation)
隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。即要达到这么一种效果:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执行。
4. 持久性(Durability)
持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。
四种隔离级别
1. 读未提交(Read uncommitted)
所有事务都可以看到其他未提交事务的执行结果。本隔离级别是最低的隔离级别,虽然拥有超高的并发处理能力及很低的系统开销,但很少用于实际应用。因为采用这种隔离级别只能防止更新丢失问题(这个问题现代关系型数据库已经不会发生),不能解决脏读,不可重复读及幻读问题。
2. 读已提交(Read committed)
这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)。它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。这种隔离级别可以防止脏读问题,但会出现不可重复读及幻读问题。
3. 可重复读(Repeatable read)
这是MySQL的默认事务隔离级别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。这种隔离级别可以防止除幻读外的其他问题。
4. 串行化(Serializable )
这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读、第二类更新丢失问题。在这个级别,可以解决上面提到的所有并发问题,但可能导致大量的超时现象和锁竞争,通常数据库不会用这个隔离级别,我们需要其他的机制来解决这些问题:乐观锁和悲观锁。
锁的种类
表锁、行锁
死锁、如何防止死锁
索引
连表查询