当前位置:   article > 正文

mysql知识点总结

mysql知识点总结

1、什么是锁,MySQL 中有哪几种锁?

数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。

若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。加锁是实现数据库并发控制的一个非常重要的技术。

MySQL 的 三种锁:

(1)表级锁:
开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。

(2)行级锁:
开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。

(3)页面锁:
开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。

2、MySQL 中有哪些不同的表格?共有 5 种类型的表格:

(1)MyISAM

(2)Heap

(3)Merge

(4)INNODB

(5)ISAM

3.hashcode和equal的关系

(1)如果两个对象equals,Java运行时环境会认为他们的hashcode一定相等。

(2)如果两个对象不equals,他们的hashcode有可能相等。

(3)如果两个对象hashcode相等,他们不一定equals。

(4)如果两个对象hashcode不相等,他们一定不equals。

4.如何通俗地理解三个范式?

第一范式:1NF 是对属性的原子性约束,要求属性具有原子性,不可再分解;

第二范式:2NF 是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;

第三范式:3NF 是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。

范式化设计优缺点:
优点:
(1)可以尽量得减少数据冗余,使得更新快,体积小缺点:对于查询需要多个表进行关联,减少写得效率增加读得效率,
更难进行索引优化反范式化:
(2)可以减少表得关联,可以更好得进行索引优化
缺点:
(1)数据冗余以及数据异常,数据得修改需要更多的成本

5.MySQL数据库索引及作用

索引是对数据库表中一个或多个列的值进行排序的结构,是帮助MySQL高效获取数据的数据结构,数据库的索引类似于书籍的索引。

MySQL基本的索引类型:

(1)普通索引:基本的索引类型,没有唯一性的限制,允许为NULL值。
(2)唯一索引:数据列不允许重复,允许为NULL值,一个表允许多个列创建唯一索引。
(3)主键索引:数据列不允许重复,不允许为NULL,一个表只能有一个主键。
(4)全文索引:是目前搜索引擎使用的一种关键技术。

优点:

(1)索引加快数据库的检索速度

(2)索引降低了插入、删除、修改等维护任务的速度

(3)唯一索引可以确保每一行数据的唯一性

(4)通过使用索引,可以在查询的过程中使用优化隐藏器,提高系统的性能

(5)索引需要占物理和数据空间

缺点:

(1)创建索引和维护索引需要耗费时间,这个时间随着数据量的增加而增加;

(2)索引需要占用物理空间,不光是表需要占用数据空间,每个索引也需要占用物理空间;

(3)当对表进行增、删、改、的时候索引也要动态维护,这样就降低了数据的维护速度。

6.什么情况下不创建索引

(1)查询中很少使用到的列 不应该创建索引,如果建立了索引然而还会降低mysql的性能和增大了空间需求.

(2)很少数据的列也不应该建立索引,比如 一个性别字段 0或者1,在查询中,结果集的数据占了表中数据行的比例比较大,
mysql需要扫描的行数很多,增加索引,并不能提高效率

(3)定义为text和image和bit数据类型的列不应该增加索引,

(4)当表的修改(UPDATE,INSERT,DELETE)操作远远大于检索(SELECT)操作时不应该创建索引,这两个操作是互斥的关系

7.什么 情况下数据库索引会失效

(1)如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因)

    注意:要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引
  • 1

(2)对于多列索引,不是使用的第一部分,则不会使用索引

(3)like查询是以%开头,模糊匹配

(4)如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引

(5)如果mysql估计使用全表扫描要比使用索引快,则不使用索引

8、简述在 MySQL 数据库中 MyISAM 和 InnoDB 的区别

MyISAM:
不支持事务,但是每次查询都是原子的;
支持表级锁,即每次操作是对整个表加锁;
存储表的总行数;
一个 MYISAM 表有三个文件:索引文件、表结构文件、数据文件;
采用菲聚集索引,索引文件的数据域存储指向数据文件的指针。
辅索引与主索引基本一致,但是辅索引不用保证唯一性。

InnoDb:
支持 ACID 的事务,支持事务的四种隔离级别;
支持行级锁及外键约束:因此可以支持写并发;
不存储总行数:一个 InnoDb 引擎存储在一个文件空间(共享表空间,表大小不受操作系统控制,一个表可能分布在多个文件里),也有可能为多个(设置为独立表空,表大小受操作系统文件大小限制,一般为 2G),受操作系统文件大小的限制;主键索引采用聚集索引(索引的数据域存储数据文件本身),辅索引的数据域存储主键的值;因此从辅索引查找数据,需要先通过辅索引找到主键值,再访问辅索引;最好使用自增主键,防止插入数据时,为维持 B+树结构,文件的大调整。

