MySQL触发器 ,视图索引 , 事务

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL触发器 ,视图索引 , 事务

MySQL进阶二

补充触发器知识

# 删除触发器代码
drop trigger 触发器名;
# 当一个学员发生转班,班级对应的总数进行同步变化
# 当一个学员发生转班,班级对应的总数进行同步变化
delimiter !!
create trigger movestudent after update on stu1 for each ROW
BEGIN
  #定义两个变量
  declare numOld int; # 定义旧班级人数
  declare numNew int; # 定义新班级人数
  set numOld = (select stu_num from stu2 where class = old.class);
  select  numOld into @a;
  
  set numNew = (select stu_num from stu2 where class = new.class);
  select numNew into @b;
  update stu2 set stu_num = numOld - 1 where class = old.class;
  update stu2 set stu_num = numNew + 1 where class = new.class;
end !!
delimiter;
update stu1 set class = 2302 where name = "阿涛";
select @a;
select @b;
drop trigger movestudent;

1、视图

视图: 是一个虚拟表,内容就是由查询结果定义
视图不是真实的数据,只是一个数据映射
但是视图的结构和真正的表结构是一样
视图作用:
简化高频或者复杂的查询语句
高并发: 数据库也会有并发压力
商品展示查询就要用到视图表
而且还可以起到一个权限
视图表只能查询操作
# 创建视图表
create view 视图名称 as select 已查询语句;
# 查询当前数据库所有的视图
create view stu_2301 as 
select * from stu1 where class = 2301;
# 删除视图表
drop view 视图名称;
# 查询当前数据库所有视图
# 格式
show full tables in 数据库名称 where table_type like "view";
show full tables in demo924 where table_type like "view";

2、索引

索引:index 就是目录
一般如果你的表查询很多,一般可以用索引进行查询
目的:优化我们的查询速度
1.主键索引  (primary key)
2.普通索引
3.唯一索引
# 在创建表到时候就要创建索引
# 格式
create table 表名(
  字段名 数据类型,
    字段名 数据类型,
  
    # 普通索引
    index 索引名称(字段名),
    # 唯一索引
    unique 索引名称(字段名)
);
# 以后五次格式报错同学,罚抄10遍格式样式
# 能创建表后插入索引
create index 索引名称 on 表名(字段名);
create unique 索引名称 on 表名(字段名);
# ---------------------------
create table t12(
  name char(5),
  index  name_index(name)
);
insert into t12 values 
("守护"),
("秃头"),
("11166", );
# 查询索引
select * from t12 where name = "秃头";

3、存储引擎

其实储存引擎就是mysql如何储存这个数据的
InnoDB 流行储存引擎
SHOW ENGINES;

6、事务(重点)

it 必须学习
事务处理 : 是用来维护数据库的完整性,保证sql语句要么就全部执行,要么全部不执行
事务处理: select,insert, update, delete 语句
事务一旦提交,就不会发生丢失的现象
事务要满足四个条件:原子性, 一致性, 隔离性, 持久性
原子性:一组事务, 所有sql语句要么就全部进行成功,要全部不执行, 之前执行的全部执行回滚
一致性:事务b撤回的数据应该来自事务A,总共两者的总数是一致的
隔离性:各自的事务都是独立运行,一个事务处理后的结果如果影响到其他事务的时候, 其他事务需要先撤回
持久性:事务的持久性(也就永久性)是指一旦事务提交成功了,对数据修久性。
事务隔离级别:
1.读取未提交
事务A和事务B, 事务A没有提交数据,事务B读取到,但是不是持久性的,可以回滚的,这里事务b读取的数据叫"脏数据"。
2.读取已提交
事务A和事务B 事务A要提交后数据,事务B才能读取到
一句话就是我们读取的数据都是数据库真实数据
但是这个隔离导致不可重复读取
就是同一个事务,只能读取一次
这种不会用
3.可重复读取
事务A 和 事务B , 事务A提交的数据,事务b可以重复读取
这种隔离是sql默认隔离级别
4.串行化
事务A和事务B,事务A操作数据库的是,事务b只能排队等待
这种隔离级别很少使用,吞吐量太低,用户体验差
/*
事务还可以分两个大类: 隐性事务和显性事务
隐性事务很简单: 就是insert ,delete, update 都是隐性事务。都是默认提交
显性事务: 可以看出事务过程的,有明显的开始与结束标志,
  
*/
# 开始显性事务
begin;
insert into t12 values("放屁蹦出诗");
commit;
select * from t12;
# 开始显性事务
begin;
insert into t12 values("放屁蹦出诗");
select * from t12;
rollback;
commit;

