mysql-视图、事物等

一、视图

视图是一个虚拟表(非真实存在),其本质是【根据SQL语句获取动态的数据集,并为其命名】,用户使用时只需使用【名称】即可获取结果集,可以将该结果集当做表来使用。

使用视图我们可以把查询过程中的临时表摘出来,用视图去实现,这样以后再想操作该临时表的数据时就无需重写复杂的sql了,直接去视图中查找即可,但视图有明显地效率问题,并且视图是存放在数据库中的,如果我们程序中使用的sql过分依赖数据库中的视图,即强耦合,那就意味着扩展sql极为不便,因此并不推荐使用

 

create view course2teacher as select * from course inner join teacher on course.teacher_id = teacher.tid;  # 只有表结构,没有表数据,因为它的数据是基于其他表的。不建议使用,因为以后扩展sql语句的时候,视图也需要跟着修改。# 修改视图
alter view teacher_view as select * from course where cid>3;# 删除视图
drop view teacher_view-- 2.触发器  (一般不用,这个在应用程序级别能做,在应用程序级别能干的活还是去自己干好,以后扩展方便)

#准备表
CREATE TABLE cmd (id INT PRIMARY KEY auto_increment,USER CHAR (32),priv CHAR (10),cmd CHAR (64),sub_time datetime, #提交时间success enum ('yes', 'no') #0代表执行失败
);CREATE TABLE errlog (id INT PRIMARY KEY auto_increment,err_cmd CHAR (64),err_time datetime
);#创建触发器
delimiter //  # 定义sql语句的结束语
CREATE TRIGGER tri_after_insert_cmd AFTER INSERT ON cmd FOR EACH ROW
BEGINIF NEW.success = 'no' THEN #等值判断只有一个等号INSERT INTO errlog(err_cmd, err_time) VALUES(NEW.cmd, NEW.sub_time) ; #必须加分号END IF ; #必须加分号
END //
delimiter ;  # 把结束符号还原回来 #往表cmd中插入记录,触发触发器,根据IF的条件决定是否插入错误日志
INSERT cmd (USER,priv,cmd,sub_time,success
)
VALUES('egon','0755','ls -l /etc',NOW(),'yes'),('egon','0755','cat /etc/passwd',NOW(),'no'),('egon','0755','useradd xxx',NOW(),'no'),('egon','0755','ps aux',NOW(),'yes');# 删除触发器
drop trigger tri_after_insert_cmd;-- 3 存储过程# (1) 无参存储过程delimiter //create procedure p1()BEGINselect * from db7.teacher;END //delimiter ;# MySQL中调用call p1();# Python中调用cursor.callproc('p1')# (2) 有参存储过程。不但要指定是接收还是返回,还要指定类型delimiter //create procedure p2(in n1 int,in n2 int,out res int)BEGINselect * from db7.teacher where tid > n1 and tid < n2;set res = 1;END //delimiter ;# inout 可进可出 了解就行# MySQL中调用set @x=0call p2(2,4,@x);select @x;  # 查看返回值结果# Python中调用 cursor.callproc('p2',(2,4,0))  # @_p2_0=2,@_p2_1=4,@_p2_2=0cursor.excute('select @_p3_2')cursor.fetchall()## 应用程序和数据库结合使用### 方式一:MySQL:  编写存储过程python:调用存储过程### 方式二:Python:编写纯生SQLMySQL:什么都不用干### 方式三:Python:ORM --> 纯生SQL
MySQL:# 运行效率方式二高,开发效率方式三高(运行效率比方式二慢不了多少),我们主要是用方式三,偶尔用方式二,很少会去用方式一,除非一个人应用程序开发和DBA开发都很厉害。

二、事物

create table user(
id int primary key auto_increment,
name char(32),
balance int
);insert into user(name,balance)
values
('wsb',1000),
('egon',1000),
('ysb',1000);#原子操作
start transaction;
update user set balance=900 where name='wsb'; #买支付100元
update user set balance=1010 where name='egon'; #中介拿走10元
update user set balance=1090 where name='ysb'; #卖家拿到90元
commit;#出现异常,回滚到初始状态
start transaction;
update user set balance=900 where name='wsb'; #买支付100元
update user set balance=1010 where name='egon'; #中介拿走10元
uppdate user set balance=1090 where name='ysb'; #卖家拿到90元,出现异常没有拿到
rollback;
commit;

三、函数和流程控制

