• MySQL数据库事务与索引SQL命令语句操作代码


    一、事务

    事务:指用户定义的一系列执行SQL语句的操作,这些操作要么全部执行,要么都不执行,是一个不可分割的工作执行单元,如银行转账需执行多个SQL语句,但不允许中断

    事务作用:能够保证数据的完整性和一致性,让用户的操作更加安全

    事务四大特性

    • 原子性:强调事务中的多个操作是一个整体,不能只执行其中一部分操作
    • 一致性:强调数据库中不会保存不一致状态,即数据库总是从一个一致性的状态转换到另一个一致性的状态
    • 隔离性:强调数据库中事务之间相互不可见,即一个事务所做的修改操作在提交事务之前,对于其他事务来说是不可见的
    • 持久性:强调数据库能永久保存数据,一旦提交就不可撤销,其所做的修改会永久保存到数据库

    事务的使用:须确保表的存储引擎为InnoDB类型(MySQL默认),只有该类型才可使用事务

    表的存储引擎:提供存储数据一种机制,不同表的存储引擎提供不同的存储机制

    • MySQL查看支持的表的存储引擎命令:show engines;
      • 常用为 InnoDB 和 MyISAM
      • InnoDB:支持事务
      • MyISAM:不支持事务,优势是访问速度快,对事务无要求或以select、insert为主的可使用该存储引擎建表

    查看创建表语句可知存储引擎,如下

    修改表的存储引擎命令: alter table 表名 engine=存储引擎类型;

     事务使用

    1. 开启事务: begin; 或 start transaction;
    2. 开启事务后执行修改命令,变更数据会保存到MySQL服务端的缓存文件中,不会维护到物理表中
    3. MySQL默认采用自动提交(autocommit)模式,若未显示开启一个事务,则每条SQL语句都会当做一个事务执行提交操作
    4. 取消自动提交事务模式:set autocommit=0;
    5. 取消后需手动执行commit完成事务的提交
    6. 提交事务:commit;
    7. 提交事务是将本地缓存文件中的数据提交到物理表中,完成数据的更新
    8. 撤销/回滚事务:rollback;
    9. 撤销事务是放弃本地缓存文件中的缓存数据, 表示回到开始事务前的状态
    10. 事务结束:执行commitrollback

    说明:执行commit手动提交后,数据才真正添加到表中,由于是临时关闭自动提交模式,需重新打开另一命令连接终端查看表的数据信息

    • pymysql中conn.commit() 操作就是提交事务
    • pymysql中conn.rollback() 操作就是撤销/回滚事务

    二、索引

    索引:MySQL中又称为键,是一个特殊的文件,保存着记录表里的所有记录的位置信息,数据库索引就像目录,能够加快数据库的查询速度,是加快数据库查询速度的一种手段

    • 优点:能够加快数据查询速度
    • 缺点:创建索引会耗费时间和占用磁盘空间,且随着数据量的增加所耗费的时间也会增加
    • 使用原则
      • 索引不是越多越好,需合理使用
      • 经常更新的表应避免过多索引,经常查询的表的字段应创建索引
      • 数据量小的表不宜创建索引,因为查询全部数据时间可能比遍历索引时间还要短
      • 一个字段上相同值较多不宜创建索引,如性别只有男女,不同值较多可创建索引

    2.1使用索引 

    1. 查看表中索引:show index from 表名;
    2. 创建索引:alter table 表名 add index 索引名[可选](列名,...);
    3. 说明:若索引名不指定,默认使用字段名
    4. 删除索引:alter table 表名 drop index 索引名;
    5. 说明:若不知道索引名,可查看建表SQL语句==>show create table 表名;

    2.2验证索引查询性能

    数据库编程向teacher空表中插入100万条数据

    1. import pymysql
    2. # 创建连接对象
    3. conn = pymysql.connect(host="localhost", port=3306, user='root', password='******', database='python_sql', charset='utf8')
    4. cur = conn.cursor() # 获取游标对象
    5. for i in range(1000000): # 此处选取过大,建议改为10万
    6. cur.execute("insert into teacher(id,name,sid) values('%d'+1,'老师-%d','%d')" % (i, i, i)) # 执行SQL语句,插入100万条数据
    7. conn.commit() # 提交数据
    8. cur.close() # 关闭游标
    9. conn.close() # 关闭连接

    验证索引性能操作

    1. 开启运行事件监测:set profiling=1;
    2. 查找数据:select * from 表名 where 条件约束;
    3. 查看执行时间:show profiles;
    4. 创建索引:alter table 表名 add index 索引名(字段名);
    5. 再次查找数据:select * from 表名 where 条件约束;
    6. 再次查看执行时间:show profiles;

    具体操作举例如下

    2.3联合索引 

    联合索引:又称复合索引,即一个索引覆盖表中两个或多个字段,一般用在多个字段一起查询的情况

    优势:能够减少磁盘空间开销,每创建一个索引,就是创建了一个索引文件,会增加磁盘空间开销

    联合索引最左原则:使用联合索引应遵循最左原则,如index(name,age)支持 name 、name 和 age 组合查询,而不支持单独 age 查询,因为没有用到创建的联合索引

    学习导航: http://xqnav.top/

  • 相关阅读:
    【回归预测-PNN分类】基于粒子群算法群优化概率神经网络算法实现空气质量评价预测附matlab代码
    【计网】三、数据链路层
    【JavaSE】继承与多态(上篇)
    华为OD机考算法题:矩阵最大值
    P3396 题解
    GIT版本管理工具轻松入门 | TortoiseGit
    供应链寒冬,看qlik如何为空客Airbus数智破局
    研发管理工具选型要考虑哪些内容?
    我的react面试题笔记整理(附答案)
    java计算机毕业设计html5健身房信息管理系统源码+数据库+系统+lw文档
  • 原文地址:https://blog.csdn.net/qq_43874317/article/details/127761571