7、pymysql(重点)

使用python 执行mysql的sql语句进行增删改查
pip install pymysql
import pymysql
# 开始建立数据库对象
db = pymysql.connect(
    # host 地址,我们主机地址localhost,或者IP地址127.0.0.1
    host="localhost",
    # 数据库用户名
    user="root",
    # 密码
    password="root",
    # 数据库字符编码
    charset="utf8",
    # 你要用的数据库名称
    database="demo924"
)
# 创建游标对象(理解为指针),代表该链接的数据库
# cursor专门创建游标
cur = db.cursor()
# 这里不需要分号,sql语句不区分大写
sql = "DeSc stu1"
# 需要执行sql语句
cur.execute(sql)
# 查询返回结果fetchall(), fetchone(), fetchany()
# 返回一个嵌套元组
print(cur.fetchall())
# 如何设置显性事务
# 插入多个数据
sql = "insert into stu1(name,class,sex) values (%s, %s ,%s) "
values = [
    ("xxx6", '2301', "女"),
    ("xxx7", '2303', "女"),
    ("xxx8", '2302', "男")
]
# 使用多条数据进行结合方法executemany(sql语句, 数据)
cur.executemany(sql, values)
db.commit()


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
27天前
|
存储 关系型数据库 MySQL
阿里面试:为什么要索引?什么是MySQL索引?底层结构是什么?
尼恩是一位资深架构师,他在自己的读者交流群中分享了关于MySQL索引的重要知识点。索引是帮助MySQL高效获取数据的数据结构,主要作用包括显著提升查询速度、降低磁盘I/O次数、优化排序与分组操作以及提升复杂查询的性能。MySQL支持多种索引类型,如主键索引、唯一索引、普通索引、全文索引和空间数据索引。索引的底层数据结构主要是B+树,它能够有效支持范围查询和顺序遍历,同时保持高效的插入、删除和查找性能。尼恩还强调了索引的优缺点,并提供了多个面试题及其解答,帮助读者在面试中脱颖而出。相关资料可在公众号【技术自由圈】获取。
|
28天前
|
存储 SQL 关系型数据库
MySQL的事务隔离级别
【10月更文挑战第17天】MySQL的事务隔离级别
97 43
|
1月前
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
61 3
Mysql(4)—数据库索引
|
18天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
85 1
|
1月前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1633 14
|
29天前
|
存储 关系型数据库 MySQL
如何在MySQL中进行索引的创建和管理?
【10月更文挑战第16天】如何在MySQL中进行索引的创建和管理?
58 1
|
1月前
|
SQL 关系型数据库 MySQL
阿里面试:MYSQL 事务ACID,底层原理是什么? 具体是如何实现的?
尼恩,一位40岁的资深架构师,通过其丰富的经验和深厚的技術功底,为众多读者提供了宝贵的面试指导和技术分享。在他的读者交流群中,许多小伙伴获得了来自一线互联网企业的面试机会,并成功应对了诸如事务ACID特性实现、MVCC等相关面试题。尼恩特别整理了这些常见面试题的系统化解答,形成了《MVCC 学习圣经:一次穿透MYSQL MVCC》PDF文档,旨在帮助大家在面试中展示出扎实的技术功底,提高面试成功率。此外,他还编写了《尼恩Java面试宝典》等资料,涵盖了大量面试题和答案,帮助读者全面提升技术面试的表现。这些资料不仅内容详实,而且持续更新,是求职者备战技术面试的宝贵资源。
阿里面试:MYSQL 事务ACID,底层原理是什么? 具体是如何实现的?
|
19天前
|
存储 安全 关系型数据库
2024 Mysql基础与进阶操作系列之MySQL触发器详解(21)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]
MySQL触发器的使用场景之数据完整性约束、如何具体创建person的日志表、触发器与存储过程的对比与选择、触发器的性能和注意事项等具体操作详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
19天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第26天】数据库作为现代应用系统的核心组件,其性能优化至关重要。本文主要探讨MySQL的索引策略与查询性能调优。通过合理创建索引(如B-Tree、复合索引)和优化查询语句(如使用EXPLAIN、优化分页查询),可以显著提升数据库的响应速度和稳定性。实践中还需定期审查慢查询日志,持续优化性能。
47 0
|
30天前
|
监控 关系型数据库 MySQL
mysql8索引优化
综上所述,深入理解和有效实施这些索引优化策略,是解锁MySQL 8.0数据库高性能查询的关键。
30 0

热门文章

最新文章