mysql数据库日常归纳

1.什么是事务
简单来说事务是数据库并发控制的基本单位,是用户定义的一个操作序列。

2.事务的4个特性(ACID)
A:原子性。一个事务上的所有操作,要么全部执行,要么全部不执行,他不会在中途结束,事务执行过程中发生错误,数据会被恢复到事务执行之前的状态,就好像这个事务没有发生过一样。
C:一致性。无论是在事务执行前,还是事务执行完成以后,数据库的完整性都不会被破坏,这要求我们在写入数据时,要完全符合预设约束,触发器和级联滚动。
I:隔离性,数据库允许多个事务 并发对数据进行读写操作,隔离性则保证了多个事务并发执行过程中不会由于交叉操作导致数据错误。
D:永久性,在事务执行完成后,对数据的修改是永久的。

3.事务隔离的级别
(1)读未提交
事务隔离的最低级别,允许读取未提交的数据源。 会导致发生脏读,可重复读,幻读。
(2)读提交
大多数数据库的默认级别,但是不是mysql 的默认级别,
允许对提交的数据进行读取。仍有幻读和不可重复读的风险。

(3)可重复读
mysql的默认隔离级别
对同一字段的多次读取结果都是一样的,可以防止脏读和不可重复读,但是仍然有可能出现幻读。
(4)串行化
事务隔离的最高级别
所有事物依次逐个执行,这样事务之间就完全不可能产生干扰,防止了脏读,幻读,不可重复读。

4什么是脏读、幻读、不可重复读。
脏读:读取到了事务回滚前的数据,事务B执行中对数据X进行了修改,但是未提交,此时事务A也读取了数据X。然后事务B回滚。事务A就产生了脏读。

不可重复读:在一个事务的两次查询中数据不一致,可能是在两次查询的间隔中插入了一个事务B对数据进行了修改。

幻读:一个事务的两次查询中,笔数不一致,可能是在一个事务A查询后,另一个事务B插入了新的数据,导致事务A在之后的查询中发现有一些数据的之前没有的,就好像发生幻觉一样。

5.innoDB和MyISAM引擎的区别
(1)innodb支持事务,外键,采用行锁(默认)和表锁,innodb不保存表的具体行数,myisam在没有使用WHERE的情况下设置了一个变量保存表的行数。
(2)delete表时,innodb逐行删除,myisam直接删除整张表然后重建。
(3)innodb的存储文件为.frm(用于存储表格定义)、ibd(用于存储数据文件)。myisam的存储文件为frm(用于存储表格定义)、MYD(用于存储数据文件)、MYI(用于存放索引文件)。
(4)大容量的数据集时趋向于选择Innodb。因为它支持事务处理和故障的恢复。Innodb可以利用数据日志来进行数据的恢复。主键的查询在Innodb也是比较快的。大批量的插入语句时(这里是INSERT语句)在MyIASM引擎中执行的比较的快。

6.什么是索引
答:索引是对数据库中一列或者多列的值进行排序的结构,是帮助mysql高效获得数据的数据结构。

7.说一说drop、delete和truncate的区别
(1)drop操作会删除整张表,而且操作不会 计入日志,也就意味着删除之后数据无法恢复。
(2)delete和truncate都只是删除表中的数据,delete的删除操作会计入日志,删除后数据可以恢复,truncate删除操作不会计入日志,数据无法恢复。

8.mysql 的几种连接方式
内连接(inner join)结合两张表的记录返回与关联字段相符的记录,也就是返回两张表的交集。
左连接(left join)返回左表所有数据和右表的有关数据。
右连接 与左连接相反

9.表锁和行锁
(1)表锁也分为共享锁(读锁)和排它锁(写锁)
共享锁:事务A多数据X加上共享锁后,其他事务只能队数据X添加共享锁,不能添加其他锁,添加了共享锁的事务只能对数据进行读操作,但是不能修改数据。
拍他锁:事务A对数据X添加排他锁后,其他事务不能给数据X添加任何锁,添加了排他锁的事务可以对数据进行读写操作。

10.一张表有ID自增主键,当insert了17条记录之后,删除了第15,16,17条记录,再把mysql重启,再insert一条记录,这条记录的ID是18还是15 ?

innodb引擎:如果不重启数据库ID为18,重启数据库后ID为15,因为innodb引擎会把自增主键的最大ID存放在内存中,重启数据库后,数据丢失。
myisam引擎:ID为18,因为myisam引擎会把最大自增主键的ID放在数据文件里。

11.乐观锁和悲观锁
乐观锁:正如其名,它在操作数据库的时候,想法很乐观,认为本次操作不会发生冲突,所以在操作数据时不会加锁。到最后更新数据时在判断刚才是否产生冲突。
具体实现:在表中的数据进行操作时给数据表加一个version字段,每操作一次version的值加一。对数据进行操作时,先判断此刻的version值与刚刚查询出的version值是否相等,如果相等,就证明在这段期间没有其它程序对数据操作,可以执行更新,反之,则不更新。

悲观锁:总是假设最坏的情况,认为这次操作肯定会产生冲突,所以会给没个操作加锁,别人只能等待,等我释放锁以后,别人才能操作,行锁,表锁,读锁,写锁都是这种机制。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值