第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文件,连接数据库并查询数据库中的表

import pymysql

conn = pymysql.connect(
    host='127.0.0.1',
    port=3306,
    user='root',
    password='123456',
    db='db10',
    charset='utf8'
)

cur = conn.cursor(cursor=pymysql.cursors.DictCursor)
sql = 'select * from student'
cur.execute(sql)
res = cur.fetchall()
print(res)

视图

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

        视图的作用:

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

        创建视图:

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

        删除视图:

drop view teacher2course;

        注意事项:

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

 触发器

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

        触发器的作用:

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

        创建触发器:

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

         针对插入:

create trigger tri_after_insert_t1 after insert on 表名 for each row
begin
    sql代码。。。
end 
create trigger tri_after_insert_t2 before insert on 表名 for each row
begin
    sql代码。。。
end

        针对删除:

create trigger tri_after_delete_t1 after delete on 表名 for each row
begin
    sql代码。。。
end
create trigger tri_after_delete_t2 before delete on 表名 for each row
begin
    sql代码。。。
end

        针对修改:

create trigger tri_after_update_t1 after update on 表名 for each row
begin
    sql代码。。。
end
create trigger tri_after_update_t2 before update on 表名 for each row
begin
    sql代码。。。
end

        注意事项:

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

         修改符号:

delimiter $$
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以外的其他字段建立索引,特点:叶子结点存放的是辅助索引字段对应的那条记录的主键的值。 

你可能感兴趣的:(mysql,数据库)