7月13日Java学习

MySQL---重点

1.数据类型

整型:tinyint(1个字节)smallint(2个字节)mediumint(3个字节)int(4个字节)bigint(8个字节)

小数型:float(单精度)double(双精度)decimal(定点数)

日期时间:date(年月日)time(时分秒)datetime(年月日时分秒)

字符型:char(定长字符串)varchar(可变长度字符串)

 Blob型:

Text型:

Binary型:

问题:

        1.float和double的区别

        float是4个字节,单精度的。double是8个字节,双精度的,double比float精度要高,但float和double都不是绝对精确的小数。

        2.Char和varchar的区别

        char支持的长度是0-255,varchar支持的长度是0-65535。

        char是以空间换时间,varchar是时间换空间,因为在数据插入的时候,char不会动态分配空间,varchar会动态分配空间,varchar的性能没有char好,但是varchar更节省空间

        3.char和varchar括号里面的长度是字节还是字符

        MySQL5.0版本之前是字节,之后改为了字符,假设字符集是utf-8,一个中文汉字是3个字节,那么char(32)最多存储10个中文字符

        4.用什么类型存储金额

        严禁用float、double存储金额,有两种解决方案,第一个使用decime定点数类型,第二个方案是使用长整型存储到金额的最小单位。

        5.超长文本(博客、文章怎么存储)

        严禁使用varchar存储长文本,超过5000我们就称它为超长文本。应当改用Blob类型或者TEXT类型来存储超长文本,并且要把超长文本的字段从表中拆分出去,单独用一张表来存储,和主表进行主外键关联,以免在查询主表数据时,影响查询效率。

        6.二进制文件(图片、音频、视频)怎么存储

        MySQL数据库中Binary类型可以存储二进制数据。但是性能非常差,正确的存储方案应该时二进制文件直接存储在磁盘中,在数据库中创建一个字段来存储二进制文件的路径和地址

        7.Mysl的整形支持无符号,通过使用关键字UNSIGNED

        age   tinyint                              --age字段取值范围是-128到127

        age   tinyint unsigned                --age字段的取值范围是0-255

        无符号不能存负数,但是正数取值范围放大一倍

2.约束

        1.唯一约束        UNIQUE

        2.非空约束        NOT  NULL;

        3.检查约束        CHECK(Mysql不支持)

        4.主键约束        PRIMARY KEY

        5.外键约束        FOREIGN KEY 

3.SQL的分类---语法整理(DDL|DQL|DML|DCL)

        1)数据查询语言DQL(Data Query Language)

SELECT,FROM,WHERE,GROUP BY,ORDER BY

这个较为好理解 即查询操作,以select关键字。各种简单查询,连接查询等 都属于DQL

        2)数据操纵语言DML(Data Manipulation Language)

INSERT,UPDATE,DELETE

主要为以上操作 即对数据进行操作的,对应上面所说的查询操作 DQL与DML共同构建了多数初级程序员常用的增删改查操作。而查询是较为特殊的一种 被划分到DQL中。

        3)事务控制功能TCL(Transaction Control Language)

COMMIT,ROLLBACK

主要用于操作事务,以及事务的提交和回滚操作

        4)数据定义语言DDL(Data Ddefinition Language)

CREATE,DROP,ALTER,SHOW

主要为以上操作 即对逻辑结构等有操作的,其中包括表结构,视图和索引。

        5)数据控制功能DCL(Data Control Language)

GRANT,REVOKE

主要为以上操作 即对数据库安全性完整性等有操作的,可以简单的理解为权限控制等。

主要用来对数据库用户授予和回收访问数据库的某种权限

4.联表查询的方式

5.关系类型和三范式、反三范式

        一对一、一对多、多对多(数据库表关系)

        三范式  --  以时间换空间        (增加关系来减少冗余数据)

        反(打破)三范式  --   以空间换时间        (允许适量的冗余数据,减少关系)

第一范式:每个列都不可以再拆分。

第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分。

第三范式:在第二范式的基础上,非主键列只依赖于主键,不依赖于其他非主键。

