0
点赞
收藏
分享

微信扫一扫

MySQL的相关面试题

迪莉娅1979 2022-03-30 阅读 206
mysql
  • .如何在创建索引

三种方法

1.在一张表中创建索引,这个过程不会创建设立主键;

create<索引名> on 表名

2.在创建表的同时完成索引的创建

这个语句就是设置一张表的主键,同时完成索引的创建

constraint primary key 索引名

3.在一张表中设置主键,同时把主键设置成为索引

  • 主键、外键、唯一键的区别

主键具有唯一性,一张表中只能有一个主键,而且主键不能为空;

外键是用来加强两张表的联系,外键主要是为了让主键引用,用来进行表连接;

唯一键,可以为空,但是不能重复,一张表中可以设置多个唯一键;

  • SQL语句包含几个部分

ddl(database definition language):操作数据库和操作数据表的;create

dcl(database controller language):操作数据库的控制权限;grank

dml(database make language):用来操作数据的数据内容;insert update

dql(database query language):用来查询表中的数据;select

  • 什么样的对象可以使用create

create database

create view

create table

create index

  • null和“ ”的区别

mysql中null代表未知数。不能把任何数据和null进行比较并且想要得到一个答案。

只能使用is null、is not null来对null进行判断。

在使用count(*)中会忽略掉null值;

" " 代表空字符串。

可以使用"="来对空字符串进行判断。

在使用count(*)中不会忽略" "。

  • 在什么情况下设置了索引但是不能使用

1.在使用"%"这个占位符进行模糊查询的情况下索引不能使用。

2.or语句前后没有全部都使用索引进行查找。

3.在需要进行类型转化的时候。

4.在where语句的后面进行了运算。

5.在where语句的后面有函数。

6.在mysql认为全表扫描的时候更快(数据少的时候)。

  • char和varchar的区别

varchar是可变长度的字符串,当插入的长度小于定义的长度,插入多长久存放多长;

在varchar中会有一个字符来记录字符串的长度,如果在字符串中有空格,varchar不会把空格进行去除;

char是不可变长度的字符串,定义多长久存放多长的字符串;

如果使用char存放字符串中存在空格,char会把字符串的空格进行删除;

  • mysql是如何控制用户的权限

限制用户可以访问那些数据库,那些表;

限制用户可以对那些表进行curd;

限制用户是否可以把自己的权限赋予其他人;

  • 如何查看表中字段的类型和名称

desc 表名

描述

  • union和unionALL的区别

用来合并多条select语句的结果集

合并条件

1.临时表中的列的数量相同

2.列有相同的数据类型

3.有相同的顺序

  • sql有几种连接方式

内连接(内连接的连接结果只包含连接条件的行)

外连接(外连接的连接结果不仅仅包含符合连接条件的行,还包含不符合连接条件的行,其中包含左,右,全连接)

  • mysql日志一般分为4种

错误日志(记录每次启动,运行,停止mysql的信息)

二进制日志(记录每次更改数据库的语句)

查询日志(记录每次与数据库连接的语句)

更新日志(在mysql5.1的时候已经被二进制日志替换了)

  • sql注入的危害

更改数据库的数据

可能会随意添加账户

  • 提供insert的性能

1.可以把多条insert语句合并成为一条语句执行

例:insert into 表名 value (字段名1 ,字段名2,字段名3)(数据1,数据2,数据3)

2.可以把自动提交事务更改为手动提交事务

数据库默认是autoCommit,每次更改一次数据,提交一次事务。我们可以更改为手动提交,一般是insert1000次提交一次;

  • 数据库的优化思路

1.sql优化;

2.索引优化;

3.结果优化

范式优化

反范式优化

4.硬件优化

  • sql优化

1.对查询优化,避免全表扫描,首先考虑在where和order by语句后面涉及的语句后面添加索引;

2.避免在where子句中使用进行逻辑判断,不然mysql会放弃索引,进行全表扫描;

3.避免在where子句对null进行判断,不然mysql会放弃索引,进行全表扫描(可以把null设置为0值)

4.模糊查询也会进行全表扫描(like “%”);

5.in和not in也会进行全表扫描,对于连续的值可以把in修改为between;

6.不要再where子句中进行函数,算数运算;

7.索引不是越多越好,索引会提高select的速度,但是也会降低insert,delete的速度;

8.不是所以的索引都是有效的,当索引中存在大量的重复数据,mysql可能会放弃索引;

举报

相关推荐

0 条评论