9、MySQL 中 InnoDB 支持的四种事务隔离级别名称,以及逐级之间的区别?

SQL 标准定义的四个隔离级别为:

(1)read uncommited :读到未提交数据

(2)read committed:脏读,不可重复读

(3)repeatable read:可重读

(4)serializable :串行事物

10、CHAR 和 VARCHAR 的区别?

(1)CHAR 和 VARCHAR 类型在存储和检索方面有所不同

(2)CHAR 列长度固定为创建表时声明的长度,长度值范围是 1 到 255 当 CHAR值被存储时,它们被用
空格填充到特定长度,检索 CHAR 值时需删除尾随空格。

11、主键和候选键有什么区别?

表格的每一行都由主键唯一标识,一个表只有一个主键主键也是候选键。按照惯例,候选键可以被指定为主键,并且可以用于任何外键引用。

12、myisamchk 是用来做什么的?

它用来压缩 MyISAM 表,这减少了磁盘或内存使用。

13.MyISAM Static 和 MyISAM Dynamic 有什么区别?

MyISAM Static 上的所有字段有固定宽度,MyISAM Static 在受损情况下更容易恢复。
MyISAM Dynamic表将具有像 TEXT,BLOB 等字段,以适应不同长度的数据类型。

14.如果一个表有一列定义为 TIMESTAMP,将发生什么?

当行被更改时,时间戳字段将获取当前时间戳。
列设置为 AUTO INCREMENT 时,如果在表中达到最大值,会发生什么情况?
它会停止递增,任何进一步的插入都将产生错误,因为密钥已被使用。
怎样才能找出最后一次插入时分配了哪个自动增量?
LAST_INSERT_ID 将返回由 Auto_increment 分配的最后一个值,并且不需要指定表名称。

15.LIKE 声明中的%和_是什么意思?

%对应于 0 个或更多字符,_只是 LIKE 语句中的一个字符。

16.BLOB 和 TEXT 有什么区别?

BLOB 是一个二进制对象,可以容纳可变数量的数据。
TEXT 是一个不区分大小写的 BLOB。
BLOB 和 TEXT 类型之间的唯一区别在于对 BLOB 值进行排序和比较时区分大小写,对 TEXT 值不区分大小写。

17.NOW()和 CURRENT_DATE()有什么区别?

NOW()命令用于显示当前年份,月份,日期,小时,分钟和秒。CURRENT_DATE()仅显示当前年份,月份和日期。

18、MySQL 支持事务吗?

在缺省模式下,MySQL 是 autocommit 模式的,所有的数据库更新操作都会即时提交,所以在缺省情况下,MySQL 是不支持事务的。
但是如果你的 MySQL 表类型是使用 InnoDB Tables 或 BDB tables 的话,你的MySQL 就可以使用事务处理。

19、列的字符串类型可以是什么?

字符串类型是:

(1)SET

(2)BLOB

(3)ENUM

(4)CHAR

(5)TEXT

20、 NULL 是什么意思

NULL 这个值表示 UNKNOWN(未知):它不表示“”(空字符串)。
对 NULL 这个值的任何比较都会生产一个 NULL 值。您不能把任何值与一个 NULL 值进行比较,
并在逻辑上希望获得一个答案。使用 IS NULL 来进行 NULL 判断

21.数据库中的事务是什么?

事务(transaction)是作为一个单元的一组有序的数据库操作。如果组中的所有 操作都成功,则认为事务成功,

即使只有一个操作失败,事务也不成功。如果所 有操作完成,事务则提交,其修改将作用于所有其他数据库进程。

如果一个操作 失败,则事务将回滚,该事务所有操作的影响都将取消。

事务特性:

1、原子性:即不可分割性,事务要么全部被执行,要么就全部不被执行。

2、一致性或可串性。事务的执行使得数据库从一种正确状态转换成另一种正确状 态

3、隔离性。在事务正确提交之前,不允许把该事务对数据的任何改变提供给任何 其他事务,

4、持久性。事务正确提交后,其结果将永久保存在数据库中,即使在事务提交后 有了其他故障,事务的处理结果也会得到保存。

22、什么是存储过程?用什么来调用?

存储过程是一个预编译的 SQL 语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次 SQL,使用存储过程比单纯 SQL 语句执行要快。可以用一个命令对象来调用存储过程。

