发布网友 发布时间:2022-04-22 21:01
共6个回答
懂视网 时间:2022-05-02 18:13
视图是由查询结果构成的一张虚拟表,和真实的表一样,带有名称的列和行数据
强调:视图是永久存储的,但是视图存储的不是数据,只是一条sql语句
视图的特点:
优点:
create view 视图名称 as sql 查询语句 例子:CREATE view test_view as SELECT * from test;
select * from 视图名 [where 条件]
alter view 视图名称 AS SQL语句; 例子:ALTER view test_view as SELECT * from test_view WHERE salary>10000
drop view 视图名称; 例子:drop view test_view
触发器可以监视用户对表的增、删、改操作,并触发某种操作(没有查),自动执行,无法直接调用。
创建触发器语法的四要素:
1.监视地点(table)
2.监视事件(insert/update/delete)
3.触发时间(before/after)
4.触发事件(insert/update/delete)
# 插入前 CREATE TRIGGER tri_before_insert_tb1 BEFORE INSERT ON tb1 FOR EACH ROW BEGIN ... END # 插入后 CREATE TRIGGER tri_after_insert_tb1 AFTER INSERT ON tb1 FOR EACH ROW BEGIN ... END # 删除前 CREATE TRIGGER tri_before_delete_tb1 BEFORE DELETE ON tb1 FOR EACH ROW BEGIN ... END # 删除后 CREATE TRIGGER tri_after_delete_tb1 AFTER DELETE ON tb1 FOR EACH ROW BEGIN ... END # 更新前 CREATE TRIGGER tri_before_update_tb1 BEFORE UPDATE ON tb1 FOR EACH ROW BEGIN ... END # 更新后 CREATE TRIGGER tri_after_update_tb1 AFTER UPDATE ON tb1 FOR EACH ROW BEGIN ... END语法
#准备表 CREATE TABLE cmd ( id INT PRIMARY KEY auto_increment, USER CHAR (32), priv CHAR (10), cmd CHAR (), sub_time datetime, #提交时间 success enum (‘yes‘, ‘no‘) #0代表执行失败 ); CREATE TABLE errlog ( id INT PRIMARY KEY auto_increment, err_cmd CHAR (), err_time datetime ); #创建触发器 delimiter // CREATE TRIGGER tri_after_insert_cmd AFTER INSERT ON cmd FOR EACH ROW BEGIN IF NEW.success = ‘no‘ THEN #等值判断只有一个等号 INSERT INTO errlog(err_cmd, err_time) VALUES(NEW.cmd, NEW.sub_time) ; #必须加分号 END IF ; #必须加分号 END// delimiter ; #往表cmd中插入记录,触发触发器,根据IF的条件决定是否插入错误日志 INSERT INTO cmd ( USER, priv, cmd, sub_time, success ) VALUES (‘A‘,‘0755‘,‘ls -l /etc‘,NOW(),‘yes‘), (‘A‘,‘0755‘,‘cat /etc/passwd‘,NOW(),‘no‘), (‘A‘,‘0755‘,‘useradd xxx‘,NOW(),‘no‘), (‘A‘,‘0755‘,‘ps aux‘,NOW(),‘yes‘); #查询错误日志,发现有两条 mysql> select * from errlog; +----+-----------------+---------------------+ | id | err_cmd | err_time | +----+-----------------+---------------------+ | 1 | cat /etc/passwd | 2018-09-18 20:18:48 | | 2 | useradd xxx | 2018-09-18 20:18:48 | +----+-----------------+---------------------+ 2 rows in set (0.00 sec)案例
强调:NEW表示即将插入的数据行,OLD表示即将删除的数据行
show triggers
drop trigger 触发器的名称
事务用于将某些操作的多个SQL作为原子性操作,意思就是,事务是一组sql语句集合。
一旦有某一个出现错误,即可回滚到原来的状态,从而保证数据库数据完整性。在事务内的语句, 要么全部执行成功, 要么全部执行失败。
事务具有以下四个特性(ACID)
1.原子性:事务是一个整体,不可分割,包含在其中的sql操作要么全部成功,要么全部失败回滚,不可能只执行其中一部分操作。
2.一致性:当事务执行后 所有的数据都是完整的(外键约束 非空约束)。
3.持久性:一旦事务提交,数据永久保存在数据库中
4.隔离性:事务之间相互隔离,一个事务的执行不影响其他事务的执行
SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的。低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销。
1.READ UNCOMMITED(未提交读):所有事务都可以看到其他未提交事务的执行结果。很少用于实际应用,因为它的性能不比其他级别好多少
2.READ COMMITED(提交读):大部分数据库默认级别,不包括mysql。一个事务从开始到提交之前, 所做的任何修改对其他事务都是不可见的。
3.REPEATABLE READ(可重复读):mysql默认级别,解决了脏读的问题. 该级别保证了在同一个事务中多次读取同样记录的结果时一致的. 无法解决幻读问题
4.SERIALIZABLE(可串行化):是最高的隔离级别,强制事务排序,使之不可能相互冲突,从而解决幻读问题
脏读: 一个事物 读到了 另一个事务未提交的数据 查询 之前要保证 所有的更新都已经完成。
不可重复读:在一个事务的两次查询之中数据不一致,这可能是两次查询过程中间插入了一个事务更新的原有的数据。
幻读:指的是当某个事务在读取某个范围内的记录时, 另外一个事务又在该范围内插入了新的记录, 当之前的事务再次读取该范围的记录时, 会产生幻行(Phantom Row).
start transaction; 开启一个事物 commit 提交事物 rollback 回滚事务
注:mysql默认开启自动提交事务,pymysql默认是不自动提交,需手动commit
存储过程包含了一系列可执行的sql语句的集合,类似于函数(方法)。
使用存储过程的优点:
#1. 用于替代程序写的SQL语句,实现程序与sql解耦 #2. 基于网络传输,传别名的数据量小,而直接传sql数据量大
缺点:不方便扩展
创建语法: create procedure 过程的名称 ({in,out,inout} 数据类型 参数名称) begin 具体的sql代码 end 参数前面需要指定参数的作用
in 表示该参数用于传入数据 out 用于返回数据 inout 即可传入 也可返回 参数类型是 mysql中的数据类型
调用语法:
call 存储过程()
案例:创建一个存储过程 作用是将两个整数相加 create procedure add_p (in a int,in b int) begin select a + b; end // 调用 call add_p(1,2) 案例:创建一个存储过程 作用是将两个整数相加 将结果保存在变量中 定义一个变量 set @su = 100; create procedure add_p2 (in a int,in b int,out su int) begin set su = a + b; end // 定义变量 set @su = 100; 调用过程 call add_p2(10,20,@su); 注意 在存储过程中 需要使用分号来结束一行 但是分号有特殊含义 得将原始的结束符 修改为其他符号 delimiter // 结束符更换为// delimiter;案列
在存储过程中 需要使用分号来结束一行 但是分号有特殊含义 得将原始的结束符 修改为其他符号 delimiter // 结束符更换为// delimiter;
create procedure show_p (in a int) begin if a = 1 then select "壹"; elseif a = 2 then select "贰"; else select "other"; end if; end //使用存储过程 完成 输入 一个 数字 1或2 显示 壹 或 贰
drop procedure proc_name;
delimiter // CREATE PROCEDURE proc_if () BEGIN declare i int default 0; if i = 1 THEN SELECT 1; ELSEIF i = 2 THEN SELECT 2; ELSE SELECT 7; END IF; END // delimiter ;if
delimiter // CREATE PROCEDURE proc_while () BEGIN DECLARE num INT ; SET num = 0 ; WHILE num < 10 DO SELECT num ; SET num = num + 1 ; END WHILE ; END // delimiter ;while
delimiter // CREATE PROCEDURE proc_repeat () BEGIN DECLARE i INT ; SET i = 0 ; repeat select i; set i = i + 1; until i >= 5 end repeat; END // delimiter ;repeat
BEGIN declare i int default 0; loop_label: loop set i=i+1; if i<8 then iterate loop_label; end if; if i>=10 then leave loop_label; end if; select i; end loop loop_label; ENDloop
mysql-视图、触发器、事务、存储过程、流程控制
标签:select pass update sub 添加 脏读 开始 无法 serial
热心网友 时间:2022-05-02 15:21
零基础学习java可按照这份大纲来进行学习
第一阶段:Java专业基础课程
阶段目标:
1. 熟练掌握Java的开发环境与编程核心知识
2. 熟练运用Java面向对象知识进行程序开发
3. 对Java的核心对象和组件有深入理解
4. 熟练应用JavaAPI相关知识
5. 熟练应用JAVA多线程技术
6. 能综合运用所学知识完成一个项目
知识点:
1、基本数据类型,运算符,数组,掌握基本数据类型转换,运算符,流程控制。
2、数组,排序算法,Java常用API,类和对象,了解类与对象,熟悉常用API。
3、面向对象特性,集合框架,熟悉面向对象三大特性,熟练使用集合框架。
4、IO流,多线程。
5、网络协议,线程运用。
第二阶段:JavaWEB核心课程
阶段目标:
1. 熟练掌握数据库和MySQL核心技术
2. 深入理解JDBC与DAO数据库操作
3. 熟练运用JSP及Servlet技术完成网站后台开发
4. 深入理解缓存,连接池,注解,反射,泛型等知识
5. 能够运用所学知识完成自定义框架
知识点:
1、数据库知识,范式,MySQL配置,命令,建库建表,数据的增删改查,约束,视图,存储过程,函数,触发器,事务,游标,建模工具。
2、深入理解数据库管理系统通用知识及MySQL数据库的使用与管理。为Java后台开发打下坚实基础。Web页面元素,布局,CSS样式,盒模型,JavaScript,jQuery。
3、掌握前端开发技术,掌握jQuery。
4、Servlet,EL表达式,会话跟踪技术,过滤器,FreeMarker。
5、掌握Servlet相关技术,利用Servlet,JSP相关应用技术和DAO完成B/S架构下的应用开发。
6、泛型,反射,注解。
7、掌握JAVA高级应用,利用泛型,注解,枚举完成自己的CRUD框架开发为后续框架学习做铺垫。
8、单点登录,支付功能,项目整合,分页封装熟练运用JSP及Servlet核心知识完成项目实战。
第三阶段:JavaEE框架课程
阶段目标:
1. 熟练运用Linux操作系统常见命令及完成环境部署和Nginx服务器的配置
2. 熟练运用JavaEE三大核心框架:Spring,SpringMVC,MyBatis
3. 熟练运用Maven,并使用SpringBoot进行快速框架搭建
4. 深入理解框架的实现原理,Java底层技术,企业级应用等
5. 使用Shiro,Ztree和Spring,SpringMVC,Myts完成企业项目
知识点:
1、Linux安装配置,文件目录操作,VI命令,管理,用户与权限,环境部署,Struts2概述,hiberante概述。
2、Linux作为一个主流的服务器操作系统,是每一个开发工程师必须掌握的重点技术,并且能够熟练运用。
3、SSH的整合,MyBatis,SpringMVC,Maven的使用。
4、了解AOP原理,了解*控制器原理,掌握MyBatis框架,掌握SSM框架的整合。
5、Shiro,Ztree,项目文档,项目规范,需求分析,原型图设计,数据库设计,工程构建,需求评审,配置管理,BUG修复,项目管理等。
6、自主完成一个中小型的企业级综合项目的设计和整体架构的原型和建模。自主完成一个大型的企业级综合项目,并具备商业价值
热心网友 时间:2022-05-02 16:39
Java软件工程师将学习网页开发技术、数据库开发以及管理技术、Java方向开发体系课程,可以担任Javaweb开发工程、Java应用开发工程师、数据库DBA、软件咨询顾问等。
热心网友 时间:2022-05-02 18:13
你好,目前Java在各行业的应用领域非常广,发展前景当然是毋庸置疑。同时,因着个人掌握的技能不同,待遇自然也会有所不同。就市场整体大致的就业情况来看,Java开发方向很多,薪资也是从8K到20K不等。
如果想入行Java开发行业,却苦于自己没有基础,担心自己学不会,可以选择专业的学习,一般学习费用在2W左右,也有线上的相关学习。Java学习可以从基础开始,零基础学习并不可怕,一般4-6个左右的时间,只要你肯努力,一切都不是事。
热心网友 时间:2022-05-02 20:05
软件技术的就业前景乐观的原因还包括中国软件人才短缺,而产业的发展又十分迅速。中国在软件总体设计,软件研发等方面缺乏高层次人才。缺口较大、结构失衡、需求旺盛。软件研发人才的匮乏已成为我国基础软件业发展缓慢的一大瓶颈。涉及到个人时,软件技术的就业前景就与自身的能力有很大的关系了。以Java为例,Java软件开发技术作为应用最广泛的技术之一,在软件方面的前景不言而喻,大至电子商务系统、银行管理系统,小至手机游戏、网页技术,Java软件开发技术可谓无所不在。只要自身的能力水平达到了要求,学习软件技术的就业前景是光明的
热心网友 时间:2022-05-02 22:13
程序研发,ui设计方面和美化方面的的,反正跟手机相关的行业的,这个是目前最火的行业,薪水也高,待遇也不错的,