数据库常用面试题(简易版)

数据库常用面试题(简易版)

说一下Myisam 和 InnoDB之间的区别

首先 Myisam 不支持事务和行级锁 一般用于大量查询和少量插入 不支持外键 而且索引和数据是分开储存的

InnoDB 是基于聚簇索引建立的 和Myisam相反 它支持事务 外键 并且通过MVCC来控制控制高并发 索引和数据在一块

说一下Mysql索引有哪些 聚簇索引和非聚簇索引又分别是什么

主要有hash索引 和 B+ 树索引

B+ 树索引:ID唯一为节点 而叶子节点包含数据 那么这种索引和数据在一起储存的索引叫做聚簇索引 (非聚簇索引就是 只包含主键id)

注意:架设没有位置主键 InnoDB会选择一个非空的索引代替

说一下什么是覆盖索引和回表

覆盖索引指的是 再一次查询过程中 索引里面包含或者覆盖着所有需要查询的数据 我们就称之为覆盖索引 而不在需要回表查询 要确定一个表是否是覆盖索引我们需要explan sql语句查看

锁的类型有哪些

MySQL的锁分为排他锁和共享锁 也称为读锁和写锁

读锁是共享的 这个时候只能读 不能写

写锁是排他的 分为行锁和表锁

行锁又分为乐观锁和悲观锁

说一下事物的基本特点 和隔离级别

事务的特点是ACID

A 是事物的原子性 值得是一个事物的操作 要么成功 那么失败

C 一致性 指的是事务的一个状态转换到另外一个状态

I 隔离性 指的是事务在进行最后的提交之前 不会被其他事务所看到

D 持久性 一旦事务提交之后那么对事务的操作 就会永久的保存到数据库中

  • 读未提交 可能会读到其他的未提交的数据 也叫做脏读
  • 读已提交 俩次读取的结果不一样 他解决了脏读 (不可重复读)
  • 可重复读 这是mysql默认级别 每次读取的结果都一样 (幻读)
  • 串行化 一般不会使用他会给每一行加锁 这样的话会造成大量的锁竞争问题 相应的他解决了可重复读的问题

ACID靠什么保证

A 日志

C 代码层面

I MVCC来保证

D redoLog

MVCC工作原理

他通过控制版本来查询小于或者等于当前版本 删除为空或者大于当前版本

间隙锁

为了解决幻读的问题 结合MVCC来阐述

数据量级 分库分表怎么做

先垂直 在水平

分表之后的ID怎么确保唯一性

因为我们确定的主键都是唯一自增的 分表之后肯定会有冲突

设置步长 比如1024张表 那么我们就设置0~1024的基础步长 那么就解决了

//选择排序
int array[] = {1,2,3,4,6,5};
for (int i = 0; i < 6; i++){
    int minkey = array[i];
    for(int j = i + 1; j<6; j++){
        if (minkey[] < array[]){
            int tamp = array[j];
        	array[j] = minkey;
        	minkey[i] = tamp;
        }
    }
    array[] = minkey[];
}

什么是springBoot

用来简化开发

用特殊的spring引用main方法

内嵌tomcat

自动配置

简化maven配置

连接数据库

 -- 展示所有的表
 show databases;
 -- 使用某张表
 use school;
 -- 查看所有的表
 show tables;
 -- 查看表中的所有数据
 describe city;
 -- 创建一个数据库
 create database Game;
 -- 推出 exit
 
 

数据库管理语言

DDL 定义

DML 操作

DQL 查询

DCL 控制

操作数据库

1 创建数据库

create databases [if not exists] game;

2 删除数据库

drop databases [if exists] game;

3 使用数据库

use game;

4 查看数据库

数据库的列类型

数据库的字段属性

UNSIGNED

  • 无符号的整数
  • 不能声明为负数

ZEROFILL

  • o填充
  • 不足的位数用0添加

自增

  • 通常设置为唯一的整数
  • 也可以自己设计

DESC 显示表的结构

修改表名

alter table 旧表名 rename as 旧表名

增加表的字段

alter table 表名 add 字段名 列属性

修改表的字段

修改约束

alter table game modify age varchar(10);

修改表名

alter table game change age age1 INT(10);

删除表的字段

alter table game drop age1;

删除表

Mysql的数据管理

外键

FK_ 设置外键名

CONSTRAION FK_ 设置外键名

DML语言

insert

insert into game ([字段1,字段2,字段3]) values ('值1,值2,值3')

update

update `game` set `name` = 'jdx' where id =1;
```sql
delete from game where id = 3;


## DQL语言

```sql
select * from game
--查询指定字段
select `name` ,`age` from game;
--别名
select `name` as `姓名`,`age` as `年龄` from agme;
--函数 Concat(a,b)
select concat(`姓名:` , name ) as 新名字 from game;
--去重函数函数
select distinct 'name' from game;
--查询系统的版本
select version();

===================================where======================================

-- 模糊查询 (比较运算符)
select `name`,`age` from game
where age between 20 and 24;

连表查询

join on 链接查询

where 等职查询

自联接(拆表)

--limit
limit(起始值,该页的大小)

sql 常用函数

ABS(绝对值)

floor(向下取整)

RAND (随机数)

SING (返回参数的符号)

CHAR_String (字符串长度)

concat(拼接字符串)

INSTER(查询替换)

UPPER(大写)

REPALCE(替换原来的字符串)

NOW(当前时间)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敏姐儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值