0
点赞
收藏
分享

微信扫一扫

Python(十二、视图、事务、索引)

楚木巽 2021-09-27 阅读 36

视图(一般只针对查询)

1. 问题

  • 解决办法:定义视图

2. 视图是什么

3. 定义视图

create view 视图名称 as select语句;

4. 查看视图

show tables;

5. 使用视图

select * from v_stu_score;

6. 删除视图

drop view v_stu_sco;
  1. 视图demo


  1. 视图的作用

事务

1. 为什么要有事务

  • 例如:

A用户和B用户是银行的储户,现在A要给B转账500元,那么需要做以下几件事:

检查A的账户余额>500元;

A 账户中扣除500元;

B 账户中增加500元;


事务四大特性(简称ACID)

  • 原子性(Atomicity)
  • 一致性(Consistency)
  • 隔离性(Isolation)
  • 持久性(Durability)
  • 检查支票账户的余额高于或者等于200美元。
  • 从支票账户余额中减去200美元。
  • 在储蓄帐户余额中增加200美元。
  • start transaction;
  • select balance from checking where customer_id = 10233276;
  • update checking set balance = balance - 200.00 where * customer_id = 10233276;
  • update savings set balance = balance + 200.00 where customer_id * = 10233276;
  • commit;
  • 原子性(atomicity)
  • 一致性(consistency)
  • 隔离性(isolation)
  • 持久性(durability)

事务命令

查看表的创建语句,可以看到engine=innodb

-- 选择数据库
use jing_dong;
-- 查看goods表
show create table goods;

开启事务,命令如下:

  • 开启事务后执行修改命令,变更会维护到本地缓存中,而不维护到物理表中
begin;
或者
start transaction;

提交事务,命令如下

将缓存中的数据变更维护到物理表中
commit;

回滚事务,命令如下:

放弃缓存中变更的数据
rollback;

注意

  • 修改数据的命令会自动的触发事务,包括insert、update、delete
  • 而在SQL语句中有手动开启事务的原因是:可以进行多次数据的修改,如果成功一起成功,否则一起会滚到之前的数据

索引

1. 思考


一般的应用系统对比数据库的读写比例在10:1左右(即有10次查询操作时有1次写的操作),

而且插入操作和更新操作很少出现性能问题,

遇到最多、最容易出问题还是一些复杂的查询操作,所以查询语句的优化显然是重中之重


2. 解决办法

3. 索引是什么

4. 索引目的

5. 索引原理

6. 索引的使用

  • 查看索引
show index from 表名;
  • 创建索引
    • 如果指定字段是字符串,需要指定长度,建议长度与定义字段时的长度一致
    • 字段类型如果不是字符串,可以不填写长度部分
create index 索引名称 on 表名(字段名称(长度))
  • 删除索引
drop index 索引名称 on 表名;

7. 索引demo

  • 创建测试表testindex
create table test_index(title varchar(10));
  • 使用python程序(ipython也可以)通过pymsql模块 向表中加入十万条数据
from pymysql import connect

def main():
    # 创建Connection连接
    conn = connect(host='localhost',port=3306,database='jing_dong',user='root',password='mysql',charset='utf8')
    # 获得Cursor对象
    cursor = conn.cursor()
    # 插入10万次数据
    for i in range(100000):
        cursor.execute("insert into test_index values('ha-%d')" % i)
    # 提交数据
    conn.commit()

if __name__ == "__main__":
    main()

7.3. 查询

  • 开启运行时间监测:
set profiling=1;
  • 查找第1万条数据ha-99999
select * from test_index where title='ha-99999';
  • 查看执行的时间:
show profiles;
  • 为表title_index的title列创建索引:
create index title_index on test_index(title(10));
  • 执行查询语句:
select * from test_index where title='ha-99999';
  • 再次查看执行的时间
show profiles;
  1. 注意:
举报

相关推荐

0 条评论