23、什么是基本表?什么是视图?什么是游标?

基本表:基本表是本身独立存在的表,在 SQL 中一个关系就对应一个表。
视图:视图是从一个或几个基本表导出的表。视图本身不独立存储在数据库中,是一个虚表。
游标:是对查询出来的结果集作为一个单元来有效的处理。游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行。

24、主键、外键和索引的区别?

主键、外键和索引的区别

定义:
主键–唯一标识一条记录,不能有重复的,不允许为空
外键–表的外键是另一表的主键, 外键可以有重复的, 可以是空值
索引–该字段没有重复值,但可以有一个空值。

作用:
主键–用来保证数据完整性
外键–用来和其他表建立联系用的
索引–是提高查询排序的速度

个数:
主键–主键只能有一个
外键–一个表可以有多个外键
索引–一个表可以有多个唯一索引

25、MySQL 数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化?

(1)设计良好的数据库结构,允许部分数据冗余,尽量避免 join 查询,提高效率。

(2)选择合适的表字段数据类型和存储引擎,适当的添加索引。

(3)MySQL 库主从读写分离。

(4)找规律分表,减少单表中的数据量提高查询速度。

(5)添加缓存机制,比如 memcached,apc 等。

(6)不经常改动的页面,生成静态页面。

(7)书写高效率的 SQL。比如 SELECT * FROM TABEL 改为 SELECT field_1,field_2, field_3 FROM TABLE.

26、锁的优化策略

(1)读写分离

(2)分段加锁

(3)减少锁持有的时间

(4)多个线程尽量以相同的顺序去获取资源不能将锁的粒度过于细化,不然可能会出现线程的加锁和释放次数过多,
反而效率不如一次加一把大锁。

27、实践中如何优化 MySQL

最好是按照以下顺序优化:

(1)SQL 语句及索引的优化

(2)数据库表结构的优化

(3)系统配置的优化

(4)硬件的优化

28.优化数据库的方法

(1)选取最适用的字段属性,尽可能减少定义字段宽度,尽量把字段设置 NOTNULL,例如’省份’、’性别’最好适用 ENUM

(2)使用连接(JOIN)来代替子查询

(3)适用联合(UNION)来代替手动创建的临时表

(4)事务处理

(5)锁定表、优化事务处理

(6)适用外键,优化锁定表

(7)建立索引

(8)优化查询语句

29.说说对 SQL 语句优化有哪些方法?(选择几条)

(1)Where 子句中:where 表之间的连接必须写在其他 Where 条件之前,那些可以过滤掉最大数量记录的条件必须写在 Where 子句的末尾.HAVING 最后。

(2)用 EXISTS 替代 IN、用 NOT EXISTS 替代 NOT IN。

(3) 避免在索引列上使用计算。

(4)避免在索引列上使用 IS NULL 和 IS NOT NULL。

(5)对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。

(6)应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表描。

(7)应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。

30、什么是内连接、外连接、交叉连接、笛卡尔积呢?

1、 内连接(inner join):取得两张表中满足存在连接匹配关系的记录。

2、 外连接(outer join):取得两张表中满足存在连接匹配关系的记录,以及某张表(或两张表)中不满足匹配关系的记录。

3、 交叉连接(cross join):显示两张表所有记录一一对应,没有匹配关系进行筛选,也被称为:笛卡尔积。

31、drop、delete与truncate的区别

在这里插入图片描述

32、SQL语句的语法顺序:

1、 SELECT

2、 FROM

3、 JOIN

4、ON

5、 WHERE

6、 GROUP BY

7、 HAVING

8、 UNION

9、 ORDER BY

10、 LIMIT

33、一个6亿的表a,一个3亿的表b,通过外间tid关联,你如何最快的查询出满足条件的第50000到第50200中的这200条数据记录。

1、 如果A表TID是自增长,并且是连续的,B表的ID为索引 select * from a,b where a.tid = b.id and a.tid>500000 limit 200;

2、 如果A表的TID不是连续的,那么就需要使用覆盖索引.TID要么是主键,要么是辅助索引,B表ID也需要有索引。 select * from b , (select tid from a limit 50000,200) a where b.id = a .tid;

34.MySql 分页关键字(limit)

(1)取前5条数据

select * from table_name limit 0,5 或 select * from table_name limit 5

(2)取第11条到第15条数据,共5条

select * from table_name limit 10,5

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/252987
推荐阅读
相关标签
  

闽ICP备14008679号