数据库
Alan_Xiang
在读学生
展开
-
数据库事务的隔离级别
由于事务的ACID特性,即Atomicity、Consistency、Isolation、Durability(原子性、一致性、隔离性、持续性),那么对于同时运行的多个事务,当这些事务访问数据库中相同的数据时,如果没有采取必要的隔离机制,就会导致各种并发问题:脏读:又称无效数据的读出,是指在数据库访问中,事务T1将某一值修改,然后事务T2读取该值,此后T1因为某种原因撤销对该值的修改,这就导致了T原创 2016-12-03 12:28:00 · 1304 阅读 · 0 评论 -
数据库索引是怎样工作的?
我们通过一个简单的例子来开始教程,解释为什么我们需要数据库索引。假设我们有一个数据库表 Employee, 这个表有三个字段(列)分别是 Employee_Name、Employee_Age 和Employee_Address。假设表Employee 有上千行数据。现在假设我们要从这个表中查找出所有名字是‘Jesus’的雇员信息。我们决定使用下面的查询语句:SELECT * FRO翻译 2017-01-10 09:38:07 · 1365 阅读 · 0 评论 -
SQL中的内连接,外连接,全连接和交叉连接
同时涉及两个或两个以上的表的查询,称为连接查询。 现在有两张表,student表记录学生信息: sc表记录成绩: sc表中没有对应学生的记录,说明该学生没有选这门课。内连接 内连接又称为普通链接或者自然连接,分为等值连接(连接运算符为“=”)和非等值连接(连接运算符为“!=”、“>=”、“<=”,“>”、“<”),例如,使用等值连接查询选了课的学生原创 2017-01-10 12:01:40 · 1540 阅读 · 0 评论 -
数据库三范式
第一范式1NF:数据库表的每一列都不可再分。不满足1NF的情况:第二范式2NF:在1NF的基础上,不存在部分依赖,即要求实体的属性完全依赖于主键。满足1NF不满足2NF的情况:(主键应该是联合主键<学号,课名>,但是存在属性姓名,仅依赖于学号)第三范式3NF:在2NF的基础上,不存在传递依赖,即任何非主属性不依赖于其他非主属性。 满足2NF不满足3NF的情况:(改进了上面的情况使其满足2NF,但是原创 2017-01-16 20:20:40 · 806 阅读 · 0 评论 -
使用redis部署集群
我们现在在一台服务器上,通过6个端口来模拟一下redis集群部署,要搭建出的模型为:三个主数据库7001,7002,7003,它们各有一个从数据库7004,7005,7006。首先创建目录/usr/local/redis-cluster,然后在其中创建6个目录7001-7006:然后先复制一份redis配置文件redis.conf到7001目录下,执行vi命令编辑redis.conf,需要修改的地方原创 2017-02-24 12:12:06 · 735 阅读 · 0 评论 -
悲观锁,乐观锁,行锁,表锁,页锁,共享锁,排他锁
悲观锁: 顾名思义,很悲观,就是每次拿数据的时候都认为别的线程会修改数据,所以在每次拿的时候都会给数据上锁。上锁之后,当别的线程想要拿数据时,就会阻塞,直到给数据上锁的线程将事务提交或者回滚。传统的关系型数据库里就用到了很多这种锁机制,比如行锁,表锁,共享锁,排他锁等,都是在做操作之前先上锁。 行锁: 下面演示行锁,打开两个mysql命令行界面,两个线程分别执行如下操作:(左边先执行)原创 2017-02-14 21:32:22 · 13072 阅读 · 4 评论 -
缓存穿透,缓存失效(缓存雪崩)和缓存并发
缓存穿透: 通常缓存都是根据key去查找value,如果缓存中不存在,则去DB中查找,如果查找到了则将此key->value写入缓存。但是,对于某些一直不存在的数据,每次都无法在缓存中查找到,所以每次都要去DB中查找,DB中也找不到所以没法写入缓存,如此往复,便失去了缓存的意义。解决方法:对到DB中查询为空的情况也进行缓存,但是这个数据的缓存过期时间需要设置得短一点;将所有可能存在的数据根据key原创 2018-03-28 12:14:51 · 1783 阅读 · 0 评论