#1 准备表和记录
CREATE TABLE blog (id INT PRIMARY KEY auto_increment,NAME CHAR (32),sub_time datetime
);INSERT blog (NAME, sub_time)
VALUES('第1篇','2015-03-01 11:31:21'),('第2篇','2015-03-11 16:31:21'),('第3篇','2016-07-01 10:21:31'),('第4篇','2016-07-22 09:23:21'),('第5篇','2016-07-23 10:11:11'),('第6篇','2016-07-25 11:21:31'),('第7篇','2017-03-01 15:33:21'),('第8篇','2017-03-01 17:32:21'),('第9篇','2017-03-01 18:31:21');#2. 提取sub_time字段的值,按照格式后的结果即"年月"来分组select date_format(sub_time,'%Y-%m'),count(id) from blog group by date_format(sub_time,'%Y-%m');

四、索引原理

#1. 准备表
create table s1(
id int,
name varchar(20),
gender char(6),
email varchar(50)
);#2. 创建存储过程,实现批量插入记录
delimiter $$ #
create procedure auto_insert1()
BEGINdeclare i int default 1;while (i<3000000) doinsert into s1 values(i,'egon','male',concat('egon',i,'@oldboy'));set i=i+1;end while;
END$$
delimiter ; #3. 查看存储过程
show create procedure auto_insert1\G #4. 调用存储过程
call auto_insert1();#无索引:mysql根本就不知道到底是否存在id等于333333333的记录,只能把数据表从头到尾扫描一遍,此时有多少个磁盘块就需要进行多少IO操作,所以查询速度很慢
mysql> select * from s1 where id=333333333;
Empty set (0.33 sec)# 创立索引前
select count(id) from s1 where id = 1000
row in set (0.80 sec)# 创立索引
create index idx_id on s1(id)
Query OK, 0 rows affected (2.63 sec)
Records: 0  Duplicates: 0  Warnings: 0# 创立索引后
select count(id) from s1 where id = 1000;
row in set (0.00 sec)

 

转载于:https://www.cnblogs.com/hexiaorui123/p/10440378.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/387328.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CAFFE怎样跑起来

0、参考文献 [1]caffe官网《Training LeNet on MNIST with Caffe》; [2]薛开宇《读书笔记4学习搭建自己的网络MNIST在caffe上进行训练与学习》&#xff08;[1]的翻译版&#xff0c;同时还有作者的一些注解&#xff0c;很赞&#xff09;; 1、*.sh文件如何执行&#xff1f; ①方…

运行caffe自带的两个简单例子

为了程序的简洁&#xff0c;在caffe中是不带练习数据的&#xff0c;因此需要自己去下载。但在caffe根目录下的data文件夹里&#xff0c;作者已经为我们编写好了下载数据的脚本文件&#xff0c;我们只需要联网&#xff0c;运行这些脚本文件就行了。 注意&#xff1a;在caffe中运…

quartz.net 执行后台任务

... https://www.cnblogs.com/zhangweizhong/category/771057.html https://www.cnblogs.com/lanxiaoke/category/973331.html 宿主在控制台程序中 using System;using System.Collections.Specialized;using System.IO;using System.Threading.Tasks;using Quartz;using Quart…

运行caffe自带的mnist实例详细教

为了程序的简洁&#xff0c;在caffe中是不带练习数据的&#xff0c;因此需要自己去下载。但在caffe根目录下的data文件夹里&#xff0c;作者已经为我们编写好了下载数据的脚本文件&#xff0c;我们只需要联网&#xff0c;运行这些脚本文件就行了。 Mnist介绍&#xff1a;mnist是…

6 软件的安装

6 软件包管理 6.1 简介 软件包分类&#xff1a; 源码包 源代码&#xff08;大多数是C语言&#xff09; 安装时慢&#xff0c;容易报错 >脚本安装包 对源码包进行改装&#xff0c;使安装更简单&#xff0c;不多。 rpm包 二进制包 Ubuntu系列的二进制包不是rpm&#xf…

STD函数的内部计算公式

各股票软件的标准差函数STD是不同的&#xff0c;而布林线的上下轨是以STD为基础计算出来的&#xff0c;所以使用布林线应小心。以2008/3/28的上证综指为例&#xff0c;利用如下代码&#xff1a;"收盘价3日STD:STD(CLOSE,3);"&#xff0c;三日收盘价分别是&#xff1a…

caffe路径正确,却读不到图片

调试caffe&#xff0c;用已有的网络训练自己的数据集的时候&#xff08;我这里做的是二分类&#xff09;。在生成均值文件之后&#xff0c;开始train&#xff0c;发现出现了这个问题。 1&#xff0c;路径正确&#xff0c;却读不到图片。 [db_lmdb.hpp:15] Check failed: mdb_st…

Eclipse可以执行jsp文件却无法访问Tomcat主页

点击Servers,然后双击本地的Tomcat服务器 出现如下界面 这里要选择第二项 再重新启动Tomcat就行了 转载于:https://www.cnblogs.com/lls1350767625/p/10452565.html

