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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
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()


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6天前
|
存储 关系型数据库 MySQL
MySQL数据库进阶第六篇(InnoDB引擎架构,事务原理,MVCC)
MySQL数据库进阶第六篇(InnoDB引擎架构,事务原理,MVCC)
|
1天前
|
SQL 关系型数据库 MySQL
MySQL性能优化实战:从索引策略到查询优化
MySQL性能优化聚焦索引策略和查询优化。创建索引如`CREATE INDEX idx_user_id ON users(user_id)`可加速检索;复合索引考虑字段顺序,如`idx_name ON users(last_name, first_name)`。使用`EXPLAIN`分析查询效率,避免全表扫描和大量`OFFSET`。通过子查询优化分页,如LIMIT配合内部排序。定期审查和调整策略以提升响应速度和降低资源消耗。【6月更文挑战第22天】
85 2
|
1天前
|
关系型数据库 MySQL 数据库
MySQL企业级开发重点之事物和索引
MySQL企业级开发重点之事物和索引
8 2
|
3天前
|
存储 SQL 关系型数据库
初识mysql索引 - 小白篇
初识mysql索引 - 小白篇
|
10天前
|
监控 关系型数据库 MySQL
MySQL索引的创建步骤是什么?
【6月更文挑战第15天】MySQL索引的创建步骤是什么?
16 5
|
6天前
|
存储 SQL 关系型数据库
MySQL数据库进阶第四篇(视图/存储过程/触发器)
MySQL数据库进阶第四篇(视图/存储过程/触发器)
|
6天前
|
SQL 存储 关系型数据库
MySQL数据库进阶第二篇(索引,SQL性能分析,使用规则)
MySQL数据库进阶第二篇(索引,SQL性能分析,使用规则)
|
6天前
|
关系型数据库 MySQL 数据库
MySQL数据库基础第四篇(多表查询与事务)
MySQL数据库基础第四篇(多表查询与事务)
|
9天前
|
关系型数据库 MySQL 数据库
mysql索引优化
【6月更文挑战第16天】mysql索引优化
13 2
|
10天前
|
存储 关系型数据库 MySQL
MySQL索引的限制
【6月更文挑战第15天】MySQL索引的限制
10 3

热门文章

最新文章