数据库相关面试

  1. MySQL

    1. char和varchar的区别

      1. char是一种固定长度的类型,例如当设置为char(20)的时候,固定长度为20,存储时长度不够20的,也按照20的长度。varchar是一种可变长度的类型,例如设置为varchar(20)的时候,存储的长度是5,那么长度就为5。
    2. 存储引擎InnoDB和MyISAM的区别

      1. InnoDB支持事务,MyISAM不支持。
      2. InnoDB支持外键,MyISAM不支持。
      3. MyISAM支持全文类型索引,而InnoDB不支持全文索引(5.7以后支持)。
      4. InnoDB中不保存表的总行数,select count(*) from table时,InnoDB需要扫描整个表计算有多少行,但MyISAM只需简单读出保存好的总行数即可。注:当count(*)语句包含where条件时MyISAM也需扫描整个表。
      5. InnoDB支持表、行(默认)级锁,而MyISAM支持表级锁
    3. 索引

      1. 索引类型:
        1. 普通索引(index):数据可以重复,没有任何限制。
        2. 唯一索引(unique):要求索引列的值必须唯一,但允许有空值;如果是组合索引,那么列值的组合必须唯一。
        3. 主键索引(primary key):是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值,一般是在创建表的同时创建主键索引。
        4. 复合索引:将多个列组合在一起创建索引,可以覆盖多个列。
    4. MySQL的事务特性和隔离级别

      1. 事务的特性(ACID):
        1. 原子性(Atomicity):在同一事务中,所有的操作,要么都成功,要么都失败。
        2. 一致性(Consistency):事务的前后,数据的状态是一致的,不会发生改变。例如张三转给李四100元,张三账户扣了100元,那么李四的账户就会收到100元。这个数据的前后状态没有改变。
        3. 隔离性(Isolation):事务和事务之间是相互隔离,互不干扰的。
        4. 持久性(Durability):指一个事务一旦被提交,它对数据库中数据的改变就是永久性的。
      2. 数据的隔离级别:
        1. Read uncommitted:读未提交,能够读取到没有被提交的数据,所以这个级别的隔离机制无法解决脏读、不可重复读、幻读中的任何一种。
        2. Read committed:读已提交,能够读到那些已经提交的数据,所以能够防止脏读,但是无法限制不可重复读和幻读
        3. Repeatable read:重复读,通过加锁机制,禁止修改,所以能够防止不可重复读,但无法限制幻读。
        4. Serializable(可串行化):强制事务串行执行。
        5. mysql默认事务级别为:Repeatable read
      3. 事务的隔离级别:  
        1. 脏读:即一个事务读到了另一个事务还未提交的数据。
        2. 不可重复读:在同一个事务中,读取两次数据,读出来的数据不一样。例如:一个事务读取同一个数据,同时另一个事务在对这个数据进行更新并提交,导致第一个事务读取同一个数据,出现了不同的结果。不可重复读主要针对的是更新操作。
        3. 幻读:当一个事务读取数据的时候发现不存在,同时另一个事务对这个数据进行了插入,当第一个事务进行数据插入的时候,发现记录已经存在,无法存入。这个就是幻读。幻读主要针对的是插入操作。
      4. 事务隔离级别 脏读            不可重复读      幻读                
        读未提交(Read uncommitted)
        读已提交(Read committed)
        可重复读(Repeatable read)
        串行化(Serializable)
    5. MySQL锁机制

      1. 悲观锁:总是持着悲观的态度,每次读取数据的时候都默认其他线程会更改数据,因此需要进行加锁操作,当其他线程想要访问数据时,都需要阻塞挂起。悲观锁分为:共享锁和排它锁。悲观锁通常方式为:select * from table for update
        1. 共享锁(S):共享锁也称为读锁,读锁允许多个连接可以同一时刻并发的读取同一资源,互不干扰;
        2. 排它锁(X):排他锁也称为写锁,一个写锁会阻塞其他的写锁或读锁,保证同一时刻只允许一个用户进行写入,防止其他用户对这个数据的读写。
      2. 乐观锁:修改数据时默认其他线程不会更改数据,当修改完成后提交的时候带上版本号进行比对,如果一致就提交成功,并且版本号加一。如果不一致则提交失败。
  2. Oracle

    1. oracle如何进行分页的

      1. 使用rownum进行分页的。如:select * from tb_user where rownum >=1 and rownum <=10 
    2. truncate和delete区别

      1. Truncate和delete都可以将数据实体删掉,truncate操作不记录到rollback日志,同时数据不能恢复。

      2. Truncate是数据定义语言(DDL),delete是数据操作语言(DML)。
      3. Truncate不能对视图进行操作,delete操作不会腾出表空间的内存。
posted @ 2021-07-07 19:41  浮or沉  阅读(22)  评论(0编辑  收藏  举报