【面试】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的事务隔离级别". 他竟然没有回答上来,一直在私信向我诉苦. 我说,你只能怪年轻时候的你,那个时候不够努力导致现在 ...
随机推荐
- 忽略Git钩子
https://blog.csdn.net/alps1992/article/details/80464700 pre-commit GIT_DIR/hooks/pre-commit 这个钩子被 gi ...
- Java锁的种类以及辨析(二):自旋锁的其他种类
作者:山鸡 锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized 和 ReentrantLock等等 ) .这些已经写好提供的锁为我们开发提供了便利,但是锁的具 ...
- centos7下kubernetes(6。运行应用)
Deployment 从一个例子开始 kubectl run nginx-deployment --image=nginx:1.7.9 --replicas=2 kubectl get deploym ...
- centos7下安装docker(21docker swarm集群创建)
创建swarm集群: 实验环境:盗图 swarm-manager是manager node,swarm-worker1和swarm-worker2是worker node. 所有节点的docker版本 ...
- 转://Oracle打补丁方法论
成熟的IT企业,往往会有自己的补丁计划.如一年打几次补丁,打哪一个补丁. 在补丁之前,需要进行补丁分析,一份比较完善补丁分析,往往能帮助企业未雨绸缪,提前将可能引发的问题先解决掉,保证生产的稳定和安全 ...
- 转://Linux下误删除/home目录的恢复方法
一般情况下,我们在安装Oracle数据库的时候,都会创建一个Oracle用户,用该用户来安装和管理Oracle.Oracle用户的根目录就是/home/oracle. 通常安装Oracle数据库是按照 ...
- vue组件详解——使用props传递数据
每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code 在 Vue 中,父子组件的关系可以总结为 props向下传递,事件向上传递.父组件通过 ...
- jenkins忘记管理员密码之解决方案
jenkins忘记管理员密码怎么办? 通常有这么几种解决方案,如下所示: (1)进入对应的用户目录文件夹,以ubuntu16.04为例,jenkins安装目录为/var/lib/jenkins进入到该 ...
- 获得数值型数组的所有元素之和(分别使用增强for循环和普通for循环)
package com.Summer_0419.cn; /** * @author Summer * 获得数值型数组的所有元素之和 */public class Test_Method13 { pub ...
- JS上传文件、导入文件
//开始导入 function Import() { var filepath = $('#txtUpload').val(); //校验是否选择表格 if (filepath == '') { $( ...