一、2022.7.22数据库课程基础知识 二、数据库文件2 数据库工具: 视图 MySQL 视图(View)是一种虚拟存在的表,同真实表一样,视图也由列和行构成,但视图并不实际存在于数据库中。行和列的数据来自于定义视图的查询中所使用的表,并且还是在使用视图时动态生成的。 只保存SQL语句 数据库中只存放了视图的定义,并没有存放视图中的数据,这些数据都存放在定义视图查询所引用的真实表中。使用视图查询数据时,数据库会从真实表中取出对应的数据。 操作 创建视图 CREATE VIEW <视图名> AS <SELECT语句> 创建的视图和基本表的字段是一样的,也可以通过指定视图字段的名称来创建视图 CREATE VIEW v_students_info ( s_id, s_name ) AS SELECT id, NAME FROM tb_students_info; 查看视图定义(和查看表类似) DESCRIBE 视图名; SHOW CREATE VIEW 视图名;(语句) 修改视图定义 ALTER VIEW <视图名> AS <SELECT语句> 修改视图名称 修改视图的名称可以先将视图删除,然后按照相同的定义语句进行视图的创建,并命名为新的视图名称 删除视图 DROP VIEW IF EXISTS <视图名1> [ , <视图名2> …] 可以像表一样进行CURD操作, 但增删改的操作受限 单表操作,只要有表的权限即可 多表操作,可以将一条语句分成多个语句 INSERT INTO v (a_id, b_id, ta_id, v1, v2) VALUES (3, 5, 3, 30, 500);会报错可以拆分为 对视图的操作会作用到物理表上 用户可以通过视图来插入、更新、删除表中的数据,因为视图是一个虚拟的表,没有数据。通过视图更新时转到基本表上进行更新,如果对视图增加或删除记录,实际上是对基本表增加或删除记录。INSERT INTO v (a_id, v1) VALUES (3, 30);和INSERT INTO v (b_id, ta_id, v2) VALUES (5, 3, 500); 优点 定制用户数据,聚焦特定的数据 不同的用户可能对不同的数据有不同的要求. 简化数据操作 在使用查询时,很多时候要使用聚合函数,同时还要显示其他字段的信息,可能还需要关联到其他表,语句可能会很长,如果这个动作频繁发生的话,可以创建视图来简化操作。 提高数据的安全性 视图是虚拟的,物理上是不存在的。可以只授予用户视图的权限,而不具体指定使用表的权限,来保护基础数据的安全。 共享所需数据 通过使用视图,每个用户不必都定义和存储自己所需的数据,可以共享数据库中的数据,同样的数据只需要存储一次。 更改数据格式 通过使用视图,可以重新格式化检索出的数据 要注意区别视图和数据表的本质,即视图是基于真实表的一张虚拟的表,其数据来源均建立在真实表的基础上。 触发器 是嵌入到 MySQL 中的一段程序,通过对数据表的相关操作来触发、激活从而实现执行。比如当对 student 表进行操作(INSERT,DELETE 或 UPDATE)时就会激活它执行 触发时机 增删改 操作前Before,操作后After new, old 触发器的优缺点 触发器的优点 触发器的执行是自动的,当对触发器相关表的数据做出相应的修改后立即执行。 触发器可以实施比 FOREIGN KEY 约束、CHECK 约束更为复杂的检查和操作。 触发器可以实现表数据的级联更改,在一定程度上保证了数据的完整性。 触发器的缺点 使用触发器实现的业务逻辑在出现问题时很难进行定位,特别是涉及到多个触发器的情况下,会使后期维护变得困难。 大量使用触发器容易导致代码结构被打乱,增加了程序的复杂性 如果需要变动的数据量较大时,触发器的执行效率会非常低 创建触发器 CREATE TRIGGER <触发器名> < BEFORE | AFTER ><INSERT | UPDATE | DELETE >ON <表名> FOR EACH Row BEGIN <触发器主体> END 注意:在命令行中要使用delimiter来重新定义结束符一般临时使用$$ 删除触发器 DROP TRIGGER [ IF EXISTS ] [数据库名] <触发器名> new old CREATE TRIGGER tr1 BEFORE UPDATE ON t22 FOR EACH ROW BEGIN SET @old = OLD.s1; SET @new = NEW.s1; END; MySQL变量的定义和赋值 变量分类 局部变量 declear声明 mysql局部变量,只能用在begin/end语句块中,比如存储过程中的begin/end语句块。 用户变量 mysql用户变量,mysql中用户变量不用提前申明,在用的时候直接用“@变量名”使用就可以了。 会话变量 mysql会话变量,服务器为每个连接的客户端维护一系列会话变量,其作用域仅限于当前连接,即每个连接中的会话变量是独立的 显示会话变量 show session variables 查询会话变量 select @@aut