• 第43天:python操作mysql、视图及触发器、事务及索引


    python操作mysql

            MySQL本身就是一款C/S架构,有服务端、有客户端,自身带了有客户端:mysql.exe

            python操作mysql就是让python这门语言成为了MySQL的客户端。

            python连接mysql操作步骤:

            1. 先链接MySQL
            2. 在Python中书写SQL语句
            3. 开始执行SQL语句,拿到结果
            4. 在Python中做处理(进一步对数据做处理)

            以上操作需要使用一个第三方的模块:

            pymysql、 mysqldb、 mysqlclient。  

            写一个py文件,连接数据库并查询数据库中的表

    1. import pymysql
    2. conn = pymysql.connect(
    3. host='127.0.0.1',
    4. port=3306,
    5. user='root',
    6. password='123456',
    7. db='db10',
    8. charset='utf8'
    9. )
    10. cur = conn.cursor(cursor=pymysql.cursors.DictCursor)
    11. sql = 'select * from student'
    12. cur.execute(sql)
    13. res = cur.fetchall()
    14. print(res)

    视图

            视图就是通过查询得到一张虚拟表,然后保存下来,下次直接使用即可

            视图的作用:

            如果要频繁使用一张虚拟表,可以不用重复查询

            创建视图:

    1. create view teacher2course as
    2. select * from teacher inner join course on teacher.tid = course.teacher_id;

            删除视图:

    drop view teacher2course;

            注意事项:

            1、在硬盘中,视图只有表结构文件,没有表数据文件
            2、视图通常是用于查询,尽量不要修改视图中的数据

     触发器

            足对某张表数据的增、删、改的情况下,自动触发的功能称之为触发器。

            触发器的作用:

            在对某一张表数据增insert、删delete、改update的行为,这类行为一旦执行就会触发触发器的执行,即自动运行另外一段sql代码。

            创建触发器:

    1. create trigger 触发器的名字 before/after insert/update/delete on 表名 for each row
    2. begin
    3. sql语句
    4. end

             针对插入:

    1. create trigger tri_after_insert_t1 after insert on 表名 for each row
    2. begin
    3. sql代码。。。
    4. end
    5. create trigger tri_after_insert_t2 before insert on 表名 for each row
    6. begin
    7. sql代码。。。
    8. end

            针对删除:

    1. create trigger tri_after_delete_t1 after delete on 表名 for each row
    2. begin
    3. sql代码。。。
    4. end
    5. create trigger tri_after_delete_t2 before delete on 表名 for each row
    6. begin
    7. sql代码。。。
    8. end

            针对修改:

    1. create trigger tri_after_update_t1 after update on 表名 for each row
    2. begin
    3. sql代码。。。
    4. end
    5. create trigger tri_after_update_t2 before update on 表名 for each row
    6. begin
    7. sql代码。。。
    8. end

            注意事项:

            在书写sql代码的时候结束符是; 而整个触发器的结束也需要分号;这就会出现语法冲突 需要我们临时修改结束符号。

             修改符号:

    1. delimiter $$
    2. delimiter ;

            删除触发器:

    drop trigger tri_after_insert_cmd;

    事务

            事务可以包含一些sql语句,这些sql语句要么同时成功,要么一个都别想成功,称之为事务的原子性。

            事务的作用:

            保证了对数据操作的数据安全性

            事务的四种属性:

            1.原子性(atomicity):一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
            2.一致性(consistency):事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
            3.隔离性(isolation):一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
            4.持久性(durability):持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

            以上四个属性通常称为ACID特性。

    索引

            索引就是一种数据结构,类似于书的目录。意味着以后再查数据应该先找目录再找数据,而不是用翻页的方式查询数据,索引在MySQL中也叫做“键”,是存储引擎用于快速找到记录的一种数据结构。

            键的种类:

            primary key
            unique key
            index key 

            注意:

             上面三种key前两种除了有加速查询的效果之外还有额外的约束条件(primary key:非空且唯一,unique key:唯一),而index key没有任何约束功能只会帮你加速查询

            索引的本质:

            通过不断地缩小想要获取数据的范围来筛选出最终想要的结果,同时把随机的事件变成顺序的事件,也就是说,有了这种索引机制,我们可以总是用同一种查找方式来锁定数据。 

            索引的影响:

            1.在表中有大量数据的前提下,创建索引速度会很慢(建表的时候,如果明显需要索引,就提前加上)
            2.在索引创建完毕后,对表的查询性能会大幅度提升,但是写的性能会降低 

            聚集索引(primary key)

            指的就是表的主键,特点:叶子结点放的一条条完整的记录。 

            辅助索引(unique,index)

            就是给id以外的其他字段建立索引,特点:叶子结点存放的是辅助索引字段对应的那条记录的主键的值。 

  • 相关阅读:
    JavaScript【CSS操作、事件处理程序、DOM0级事件处理、DOM2级事件处理、事件类型之鼠标事件、事件流 、Event事件对象、事件类型之键盘、事件事件类型之表单】(十三)
    基于UDP协议的聊天室项目
    科技驱动固定资产管理变革:RFID技术的前沿应用
    Android RecyclerView使用ListAdapter高效刷新数据
    【leetcode】往完全二叉树添加节点
    oh-my-posh安装过程问题及注意事项
    每日一题 53. 最大子数组和(中等,数组)
    babyheap_0ctf_2017 详细解析【BUUCTF】
    shell脚本,获取所在目录的绝对路径,绝对路径
    数组循环右移(加强版)
  • 原文地址:https://blog.csdn.net/Mrdong200144/article/details/134063583