【面试】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

原文地址:https://www.cnblogs.com/niwotaxuexiba/p/8116586.html

时间: 2024-11-10 00:11:51

【面试】MySQL的事务和索引的相关文章

第五章 MySQL事务,视图,索引,备份和恢复

第五章 MySQL事务,视图,索引,备份和恢复 一.事务 1.什么是事务 事务是一种机制,一个操作序列,它包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求.要么都执行,要么都不执行. 事务是作为最小的控制单元来使用的,特别使用与多用户同时操作的数据库系统. 2.为什么需要事务 事务(transaction)是指将一系列数据操作捆绑成为一个整体进行统一管理,如果某一事务执行成功,则在该事务中进行的所有数据均会提交,成为数据库中永久的组成部分.如果事务执行遇到错误且

MySQL 系列(三)你不知道的 视图、触发器、存储过程、函数、事务、索引、语句

转自:http://www.cnblogs.com/suoning/p/5744849.html 本章内容: 视图.增/删/改/查 触发器.增/删/改/查 存储过程.增/删/改/查 存储过程三种传参,pymysql 怎么用? 函数.增/删/改/查/return值 内置函数 事务 索引! 一.视图 视图是查询命令结果构成的一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集合,并可以当作表来查询使用. 1.创建视图 --格式:C

mysql 拾遗提高(函数、事务、索引)

目录 1.tips 2.事务(transaction) 3.索引(index) 4.数据库的导出和备份 5.函数 6.防SQL注入 7.使用Explain分析SQL语句 8.视图(view) 1.tips 1).数据库不区分大小写: 2).插入新数据时忽略重复数据,可在INSERT后加关键字IGNORE即可 3).通过UNION操作符来连接两个以上的SELECT语句结果组合到一个结果到同一个集合中: 格式: select... from... where... union distinct se

函数,事务,索引,存储过程

重点,事务,索引: --常见的安全问题: sql注入:用户输入不合法 通过攻击服务器的安全漏洞窃取数据库 一种常见的方式 在黑市上可以买到数据库信息 装库,利用从别处叨叨的用户名和密码,尝试在另外一个站点上登录,从而得到更多 信息 安全建议: 1.对数据库设计的建议:在表中存储加密后的密码数据,常见加密方式 :md5,sha1 2.对网站程序员的建议:登录时添加验证码 3.对普通用户的建议:在多个站点间使用不同的密码 oauth:授权登录,微信,微博,新浪 函数: ? functions;  查

数据库理论之视图、事务、索引、优化查询

数据库理论之视图.事务.索引.优化查询 一.视图 灵魂三问 1.什么是视图 视图就是通过查询得到一张虚拟表,然后保存下来,下次直接使用即可 2.为什么要用视图 如果要频繁的使用一张虚拟表,可以不用重复查询 3.如何使用视图 create view 视图名 as sql语句 注意:创建出来的视图只有表结构,数据来源还是原来的表 视图通常都是用于查询,所以尽量不要修改视图中的数据 思考:开发过程中应不应该使用视图? 不应该 二.触发器 命名规则及理论 在满足对某张表数据的增删改的情况下,自动触发的功

MySQL的事务

MySQL的事务 1.事务:事务是由一步或者几步数据库操作序列组成的逻辑执行单元,这一系列操作要么全部执行,要么全部放弃执行. 2.事务具备的四个特性(简称为ACID性): (1)原子性(Atomicity): 事务是应用中最小的执行单位,具有不可再分的特征,事务是应用中最小的逻辑执行体: (2)一致性(Consistency): 事务执行的结果必须使数据库从一个一致性状态转变到另一个一致性的状态.当数据库只包含事务成功提交的结果时,数据库处于一致性状态.如果系统运行发生中断,某个事务尚未完成而

Mysql建表与索引使用规范详解

一. MySQL建表,字段需设置为非空,需设置字段默认值. 二. MySQL建表,字段需NULL时,需设置字段默认值,默认值不为NULL. 三. MySQL建表,如果字段等价于外键,应在该字段加索引. 四. MySQL建表,不同表之间的相同属性值的字段,列类型,类型长度,是否非空,是否默认值,需保持一致,否则无法正确使用索引进行关联对比. 五. MySQL使用时,一条SQL语句只能使用一个表的一个索引.所有的字段类型都可以索引,多列索引的属性最多15个. 六. 如果可以在多个索引中进行选择,My

Mysql技术内幕——表&索引算法和锁

表 4.1.innodb存储引擎表类型 innodb表类似oracle的IOT表(索引聚集表-indexorganized table),在innodb表中每张表都会有一个主键,如果在创建表时没有显示的定义主键则innodb如按照如下方式选择或者创建主键.首先表中是否有唯一非空索引(unique not null),如果有则该列即为主键.不符合上述条件,innodb存储引擎会自动创建一个6字节大小的指针,rowid(). 4.2.innodb逻辑存储结构 innodb的逻辑存储单元由大到小分别是

Oracle 事务、索引、视图

1.事务(Transaction) 1.完整事务:分为显示   关键字:只有用到commit 才能真正写入数据库 隐示事务:连接--set   autocommit on(针对一个连接) 正常执行完成的:create.alter.drop 正常执行完场的:grant.revoke 正常退出SQLPlus或者SQL Developer等客户端 --回滚:RollBack只能对未提交的数据撤消,已经commit的数据无法撤销,业务commit之后已经持久化到数据库中. 2.部分事务:关键字--sav