caffe调用的一个例子

本文是学习Caffe官方文档"ImageNet Tutorial"时做的&#xff0c;同样由于是Windows版本的原因&#xff0c;很多shell脚本不能直接使用&#xff0c;走了不少弯路&#xff0c;但是收获也不少。比如&#xff1a;如何让shell脚本在Windows系统上直接运行、如何去用Caffe给…

孔铜的铜厚

---恢复内容开始--- 表面处理方式注释&#xff1a; 喷锡 喷锡铅合金是一种最低成本PCB表面有铅工艺&#xff0c;它能保持良好的可焊接性。但对于精细引脚间距(<0.64mm)的情况&#xff0c;可能导致焊料的桥接和厚度问题。 无铅喷锡 一种无铅表面处理工艺&#xff0c;符合“环…

1 kafka简介

Publish-subscribe distributed messaging system. A distributed commit log. kafka集群中的服务器都叫broker。 客户端有两类&#xff1a;producer、consumer。 客户端和broker之间使用TCP协议。 不同业务系统的消息通过topic进行区分。 消息的topic会分区&#xff0c;以…

各种机器学习的优缺点及应用场景

目录 正则化算法&#xff08;Regularization Algorithms&#xff09; 集成算法&#xff08;Ensemble Algorithms&#xff09; 决策树算法&#xff08;Decision Tree Algorithm&#xff09; 回归&#xff08;Regression&#xff09; 人工神经网络&#xff08;Artificial…

微信公众号接入开发者模式,服务器配置Token验证

概述 接入微信公众平台开发&#xff0c;开发者需要按照如下步骤完成&#xff1a; 填写服务器配置验证服务器地址的有效性依据接口文档实现业务逻辑官方指南文档服务器配置 服务器地址(URL)&#xff1a;填写完URL后&#xff0c;微信服务器会发送GET请求&#xff0c;并携带以下参…

2 kafka安装

单节点&#xff1a; 1、解压kafka压缩包到安装目录&#xff08;自己指定&#xff09;&#xff1b; 2、进入kafka目录并执行命令 > bin/zookeeper-server-start.sh config/zookeeper.properties #如果报错&#xff0c;修改kafka-run-class.sh&#xff0c;将 -XX:UseComp…

TensorFlow自带例子

TensorFlow自带例子已经包含了android和ios下的摄像头图像分类示例Inception&#xff0c;这里补充一个Windows下的&#xff0c;使用AForge库(www.aforgenet.com)操作摄像头。 代码在这里下载&#xff0c;使用Visual Studio 2017编译。 http://files.cnblogs.com/files/autosoft…

遇到Visual Studio 当前不会命中断点.还没有为该文档加载任何符号的情况

一.问题及原因 有这样一种调用逻辑:A.exe调用B.dll.现在想要在B的源代码中打断点,从A发起进行调试,却给出了"当前不会命中断点.还没有为该文档加载任何符号"的提示.感觉十分奇怪,各种重新生成,重启VS都没啥用,最后不得以网上搜了一番,找到了问题的根源. 原来我把旧的…

java01基础简介

1 java概述 开发服务器端应用程序最流行语言&#xff0c;产生网页、运行后端逻辑。 当对java了解到一定程度&#xff0c;阅读源码才能解决问题。 Applet&#xff1a;在网页中运行的java程序&#xff0c; Java的应用领域&#xff1a; 桌面应用系统开发 企业级应用开发 多媒…

TensorFlow自带例子已经包含了android和ios下的摄像头图像分类示例Inception v1,这里补充一个Windows下的,使用AForge库(www.aforgenet.com)操作

TensorFlow自带例子已经包含了android和ios下的摄像头图像分类示例Inception v1&#xff0c;这里补充一个Windows下的&#xff0c;使用AForge库(www.aforgenet.com)操作摄像头。 代码在这里下载&#xff0c;使用Visual Studio 2017编译。 http://files.cnblogs.com/files/autos…

Docker+Mongodb

DockerMongodb 原文:DockerMongodbdocker search mongodb docker run -d -p 2701:27017 -v /usr/mongodb/data:/data/db -v /usr/mongodb/databack:/data/backup --name mongo-v1.0.0 mongo --auth docker exec -it mongo-v1.0.0 mongo admin docker exec -it mongo-v1.0.…

Java02继承

5继承 5.1 类、超类和子类 关键字extends表示继承。 Java中的继承都是公用继承&#xff0c;没有C中的私有继承和保护继承。 Super class Subclass 来自于集合的术语 Base class Derived class Parent class Child class 将通用的功能放在超类中&#xff0c;将具有特…