关于数据库的面试题

常见的关系型数据库和非关系型都有那些?

  • 关系型数据库(需要有表结构)
    mysql、oracle、splserver、postgresql、db2、sybase
  • 非关系型数据库(以key-value存储的,没有表结构)(NoSQL)
    MongoDB、Redis

MySQL常见数据库引擎及比较

  • InnoDB
    支持事务
    支持外键
    支持表锁、行锁(for update)
    表锁:select * from tb for update
    行锁:select id,name from tb where id=2 for update
  • myisam
    查询速度快
    全文索引
    支持表锁
    表锁:select * from tb for update

数据库三大范式

  1. 列的原子性
    列不可再分解,如(出生年月日)如果认为还可以再分成(出生年,出生月,出生日),它就不是一范式了,否则就是;
  2. 行的唯一性不存在部分依赖
    如(表:学号、课程号、姓名、学分),这里学分依赖课程号姓名依赖与学号,所以不符合二范式。
    正确做法:
    学生:Student(学号, 姓名);
    课程:Course(课程号, 学分);
    选课关系:StudentCourse(学号, 课程号, 成绩)。
  3. 3NF是对字段的冗余性,要求任何字段不能由其他字段派生出来,它要求字段没有冗余,即不存在传递依赖
    如(表: 学号, 姓名, 年龄, 学院名称, 学院电话)存在依赖传递: (学号) → (学生)→(所在学院) → (学院电话) 。
    正确做法:
    学生:(学号, 姓名, 年龄, 所在学院);
    学院:(学院, 电话)

数据库五大约束

  1. primary KEY:设置主键约束;
  2. UNIQUE:设置唯一性约束,不能有重复值;
  3. CHECK:检查约束    
  4. NOT NULL:设置非空约束,该字段不能为空;
  5. FOREIGN key:设置外键约束。 

什么是事务?MySQL如何支持事务?

事务用于将某些操作的多个SQL作为原子性操作,一旦有某一个出现错误,即可回滚到原来的状态,从而保证数据库数据完整性。

一般来说,事务是必须满足4个特性:

  1. 原子性:
    事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。
  2. 一致性:
    事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。
  3. 隔离性:
    当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。即要达到这么一种效果:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执行。
  4. 持久性:
    持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。 

最重要的是1,2两个特性。

  • 关闭自动提交:SET AUTOCOMMIT=0;
    # 此后需要手动提交事务,应用COMMIT或ROLLBACK提交事务或回滚事务。
  • 开启自动提交:SET AUTOCOMMIT=1;

如果执行语句:START TRANSACTION(开始一个事务); 那么不论有无设置自动提交,均需要手动提交或回滚。

事务的周期由用户在命令提示符中输入START TRANSACTION指令开始,直至用户输入COMMIT结束。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值