目录
自增长
索引
索引的原理:
mysql索引的类型
添加/删除索引/查看索引
添加索引
删除索引
查看索引(没有生成或者问问什么时候存在)
小结
MySQL事务
关于事务的一些概念
mysql数据库控制台事务的几个重要操作
MySQL事务细节讨论
MySQL事务隔离级别
介绍
数据库中的四种隔离级别
自增长
在某张表中,存在一个id列(整数),我们希望在添加记录的时候,该列从1开始,自动增长,应该怎么处理?
语法: 字段名 整型 primary key auto_increment
自增长的两种写法
自增长使用的细节
(1) 一般来说自增长和primary key 配合使用的
(2) 自增长也可以单独使用(但是需要配合一个unique)
(3) 自增长修饰的字段为整型的,虽然小数也可以但是非常非常少的使用)
(4)自增长默认从1开始,你也可以通过下面的命令alter table 表名 auto_increment = 新的开始值
(5) 如果你添加数据时,给自增长字段(列)指定值后,则以指定的值为准,如果指定了自增长,一般来说,就按照自增长来添加数据
索引
索引的原理:
没有索引为什么会慢?因为会全表扫描
使用索引为什么会快?形成索引的数据结构,比如说二叉树,B树啥的
索引的代价: (1)磁盘占用 (2) 对dml(update delete insert) 语句的效率影响
mysql索引的类型
1.主键索引: 主键自动的为主索引(类型Primary key)
2.唯一索引(UNIQUE)
3.普通索引(index)
4.全文索引(MySQL的不好用,不说了)
添加/删除索引/查看索引
添加索引
添加主键索引: (1)一般直接在表中指定谁是主键索引
(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块钱,咱们的数据库应该这么写
这个改变就是一组del语句,如果这个del语句一部分成功的话,就是说张三300减了100块钱,李狗蛋就是没收找,还是200块钱,凭空消失了100块钱,这不是活闹鬼了吗?不行,肯定不行!!!!,所以说我们这个事务只能全部成功,要么全部失败,不存在局部成功!!!
mysql数据库控制台事务的几个重要操作
1.start transaction 开始一个事务
2.savepoint 保存点名 -- 设置保存点
3.rollback to 保存点名 -- 回退事务
4.rollback -- 回退全部事务
5.commit -- 提交事务,所有的操作生效,不能回退
咱们画个图看看
-- 事务的重要的概念和具体操作
-- 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事务隔离级别
介绍
多个连接开启各自的事务操作数据库时,数据库系统要负责隔离操作,来保证各个连接在获取数据时的准确性,不设置隔离性,可能会引发: 脏读,不可重复读,幻读,俗话说就是假如说现在有两个人都在操作这个数据库,必须让这两个人操作进行一定的隔离,不隔离会有不好的影响
上面的脏读,不可重复读,幻读是啥个意思呢?
我们就说大白话了,不说官方的了
脏读: 有两个事务,一个事务读了另一个事务还没提交的修改后的数据的时候,这就是脏读
不可重复读: 一个事务正在读数据库,读着读着,另一个事务跑过来,对数据库中的数据修改和删除的后提交了,提交完之后这个事务就跑了,第一个事务就会读到跑过来事务修改后的数据,这就是不可重复度
幻读:和上面一样,就是跑过来的那个事务,对数据进行了插入,然后提交跑了,第一个事务就读到了跑过来的那个事务插入的数据
数据库中的四种隔离级别
其中的加锁就是,这个数据库只能由一个事务进行访问,先下手为强哈!!只要是一个事务开始了他对数据库读到操作之后,别的事务只能再后面排队