MySQL基础篇-13-触发器
触发器概述 触发器是 由事件来触发某个操作,这些事件包括 INSERT 、 UPDATE 、 DELETE 事件。所谓事件就是指用户的动作或者触发某项行为。如果定义了触发程序,当数据库执行这些语句时就相当于事件发生了,就会自动激发触发器执行相应的操作。
当对数据表中的数据执行插入、更新和删除操作,需要自动执行一些数据库逻辑时可以使用触发器来实现。
创建触发器1234CREATE TRIGGER 触发器名称{BEFORE|AFTER} {INSERT|UPDATE|DELETE} ON 表名FOR EACH ROW触发器执行的语句块;
表名:表示触发器监控的对象
BEFORE|AFTER:表示触发的时间。BEFORE 表示在事件之前触发;AFTER 表示在事件之后触发
INSERT|UPDATE|DELETE :表示触发的事件
INSERT 表示插入记录时触发
UPDATE 表示更新记录时触发
ELETE 表示删除记录时触发
案例
1234567891011121314151617181920212223242526 ...
MySQL基础篇-12-变量、流程控制和游标
变量 在 MySQL 数据库中,变量分为系统变量以及用户自定义变量 。
系统变量变量由系统定义,不是用户定义,属于服务器层面。启动 MySQL 服务,生成 MySQL 服务实例期间, MySQL 将为 MySQL 服务器内存中的系统变量赋值,这些系统变量定义了当前 MySQL 服务实例的属性、特征。
系统变量分类
系统变量分为全局系统变量(需要添加 global 关键字)以及会话系统变量(需要添加 session 关键字),有时也把全局系统变量简称为全局变量,有时也把会话系统变量称为 local 变量。如果不写,默认会话级别。静态变量(在 MySQL 服务实例运行期间它们的值不能使用 set 动态修改)属于特殊的全局系统变量。
每一个 MySQL 客户机成功连接 MySQL 服务器后,都会产生与之对应的会话。会话期间,MySQL 服务实例会在 MySQL 服务器内存中生成与该会话对应的会话系统变量,这些会话系统变量的初始值是全局系统变量值的复制。如下图:
全局系统变量针对于所有会话(连接)有效,但不能跨重启
会话 1 对某个全局系统变量值的修改会导致会话 2 中同 ...
MySQL基础篇-11-存储过程和存储函数
存储过程概述
概念
存储过程就是一组经过预先编译的 SQL 语句的封装。 存储过程预先存储在 MySQL 服务器上,需要执行时客户端只需要向服务器端发出调用存储过程的命令,服务器端就可以把预先存储好的这一系列 SQL 语句全部执行。
优点
简化操作,提高 SQL 语句的重用性
减少操作过程中的失误,提高效率
减少网络传输量(客户端不需要把所有的 SQL 语句通过网络发给服务器)
减少了 SQL 语句暴露的风险,也提高了数据查询的安全性
与函数相比
一旦存储过程被创建出来,使用它就像使用函数一样简单,我们直接通过调用存储过程名即可。相较于函数,存储过程是没有返回值的。
分类
分类
说明
没有参数
无参数无返回
仅仅带 IN 类型
有参数无返回
仅仅带 OUT 类型
无参数有返 回
既带 IN 又带 OUT
有参数有返回
带 INOUT
有参数有返回
创建存储过程
语法
12345CREATE PROCEDURE 存储过程名(IN|OUT|INOUT 参数名 参数类型,...)[characteristics ...]B ...
MySQL基础篇-10-视图
视图
视图是一种虚拟表,本身是不具有数据的,占用很少的内存空间
视图建立在已有表的基础上,视图赖以建立的这些表称为基表
优点
1. 操作简单
将经常使用的查询操作定义为视图,可以使开发人员不需要关心视图对应的数据表的结构、表与表之间 的关联关系,也不需要关心数据表之间的业务逻辑和查询条件,而只需要简单地操作视图即可,极大简化了开发人员对数据库的操作。
2. 减少数据冗余
视图跟实际数据表不一样,它存储的是查询语句。所以,在使用的时候,我们要通过定义视图的查询语句来获取结果集。而视图本身不存储数据,不占用数据存储的资源,减少了数据冗余
3. 数据安全
MySQL将用户对数据的 访问限制 在某些数据的结果集上,而这些数据的结果集可以使用视图来实现。用 户不必直接查询或操作数据表。这也可以理解为视图具有 隔离性 。视图相当于在用户和实际的数据表之 间加了一层虚拟表。
同时,MySQL可以根据权限将用户对数据的访问限制在某些视图上,用户不需要查询数据表,可以直接 通过视图获取数据表中的信息。这在一定程度上保障了数据表中数据的安全性。
4. 适应灵活多变的需求
...
MySQL基础篇-9-约束
约束概念
引入原因
数据完整性(Data Integrity)是指数据的精确性(Accuracy)和可靠性(Reliability)。为防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息提出约束的概念。
约束概念
约束是表级的强制规定。 可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后通过 ALTER TABLE 语句规定约束。
约束分类
根据约束数据列的限制,约束可分为
单列约束:每个约束只约束一列
多列约束:每个约束可约束多列数据
根据约束的作用范围,约束可分为:
列级约束:只能作用在一个列上,跟在列的定义后面
表级约束:可以作用在多个列上,不与列一起,而是单独定义
位置
支持的约束类型
是否可以起约束名
列级约束
列的后面
语法都支持,但外键没有效果
不可以
表级约束
所有列的下面
默认和非空不支持,其他支持
可以(主键没有效果)
根据约束起的作用,约束可分为:
NOT NULL 非空约束,规定某个字段不能为空
UNIQUE 唯一约束,规定某个 ...
MySQL基础篇-8-数据处理
添加数据
添加记录
123456789101112131415161718192021-- 单行记录INSERT INTO 表名VALUES (value1,value2,....);INSERT INTO 表名(column1 [, column2, …, columnn])VALUES (value1 [,value2, …, valuen]);-- 多行记录INSERT INTO table_nameVALUES(value1 [,value2, …, valuen]),(value1 [,value2, …, valuen]),……(value1 [,value2, …, valuen]);INSERT INTO table_name(column1 [, column2, …, columnn])VALUES(value1 [,value2, …, valuen]),(value1 [,value2, …, valuen]),……(value1 [,value2, …, valuen]);
将查询结果添加
123456INSERT INTO 目标表名(tar_colum ...










