【面试】MySQL的事务和索引
MySQL事务
MySQL事务主要用于处理操作量大,复杂度高的数据。
比如说,在人员管理系统中,你删除一个人员,你既需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这些数据库操作语句就构成一个事务。
(1)在MySQL中只有使用了Innodb数据库引擎的数据库或表才支持事务。
(2)事务处理可以用来维护数据库的完整性,保证成批的sql语句要么全部执行,要么全部不执行。
(3)事务用来管理insert,update,delete语句。
一般来说,事务必须满足4个条件(ACID):Atomicity(原子性)、Consisttency(稳定性)、Isolation(隔离性)、Durability(可靠性)。
(1)事务的原子性:一组事务,要么成功,要么撤回。
(2)事务的稳定性:有非法数据(外键约束之类的),事务撤回。
(3)事务的隔离性:事务独立运行。一个事务处理后的结果,影响了其他事务,要么其他事务会撤回。事务的100%的隔离,需要牺牲速度。
(4)事务的可靠性:软、硬件崩溃后,InnoDB数据库驱动会利用日志文件重构修改,可靠性和高速度不可兼得,innodb_flush_log_at_trx_commit选项,决定什么时候把事务保存到日志里。
在MySQL控制台使用事务来操作:
(1)开始一个事务
start transaction
(2)做保存点
savepoint保存点名称
(3)操作
(4)可以回滚,可以提交,没有问题就提交,有问题就回滚。
MySQL索引:
MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。
打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用所以的MySQL就是一个人力三轮车。
索引分为单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索引包含多个列。
创建索引时,你需要确保该索引是应用在sql查询语句的条件(一般作为where子句的条件)。
实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。
上面都在说使用索引的好处,但过多的使用索引会造成滥用。因此索引也会有它的缺点:虽然索引大大提高了查询速度,同时却会降低更新表的速度,比如对表进行insert/update和delete.因为更新表时,MySQL不仅要保存数据,还要保存以下索引文件。
建立索引会占用磁盘空间的索引文件。
一、普通索引
(1)创建索引
这是最基本的索引,它没有任何限制。它有以下几种创建方式:
CREATE INDEX indexName ON mytable(username(length));
如果是char,varchar类型,length可以小于字段实际长度;
如果是BLOB和TEXT类型,必须指定length.
(2)修改表结构
ALTER mytable ADD INDEX [indexName] ON (username(length))
(3)创建表的时候直接指定
CREATE TABLE mytable(
ID INT NULL,
username VARCHAR(16) NOT NULL,
INDEX[indexName](username(length))
);
(4)删除索引的语法
DROP INDEX[indexName] ON mytable;
二、唯一索引
它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有控制。如果是组合索引,则列值的组合必须唯一。它有以
下几种创建方式:
(1)创建索引
REATE UNIQUE INDEX indexName ON mytable(username(length));
(2)修改表结构
ALTER mytable ADD UNIQUE [indexName] ON (username(length));
(3)创建表的时候直接指定
CREATE TABLE mytable(
ID INT NULL,
username VARCHAR(16) NOT NULL,
UNIQUE [indexName] (username(length))
);
三、使用ALTER命令添加和删除索引
有四种方式来添加数据表的索引:
(1)该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL。
ALTER TABLE tbl_name ADD PRIMARY KEY (column_list);
(2)这条语句创建索引的值必须是唯一的(除了NULL外,NULL可能出现多次)。
ALTEE TABLE tbl_name ADD UNIQUE index_name (column_list);
(3)添加普通索引,索引值可出现多次。
ALTER TABLE tbl_name ADD INDEX index_name(column_list);
(4)该语句指定了索引为FULLTEXT,用于全文索引。
ALTER TABLE tbl_name ADD FULLTEXT index_name(column_list);
四、显示索引信息
你可以使用SHOW INDEX命令来列出表中的相关的索引信息,可以通过添加\G来格式化输出信息。
实例:
mysql>SHOW INDEX FROM table_name\G
【面试】MySQL的事务和索引的更多相关文章
- mysql数据库 事务和索引
1.MySQL数据库特性: 原子性(atomidity) 一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一 ...
- MYSQL的事务和索引
事务 什么是事务 事务就是将一组SQL语句放在同一批次内去执行 如果一个SQL语句出错,则该批次内的所有SQL都将被取消执行 MySQL事务处理只支持InnoDB和BDB数据表类型 事务的ACID原则 ...
- MySQL 系列(三)你不知道的 视图、触发器、存储过程、函数、事务、索引、语句
第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...
- 第五章 MySQL事务,视图,索引,备份和恢复
第五章 MySQL事务,视图,索引,备份和恢复 一.事务 1.什么是事务 事务是一种机制,一个操作序列,它包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求.要么都执行 ...
- mysql 拾遗提高(函数、事务、索引)
目录 1.tips 2.事务(transaction) 3.索引(index) 4.数据库的导出和备份 5.函数 6.防SQL注入 7.使用Explain分析SQL语句 8.视图(view) 1.ti ...
- Mysql的事务、视图、索引、备份和恢复
事务 事务是作为单个逻辑工作单元执行的一系列操作,一个逻辑工作单元必须具备四个属性.即:原子性.一致性.隔离性.持久性,这些特性通常简称为ACID. 原子性(Atomicity) 事务是不可分割的 ...
- mysql(函数,存储过程,事务,索引)
函数 MySQL中提供了许多内置函数: 内置函数 一.数学函数 ROUND(x,y) 返回参数x的四舍五入的有y位小数的值 RAND() 返回0到1内的随机值,可以通过提供一个参数(种子)使RAND( ...
- 面试官:为什么Mysql中Innodb的索引结构采取B+树?
前言 如果面试官问的是,为什么Mysql中Innodb的索引结构采取B+树?这个问题时,给自己留一条后路,不要把B树喷的一文不值.因为网上有些答案是说,B树不适合做文件存储系统的索引结构.如果按照那种 ...
- 【Java面试】请你简单说一下Mysql的事务隔离级别
一个工作了6年的粉丝,去阿里面试,在第一面的时候被问到"Mysql的事务隔离级别". 他竟然没有回答上来,一直在私信向我诉苦. 我说,你只能怪年轻时候的你,那个时候不够努力导致现在 ...
随机推荐
- Mysql 数据类型 以及约束
数据类型 整型 默认有符号 无符号(unsigned) 和有符号 用 0 填充 zerofill 约束的作用: 保证数据的完整性 和一致性 tinyint[ -128 , 127 ] 小整数 无符号( ...
- YYModel HandyJson
数学基础: 以类型集合空间为基础,多阶向量结构间的同构映射: 若两个数学结构之间存在同构映射,那么这两个结构叫做是同构的. 基于集合空间的映射: 原理: 1.根据类型名称获得类型的元信息: 2.根据映 ...
- centos7下安装docker(26如何配置Health Check)
Docker只能从容器启动进程的返回代码判断其状态,而对于容器内部应用的运行状况基本没有了解 执行docker run命令时,通常根据dockerfile中的CMD或ENTRYPOINT启动一个进程, ...
- chrome-performance页面性能分析使用教程
运行时性能表现(runtime performance)指的是当你的页面在浏览器运行时的性能表现,而不是在下载页面的时候的表现.这篇指南将会告诉你怎么用Chrome DevTools Performa ...
- php 验证身份证号
function validation_filter_id_card($id_card){ if(strlen($id_card)==18){ return idcard_checksum18($id ...
- P2440 木材加工(二分+贪心)
思路:这里就要看往那边贪心了,因为解决的是最大值最小化,最小值最大化.也就是说当满足大于等于c时,l=mid+1这样的二分得到的就是在所有满足条件函数下的最右端. #include<iostre ...
- Python socket套接字简单例子
- pytorch例子学习——TRANSFER LEARNING TUTORIAL
参考:https://pytorch.org/tutorials/beginner/transfer_learning_tutorial.html 以下是两种主要的迁移学习场景 微调convnet : ...
- linux命令之df
功能:查看文件系统的磁盘空间使用情况 常用选项: -a 包含虚拟文件系统 -h 可易读单位显示 -i 显示 inode 信息而非块使用量 -k 1K 块的数量 -t 只显示指定文件系统为指定类型的信息 ...
- LNMP安装,FastCGI说明
1.1.工作原理讲解说明 1. 用户请求的静态文件,由nginx服务器处理,根据静态的location配置进行处理 用户请求的动态文件,由php服务进行处理,根据动态的location配置进行处理 2 ...