初始MySQL(六)(自增长,索引,事务,隔离级别)

目录

自增长

索引

索引的原理:

mysql索引的类型

添加/删除索引/查看索引

添加索引

删除索引

查看索引(没有生成或者问问什么时候存在)

小结

MySQL事务

关于事务的一些概念

mysql数据库控制台事务的几个重要操作

MySQL事务细节讨论

MySQL事务隔离级别

介绍

数据库中的四种隔离级别


自增长

在某张表中,存在一个id列(整数),我们希望在添加记录的时候,该列从1开始,自动增长,应该怎么处理?

语法: 字段名 整型 primary key auto_increment

 自增长的两种写法

初始MySQL(六)(自增长,索引,事务,隔离级别)_第1张图片

 自增长使用的细节

(1) 一般来说自增长和primary key 配合使用的

(2) 自增长也可以单独使用(但是需要配合一个unique)

(3) 自增长修饰的字段为整型的,虽然小数也可以但是非常非常少的使用)

(4)自增长默认从1开始,你也可以通过下面的命令alter table 表名 auto_increment = 新的开始值

(5) 如果你添加数据时,给自增长字段(列)指定值后,则以指定的值为准,如果指定了自增长,一般来说,就按照自增长来添加数据

初始MySQL(六)(自增长,索引,事务,隔离级别)_第2张图片

索引

索引的原理:

没有索引为什么会慢?因为会全表扫描

使用索引为什么会快?形成索引的数据结构,比如说二叉树,B树啥的

索引的代价: (1)磁盘占用 (2) 对dml(update delete insert) 语句的效率影响

mysql索引的类型

1.主键索引: 主键自动的为主索引(类型Primary key)

2.唯一索引(UNIQUE)

3.普通索引(index)

4.全文索引(MySQL的不好用,不说了)

添加/删除索引/查看索引

添加索引

添加主键索引: (1)一般直接在表中指定谁是主键索引

初始MySQL(六)(自增长,索引,事务,隔离级别)_第3张图片

(2)ALTER TABLE 表名 ADD PRIMARY KEY(列名) 

添加唯一索引:(1) CREATE UNIQUE INDEX id_index(索引名) ON 表名(列名);

(2)ALTER TABLE t26(表名) ADD INDEX id_index(id) 索引名(列名)

CREATE TABLE t26(
id INT,
`name` VARCHAR(32));

-- 添加唯一索引
CREATE UNIQUE INDEX id_index ON t26(id); #第一种方法
CREATE UNIQUE INDEX id_index ON t26(id); #创建的第二种方法

添加普通索引:(1)CREATE INDEX id_index ON t26(id);

(2)ALTER TABLE t26 ADD INDEX id_index(id)

删除索引

1.DROP INDEX id_index(索引名) ON t26 (表名)

2.ALTER TABLE t26(表名) DROP PRIMARY KEY; -- 一张表只有一个主键,直接说主键就行了

查看索引(没有生成或者问问什么时候存在)

-- 查询索引
-- 1.方式
SHOW INDEX FROM t26
-- 2.方式
SHOW INDEXES FROM t26
-- 3.方式
SHOW KEYS FROM t26
-- 4.方式
DESC t26

小结

1. 较频繁的作为查询条件应该创建索引

select * from emp where empno = 1

2.唯一性太差的字段不适合创建索引,即使频繁作为查询条件

select * from emp where sex ='男'

3.更新非常频繁的字段不适合

MySQL事务

关于事务的一些概念

什么是事务: 用于保证数据的一致性,它由一组相关的dml语句组成的,该组dml语句要么全部成功,要么全部失败,如: 转账就要就用事务来处理,用以保证数据的一致性

那咱们就那转账来说说,假如说张三现在有300块钱,李狗蛋有200块钱,张三买了李狗蛋100块钱的二手书,张三要转给李狗蛋100块钱,咱们的数据库应该这么写

初始MySQL(六)(自增长,索引,事务,隔离级别)_第4张图片

这个改变就是一组del语句,如果这个del语句一部分成功的话,就是说张三300减了100块钱,李狗蛋就是没收找,还是200块钱,凭空消失了100块钱,这不是活闹鬼了吗?不行,肯定不行!!!!,所以说我们这个事务只能全部成功,要么全部失败,不存在局部成功!!!

mysql数据库控制台事务的几个重要操作

1.start transaction 开始一个事务

2.savepoint 保存点名  -- 设置保存点

3.rollback to 保存点名 -- 回退事务

4.rollback -- 回退全部事务

5.commit -- 提交事务,所有的操作生效,不能回退

咱们画个图看看

初始MySQL(六)(自增长,索引,事务,隔离级别)_第5张图片

-- 事务的重要的概念和具体操作
-- 1.创建一张测试表
CREATE TABLE t27(
id INT,
`name` VARCHAR(32));
-- 2.开始事务
START TRANSACTION
-- 3.设置保存点
SAVEPOINT a
-- 执行dml操作
INSERT INTO t27 VALUES(100,'tom')
SELECT * FROM t27


SAVEPOINT b
-- 执行dml操作
INSERT INTO t27 VALUES(200,'jack')
-- 回退到b
ROLLBACK TO b;

-- 继续回退 a 
ROLLBACK TO a;

ROLLBACK -- 表示直接回退到事务开始的状态
COMMIT -- 提交事务,回退无效

MySQL事务细节讨论

-- 讨论事务细节
-- 1. 如果不开始事务,默认情况下,del操作是自动提交的,不能回滚
INSERT INTO t27 VALUES(300,'milan');
ROLLBACK
SELECT * FROM t27
-- 2. 如果开始一个事务,你没有创建保存点,你可以执行rollback,
-- 默认就是回到你事务开始的状态
START TRANSACTION -- 开启事务有一个默认的保存点
INSERT INTO 27 VALUES(400,'牛掰');
ROLLBACK -- 表示直接回退到事务的状态
-- 3.你可以在提交之前,创建多个保存点
-- 4. 在事务提交前,选择回退到哪个保存点
-- 5.mysql 的事务机制innodb的存储引擎还可以使用,myisam不好使
-- 6.开始一个事务start transaction ,set autocommit = off

MySQL事务隔离级别

介绍

多个连接开启各自的事务操作数据库时,数据库系统要负责隔离操作,来保证各个连接在获取数据时的准确性,不设置隔离性,可能会引发: 脏读,不可重复读,幻读,俗话说就是假如说现在有两个人都在操作这个数据库,必须让这两个人操作进行一定的隔离,不隔离会有不好的影响

上面的脏读,不可重复读,幻读是啥个意思呢?

我们就说大白话了,不说官方的了

脏读: 有两个事务,一个事务读了另一个事务还没提交的修改后的数据的时候,这就是脏读

不可重复读: 一个事务正在读数据库,读着读着,另一个事务跑过来,对数据库中的数据修改和删除的后提交了,提交完之后这个事务就跑了,第一个事务就会读到跑过来事务修改后的数据,这就是不可重复度

幻读:和上面一样,就是跑过来的那个事务,对数据进行了插入,然后提交跑了,第一个事务就读到了跑过来的那个事务插入的数据

数据库中的四种隔离级别

初始MySQL(六)(自增长,索引,事务,隔离级别)_第6张图片

其中的加锁就是,这个数据库只能由一个事务进行访问,先下手为强哈!!只要是一个事务开始了他对数据库读到操作之后,别的事务只能再后面排队

你可能感兴趣的:(mysql,数据库)