mysql四个内置对象
触发器、事务、视图、索引
一、使用触发器处理的相关问题
一种特殊的存储过程
1.模拟检查约束 mysql数据库中检查约束不生效
drop trigger if exists tri_addStudent;
create trigger tri_addStudent
before insert on student
for each row
begin
#验证本次新增的年龄 是否满足18-40
if(new.stuAge not between 18 and 40)
then
#手动抛错
signal sqlstate 'TX001' set message_text='age out of range';
set new.stuAge=18;
end if;
end;
drop trigger if exists tri_add;
create trigger tri_add
before/after insert/update/delete on 表名
for each row
begin
#执行操作1、用new.列名获取,删除用old.列名,修改相当于删除后新增
2、手动抛错(无论before、after都会阻止修改操作)
signal sqlstate 'TX001' set message_text='age out of range';
3、触发器不能执行打印操作,不能返回
end;
2.级联删除 慎重使用
drop trigger if exists tri_deleteDept;
create trigger tri_deleteDept
before delete on department
for each row
begin
#在删除部门数据前 根据部门编号 找到对应的员工进行删除
delete from employee where deptId=old.deptId;
end;
3.关联更新操作
二、事务
1、事务的作用 将多个独立的SQL指令组合成一个最小的逻辑单元(整体)
2、事务的概念
1)事务是作为单个逻辑工作单元执行的一系列操作;
2)多个操作为一个整体向系统提交,要么都执行,要么都不执行;
3)事务是一个不可分割的工作逻辑单元
3、事务的四大特性(ACID属性)
- A 原子性:事务是一个完整的操作,各个操作是不可分割的,要么都执行,要么都不执行
- C 一致性:当事务完成时,数据必须处于一致状态
- I 隔离性:并发事务之间彼此隔离、独立,他不应以任何方式依赖于或影响其他事务
- D 永久性:事务完成后,他对数据库的修改将被永久保持
4、语法
- 如果没有显式的提供事务的开始 那么使用隐式事务
- 显式开启事务 start transaction
- 提交事务 commit
- 回滚事务 rollback
5、sql语句管理事务
一、开始事务:
start transaction;
二、执行代码操作
三、提交事务:
commit;
四、回滚事务:
rollback;
6、判断某一条语句执行是否出错
- 可以使用 row_count()函数 获取上一条SQL指令执行后受影响的行数
注:如果没有显示的提供事务的开始,那么使用隐式事务
三、 视图 只针对sql 查询语句
1、可以把视图看做是 一张查询结果集/虚拟表的存储
2、什么时候使用视图(只针对sql查询语句)
- 当只希望向角色展示表中的部分行 部分列时
- 当频繁需要进行复杂表连接的时候
3、对数据表做出的数据更新 将即时影响视图的显示
4、对视图不推荐进行增删改操作(能做 如果视图是正好对应一张表的完整结构)
5、语法
create view 名字
as
查询语句;
四、索引
1、数据的保存方式
(1)文件 一张表对应一个文件 .frm
(2)文件中包含数据页
- 直接存储数据 物理顺序
- 索引页 是特殊的数据页 用于保存索引
2、索引的分类
- 主键索引 primary key
- 唯一索引 unique
- 普通索引
- 全文索引
3、创建语法
create index 索引名称 on 表名(列);
- 对于该列有依赖的条件筛选或排序效率将提升
drop index 索引名 on 表名