索引
通俗的讲,新华字典前面的部首与拼音查询就是索引,通过前面的查询,能迅速定位这个字在这本书的什么位置,节省了大量翻找的时间。在庞大的数据库中,当你需要查询某个数据时,没有索引,数据库会遍历整个库的数据查找,浪费了大量的时间与资源,而索引,存储着索引值和这个值所对应的物理地址,查询索引,直接前往对应的物理地址查询数据,快速,便捷。
索引的创建原则:
■表的主键、外键必须有索引
■记录数超过300行的表应该有索引
■经常与其他表进行连接的表,在连接字段上应该建立索引
■唯一性太差的字段不适合建立索引
■更新太频繁地字段不适合创建索引
■经常出现在where子句中的字段,特别是大表的字段,应该建立索引
■索引应该建在选择性高的字段上
■索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引
普通索引
最普通的索引类型,没有唯一性的限制
唯一性索引
主键索引
组合索引
全文索引
创建索引的原创依据-1
- 表的主键、外键必须有索引
- 记录数超过300行的表必须有索引
- 经常与其他进行连接的表,在连接字段上应该建立索引
- 唯一性太差的字段不适合创建索引
- 更新太频繁的字段不适合创建索引
创建索引的原创依据-2
-
经常出现在where子句中的字段,特别是大表的字段,应该建立索引
-
索引应该建在选择性高的字段上
-
索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引
查看索引的方法
- 查看索引语法
SHOW INDEX FROM table_name;
SHOW KEYS FROM table_name;
- 查看索引的示例
mysql> SHOW INDEX FROM player;
mysql> SHOW KEYS FROM player;
删除索引的方法
- 删除索引语法
DROP INDEX index_name ON table_name;
ALTER TABLE table_name DROP INDEX index_name;
- 删除索引的示例
mysql> drop index index_puid on mapping;
mysql> alter table mapping drop index gameid;
事务
概述:什么是事务?
比如银行转账,转账涉及到两个账户,一个账户的数据减少,一个账户的数据增加,且变化的数据 相等,转账是一个完整的操作,事务中的操作是一个整体,分割后,数据就会出现错误,出现钱单方面的减少或增加的现象,转账完成后
事务的ACID特点
原子性(Atomicity)
事务是一个完整的操作,事务的各元素是不可分的
事务中的所有元素必须作为一个整体提交或回滚
如果事务中的任何元素失败,则整个事务将失败
一致性(Consistency)
当事务完成时,数据必须处于一致状态
在事务开始前,数据库中存储的数据处于一致状态
在正在进行的事务中,数据可能处于不一致的状态
当事务成功完成时,数据必须再次回到已知的一致状态
隔离性(Isolation)
对数据进行修改的所有并发事务是彼此隔离的,表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务
修改数据的事务可在另一个使用相同数据的事务开始之前访问这些数据,或者在另一个使用相同数据的事务结束之后访问这些数据
持久性(Durability)
指不管系统是否发生故障,事务处理的结果都是永久的
一旦事务被提交,事务的效果会被永久地保留在数据库中
事务控制语句
语句 | 解释 |
---|---|
BEGIN或START TRANSACTION | 开启事务 |
COMMIT | 提交事务 |
ROLLBACK | 回滚 |
SAVEPOINT identifier | 设置断点 |
RELEASE SAVEPOINT identifier | 删除断点 |
ROLLBACK TO identifier | 回滚到断点 |
SET TRANSACTION | 设置事务中的属性 |
事务的控制方法
在mysql中,事务是默认提交的,提交MYSQL语句时,自动提交了一个事务,可以看增量备份这篇博客的查看sql文件内容,能看到每一句命令都是begin 与commit的一个过程。
方法一:用BEGIN,ROLLBACK,COMMIT来实现
BEGIN 开始一个事务
ROLLBACK 事务回滚
COMMIT 事务确认
方法二:直接用SET来改变MySQL的自动提交模式
SET AUTOCOMMIT=0 禁止自动提交
SET AUTOCOMMIT=1 开启自动提交
注意:
set 的方法属于永久的设置方法,当状态为0时,直到重新设置为1,否则接下来的命令都是写在内存当中,使用rollback就能回滚回去,当使用commit提交后,前面的命令存入硬盘,成为提交的数据,但接下来的命令,仍然处于内存中。
方法1:
alter table 表名 engine=引擎;
方法2:
vi /etc/my.cnf
在[mysqld]配置段内添加,指定默认引擎并重启服务;
default-storage-engine=innoDB
重启mysqld
方法3:创建表时指定引擎
create table 表名 (字段…) engine = 引擎;
方法4:
Mysql_convert_table_format–user=root–password=密码 --sock=/tmp/mysql.sock --engine = 引擎 库名 表名
yum -y install perl-DBI perl-DBD-MySQL
/usr/local/mysql/bin/mysql_convert_table_format --user=root --password=‘123456’ --sock=/tmp/mysql.sock auth