6.事务四大特性和四种隔离级别

        1)事务的四大特性

  1. 原子性(Atomicity): 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;

  2. 一致性(Consistency ): 执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的;

  3. 隔离性(Isolation ): 并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;

  4. 持久性(Durability ): 一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响

        2)事务的四种隔离级别

        为了达到事务的四大特性,数据库定义了4种不同的事务隔离级别,由低到高依次为Read uncommitted、Read committed、Repeatable read、Serializable,这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。

  • READ-UNCOMMITTED(读取未提交): 最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读

  • READ-COMMITTED(读取已提交): 允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生

  • REPEATABLE-READ(可重复读): 对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生

  • SERIALIZABLE(可串行化): 最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读

这里需要注意的是:Mysql 默认采用的 REPEATABLE_READ隔离级别 Oracle 默认采用的 READ_COMMITTED隔离级别

隔离级别脏读不可重复读幻影读
Read uncommitted
Read committed×
Repeatable read××
Serializable×××

7.锁的种类

在关系型数据库中,可以按照锁的粒度把数据库锁分为行级锁(INNODB引擎)、表级锁(MYISAM引擎)和页级锁(BDB引擎 )。

行级锁 行级锁是Mysql中锁定粒度最细的一种锁,表示只针对当前操作的行进行加锁。行级锁能大大减少数据库操作的冲突。其加锁粒度最小,但加锁的开销也最大。行级锁分为共享锁 和 排他锁。

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

表级锁 表级锁是MySQL中锁定粒度最大的一种锁,表示对当前操作的整张表加锁,它实现简单,资源消耗较少,被大部分MySQL引擎支持。最常使用的MYISAM与INNODB都支持表级锁定。表级锁定分为表共享读锁(共享锁)与表独占写锁(排他锁)。

特点:开销小,加锁快;不会出现死锁;锁定粒度大,发出锁冲突的概率最高,并发度最低。

页级锁 页级锁是MySQL中锁定粒度介于行级锁和表级锁中间的一种锁。表级锁速度快,但冲突多,行级冲突少,但速度慢。所以取了折衷的页级,一次锁定相邻的一组记录。

8.死锁、如何防止死锁

死锁是指两个或多个事务在同一资源上相互占用,并请求锁定对方的资源,从而导致恶性循环的出现,-- 1. 我们程序员如何从代码逻辑层面避免死锁的出现 -- 1). 尽量让所有的事务获取资源的顺序保持一致 -- 2). 可以在事务中一次性锁定所有需要的资源 -- 3). 提供锁的粒度, 行锁提升为表锁 (不建议使用, 会严重影响数据库的并发性能) -- 4). 使用乐观锁 -- 2. MySQL数据库自带死锁检测和快速失败机制,当某个事务进入锁等待的时候, MySQL会检测是否会产生死锁 -- 如果产生了死锁, MySQL会立即结束当前事务, 并释放当前事务内占用的所有资源上的锁

9.索引

索引用来快速地寻找那些具有特定值的记录。如果没有索引,一般来说执行查询时遍历整张表。

索引的原理很简单,就是把无序的数据变成有序的查询

  1. 把创建了索引的列的内容进行排序

  2. 对排序结果生成倒排表

  3. 在倒排表内容上拼上数据地址链

  4. 在查询的时候,先拿到倒排表内容,再取出数据地址链,从而拿到具体数据

MySQL---了解

存储引擎的区别

  • Innodb引擎:Innodb引擎提供了对数据库ACID事务的支持。并且还提供了行级锁和外键的约束。它的设计的目标就是处理大数据容量的数据库系统。

  • MyIASM引擎(原本Mysql的默认引擎):不提供事务的支持,也不支持行级锁和外键。

  • MEMORY引擎:所有的数据都在内存中,数据的处理速度快,但是安全性不高。

MyISAM与InnoDB区别

关系型数据库与NoSQL(非关系型)数据库的区别

主流的关系型数据库:MySQL,Oracle        

主流的NoSQL数据库:Redis

MySQL和Redis的关系不是谁能替代谁,而是在数据量非常大,数据库并发操作非常频繁的情况下,可以通过Redis来搭建缓冲服务器来分担MySQL的压力

视图、存储过程、存储函数、触发器

SQL语句优化、数据库优化的思路

数据库的冷热备份

冷备份  -  停机后(关闭数据库服务)备份  -  此时服务不可用

热备份  -  不停机备用  -  此时服务依然可用 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值