2022.10.25 java学习日记

今天学习的内容主要为:

1.自增长

2.索引优化速度

3.事务

一、自增长

1. 自增长关键字:AUTO_INCREMENT

2. 可以使整数型和浮点型的字段每+1的形式自行添加(浮点数再此方面用的不多)

3. 一般是配合着主键primary key去进行使用,如不使用主键进行字段的修饰,则需要使用到unique

4. 自增长默认从1开始,但也可以使用:

ALTER TABLE 表名 AUTO_INCREMENT = xxx 来进行修改

例:

CREATE TABLE table01 (

        id INT PRIMARY KEY AUTO_INCREMENT,

        `name` VARCHAR(32) NOT NULL DEFAULT '')

INSERT INTO table01 VALUES (null,'YG')

虽然此时id字段处填写的是null,但mysql会自动给id赋默认值,即id = 1

INSERT INTO table01 VALUES (null,'mxh')

此时的id经过自增长,id = 2,以此类推

二、索引优化速度

1. 当在海量的表中进行数据的查询时,速度会非常的慢,这是因为mysql数据库默认使用的查询方式是:全表扫描 (即一行一行的进行查询)

2. 此时,就可以建立索引,极大的提升在海量表中查询数据的速度。原理是:会形成索引的数据结构,比如像:二叉树数据结构等等,非常利于数据的检索

3. 有利就有弊。虽然建立索引,极大的缩减了查询的时间,但由于索引自身会占用一定的内存空间,所以会使表中的内存增大,占用磁盘;

     对dml (insert,update,delete)语句的效率影响:建立索引后,会形成一个固定的数据结构,此时对表中的数据进行增删操作的话,会打破原有的数据结构,使得不得不生成一个新的数据结构。

4. 索引的类型主要分为以下几种:

        (1)主键索引,如在字段中添加了主键,则也会被自动的认为是一个主键索引

             也可以使用 ALTER TABLE 表名 ADD PRIMARY KEY (字段名)在已经生成了表的情况下,

             添加主键索引

        (2)唯一索引 UNIQUE

        (3)普通索引 INDEX

             创建唯一索引和普通索引的方法有两种:

             CREATE INDEX 索引名 ON 表名(字段名)

              ALTER TABLE 表名 ADD (UNIQUE) INDEX (字段名)

        (4)全文索引 FULLTEXT 【适用于MyISAM】

             一般来说,不会使用mysql数据库自带的全文索引功能

5. 删除索引方法:

分主键删除法和其他索引删除法:
       

删除主键:

ALTER TABLE 表名 DROP PRIMARY KEY

其他索引删除法 :

DROP (UNIQUE) INDEX 索引名 ON 表名

6. 修改索引的原理:先DROP删除掉原有的索引,在重新创建一个新的索引即可

7. 查询此时表的索引:SHOW INDEX FROM 表名

8. 在索引的选择上:如果数据不会重复,则使用UNIQUE;反之使用普通索引

9.因为dml语句中不包含select,所以在查询任务重且多的表中创建索引

   虽然查询数据多,但唯一性太差,此时不太建议创建索引

   表中的数据若需频繁的更新,也不推荐在此创建索引

三、事务即事务的隔离级别

事务保证数据的一致性,一组相关的dml语句要么全部成功,要么全部失败,最典型的例子莫过于转账问题

mysql数据库事务的重要操作:

        1.START TRANSACTION - 开始事务方式一

           SET autocommit = off - 开始事务方式二

        2.SAVEPOINT - 设置保存点

        3.ROLLBACK TO 保存点名 - 回退事务 (回滚)

        4.ROLLBACK - 回退全部事务

        5.COMMIT - 提交事务

当你开始事务后,在未提交事务之前,所增删改的数据并不会在别的连接上显示

回退事务:当你先设置了保存点a,并update了一条数据,在设置了一个保存点b,此时你ROLLBACK TO a,先前update的那条dml语句就会被撤销,通俗点讲:mysql吃了后悔药

提交事务:当执行了commit语句后,会确认事务的改变、结束事务、删除保存点、释放锁并且数据正式生效。当你提交事务后,想在回过头来进行回滚的操作,这肯定是不可能实现的。即已经吃不到后悔药了。

并且我们知道,默认情况下,也就是还没有开启事务前,dml语句是默认提交的,所以并不能回滚。

并且事务对表的存储引擎也是有要求的:只有InnoDB的存储引擎才可以使用事务,别的存储引擎都是不可以的。

四、事务隔离级别

事务隔离级别是指事务与事务之间的隔离程度。通俗点讲:事务a和事务b同查询一张表,但事务a所能看到的数据和事务b所能看到的数据是有区别的。

如果不考虑隔离级别,可能会产生如下问题:脏读、不可重复读和幻读

脏读:当一个事务读取到了另一个事务尚未提交的数据。

不可重复读:已提交,但是由于所做的 修改或

删除操作,导致你每次查询到的数据可能都不一样。

幻读:已提交,但是由于所做的 插入操作,导致每次查询到的数据可能都不一样 

事务的隔离级别分四种:

        1. 读未提交 (read uncommitted)

        2. 读已提交 (read committed)

        3. 可重复读 (repeatble read)   

        4. 可串行化 (serializable)      

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值