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.pswp.cn/news/387328.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/387328.shtml
英文地址,請注明出處:http://en.pswp.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;將具有特…