储存进程,MySQL的作业和视图

 

MySQL的事情和视图,MySQL事务视图

                事务

1.概念

一条或然多条sql语句的集结!
 事务:正是一群操作的汇集,他们同舟共济。要么都进行成功,要么都施行停业
二.事务的特征  ACID
  A:原子性  完整的,不可分割的

  原子性 (Atomicity):在业务中的操作,要么都推行,要么都不实行!

  C: 壹致性  事务实践达成后,数据的情事是平等的()

  一致性(Consistency):事务必须保证数据库从二个一致性的情况变为另二个一致性的情景!

  I: ISOLation 隔断性  多少个事情实践互不影响

  隔开分离性(Isolation):每一个职业之间互不苦恼!哪怕是出现实践也不侵扰!

  D: 恒久性  事务实施完后,对数码的熏陶是长久的。

  持久性(Durability):事务壹旦被转移,那么对数据库中数据的震慑是永远性的!

三.政工操作的最首要字
  自动提交业务开关set autocommit=0
  起头作业 start transaction /begin
  提交业务 commit
  回滚事务 rollback
  set autocommit=1
四.事务+++存款和储蓄进度 转账的例证
 
DELIMITER $$
CREATE PROCEDURE usp_transfer()
    BEGIN 
    ##荒谬总的数量暗中认可是0
    DECLARE t_error INTEGER DEFAULT 0; 
    ## continue 继续  hanlder 执行   并且对 t_error重新赋值为一
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1; 
    SET autocommit=0;
        START TRANSACTION; 
        UPDATE bank SET balance=balance-100 WHERE cid=1;   
        UPDATE bank SET balance =balance+100 WHERE cid=2;
        IF t_error > 0 THEN 
            ROLLBACK; 
        ELSE 
            COMMIT; 
        END IF; 
     SET autocommit=1;
    END$$ 
DELIMITER ; 
 
CALL test_sp800()

 

概念一个积攒进程的最简易的语法是
delimiter $$
create procedure usp_stulist()
begin
  select * from student
end$$
delimiter;

 

          模拟 银行转账!                          

—   创造数据库
CREATE DATABASE  myBank;
—  切换钦命的数据库
USE myBank;
—  创建表
CREATE  TABLE  IF NOT  EXISTS bank(
customerName  VARCHAR(10) NOT NULL  COMMENT ‘用户名’,
currentMoney  DE宝马1系L(10,二) NOT NULL  COMMENT ‘账户余额’
);
— 插入数据
INSERT INTO bank  VALUES(‘小黑’,50000),(‘小白’,500000);

—  小黑  给小白  转账10000
—   修改两条数据
—    01.小黑-10000
—    02.小白+10000

UPDATE bank SET currentMoney=currentMoney-10000
 WHERE customerName=’小黑’;
 —  故意写错字段名称  让0二  报错
UPDATE bank SET currentMoneysss=currentMoney+10000
 WHERE customerName=’小白’;
 

—  开启事务   START TRANSACTION 只怕 BEGIN
—  0一.0二  为1个事情
BEGIN
 UPDATE bank SET currentMoney=currentMoney-10000
 WHERE customerName=’小黑’;
 UPDATE bank SET currentMoneysss=currentMoney+10000
 WHERE customerName=’小白’;
—  事务回滚  ROLLBACK
—  提交业务 COMMIT

UPDATE bank SET currentMoney=500000
 WHERE customerName=’小黑’;
—  注明mysql是暗许提交业务的!

SET  autocommit=0(关闭专门的学问自动提交) | 一(开启事务自动提交)

— 关闭职业自动提交
SET  autocommit=0;

BEGIN;   —  开启事务
 UPDATE bank SET currentMoney=currentMoney-10000
 WHERE customerName=’小黑’;
 UPDATE bank SET currentMoney=currentMoney+10000
 WHERE customerName=’小白’;
COMMIT;  —  手动提交业务
  UPDATE  bank SET currentMoney=10000;
ROLLBACK;   — 事务回滚

SET  autocommit=壹;  — 复苏活动提交

1.概念

一条也许多条sql语句的联谊!
 事务:正是一批操作的集纳,他们风雨同舟。要么都进行成功,要么都举办停业
贰.业务的风味  ACID
  A:原子性  完整的,不可分割的

  原子性 (Atomicity):在作业中的操作,要么都试行,要么都不推行!

  C: 一致性  事务奉行落成后,数据的情形是同等的()

  1致性(Consistency):事务必须保障数据库从二个壹致性的事态形成另贰个一致性的情状!

  I: ISOLation 隔开性  七个事情实施互不影响

  隔开性(Isolation):每一个事情之间互不困扰!哪怕是出现推行也不打搅!

  D: 永世性  事务实施完后,对数据的影响是世代的。

  持久性(Durability):事务1旦被转移,那么对数据库中多少的熏陶是永恒性的!

3.事情操作的要害字
  自动提交业务开关set autocommit=1
储存进程,MySQL的作业和视图。  初叶职业 start transaction /begin
  提交业务 commit
  回滚事务 rollback
  set autocommit=1
4.事务+++存储进程 转账的例证
 
DELIMITER $$
CREATE PROCEDURE usp_transfer()
    BEGIN 
    ##谬误总的数量默许是0
    DECLARE t_error INTEGER DEFAULT 0; 
    ## continue 继续  hanlder 执行   并且对 t_error重新赋值为1
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1; 
    SET autocommit=0;
        START TRANSACTION; 
        UPDATE bank SET balance=balance-100 WHERE cid=1;   
        UPDATE bank SET balance =balance+100 WHERE cid=2;
        IF t_error > 0 THEN 
            ROLLBACK; 
        ELSE 
            COMMIT; 
        END IF; 
     SET autocommit=1;
    END$$ 
DELIMITER ; 
 
CALL test_sp800()

 

概念二个存款和储蓄进程的最轻松易行的语法是
delimiter $$
create procedure usp_stulist()
begin
  select * from student
end$$
delimiter;

 

          模拟 银行转化!                          

—   创制数据库
CREATE DATABASE  myBank;
—  切换钦定的数据库
USE myBank;
—  创建表
CREATE  TABLE  IF NOT  EXISTS bank(
customerName  VARCHAR(10) NOT NULL  COMMENT ‘用户名’,
currentMoney  DEGIENIAL(拾,二) NOT NULL  COMMENT ‘账户余额’
);
— 插入数据
INSERT INTO bank  VALUES(‘小黑’,50000),(‘小白’,500000);

—  小黑  给小白  转账10000
—   修改两条数据
—    01.小黑-10000
—    02.小白+10000

UPDATE bank SET currentMoney=currentMoney-10000
 WHERE customerName=’小黑’;
 —  故意写错字段名称  让0二  报错
UPDATE bank SET currentMoneysss=currentMoney+10000
 WHERE customerName=’小白’;
 

—  开启事务   START TRANSACTION 或许 BEGIN
—  0一.0二  为叁个事务
BEGIN
 UPDATE bank SET currentMoney=currentMoney-10000
 WHERE customerName=’小黑’;
 UPDATE bank SET currentMoneysss=currentMoney+10000
 WHERE customerName=’小白’;
—  事务回滚  ROLLBACK
—  提交业务 COMMIT

UPDATE bank SET currentMoney=500000
 WHERE customerName=’小黑’;
—  阐明mysql是暗中认可提交业务的!

SET  autocommit=0(关闭职业自动提交) | 一(开启事务自动提交)

— 关闭职业自动提交
SET  autocommit=0;

BEGIN;   —  开启事务
 UPDATE bank SET currentMoney=currentMoney-10000
 WHERE customerName=’小黑’;
 UPDATE bank SET currentMoney=currentMoney+10000
 WHERE customerName=’小白’;
COMMIT;  —  手动提交业务
  UPDATE  bank SET currentMoney=10000;
ROLLBACK;   — 事务回滚

SET  autocommit=1;  — 恢复生机活动提交

            视图

一.视图: 就是一张虚拟表,本质上囤积的是1对SQL的集聚

—  视图 是一张虚拟的表
   0一.代表一张表的部分数据只怕是多张表的总结数据!
   02.布局和多少都以创设在对真表的查询基础之上的!
   03.视图中存放的数码实际上就是对真实表的引用!
     对视图中的数据开始展览增添,更新删除都会影响到真实的表!
   04.三个做事踏实的表能够创立N个视图!
   0伍.假若视图关联了多表,分化意增 删!单表能够增加和删除改
   0陆.视图一般都以利用查询!

二.定义视图的语法:
create view VW_stulist(VW_视图的效果)
as
sql语句
 小Tip:当多表中有同名列的时候,在视图那么些虚拟表中,只好有壹列。手工业钦点该列是哪位表的

叁.视图的使用 和找寻基本表同样,直接通过select
select * from VW_stulist

四.刨除视图
drop view 视图名
drop table
drop database
drop index
drop constraint
到底:drop  删除是构造   delete 删除数据

 

5.翻看全数库全体视图

 5.一.切换成系统数据库
  use information_schema

 5.2.select * from views \G;

 6.查看当前库的享有视图
   show tables status where comment=’view’

 七.视图注意事项
一)视图可以查询多表数据
二)视图可以嵌套
叁)update,insert,delete不可能封装成视图内容,通过图形化分界面能够操作数据(操作视图数据,影响的是基本表)。
四)删除视图数据的时候,有自然的限量,数据结果来自多表的时候,不能够去除

 

—  创设1个视图  只获得 学生姓名 编号 以及考试战表
CREATE  VIEW view_student_result
AS
SELECT s.studentNo 学生编号,studentName 学生姓名,
studentResult 考试成绩
FROM  student s,result r
WHERE s.`studentNo`=r.`studentNo`
—  查询视图中的内容
SELECT * FROM view_student_result
— 查询mysql数据库中保有的视图
SELECT * FROM information_schema.views;
—  删除视图
DROP  VIEW view_student_result;

—  创造一个表的视图  学生姓名,地址,手提式有线电电话机号
CREATE VIEW  view_student
AS
SELECT  studentName 学生姓名,address 地址,phone 手提式有线话机号
FROM  student

— 查询视图

SELECT  * FROM view_student 

 

事务 一.定义
一条恐怕多条sql语句的集聚!
事务:正是一群操作的聚焦,他们相濡以沫。要么都实施成功,…

                事务

事务

1.概念

 

一条可能多条sql语句的成团!
 事务:正是一批操作的聚合,他们丹舟共济。要么都推行成功,要么都推行倒闭
贰.政工的风味  ACID
  A:原子性  完整的,不可分割的

事情是1种机制、是一种操作类别,它富含了一组数据库操作命令,这组命令要么全体实行,要么全体不施行。

  原子性 (Atomicity):在专门的学问中的操作,要么都实践,要么都不推行!

在数据库系统上试行现身操作时职业是作为最小的垄断单元来采纳的。那尤其适用于多用户同时操作的数码通信系统。比方:领票、银行、保证集团以及股票(stock)交易系统等。

  C: 1致性  事务推行完结后,数据的意况是一致的()

倘使某一事情成功,则在该事务中开始展览的兼具数据修改均会付给,成为数据库的永恒组成都部队分,要是专门的学业蒙受错误且必须撤回或回滚,则有着数据修改均会被免去。

  一致性(Consistency):事务必须确定保证数据库从贰个一致性的状态成为另2个1致性的状态!

开始作业  BEGIN TRANSACTION

  I: ISOLation 隔断性  三个事情试行互不影响

交付业务  COMMIT TRANSACTION

  隔开性(Isolation):每一个业务之间互不干扰!哪怕是出新实行也不侵扰!

回滚事务  ROLLBACK TRANSACTION

  D: 长久性  事务实施完后,对数码的熏陶是永久的。

 

  持久性(Durability):事务一旦被更换,那么对数据库中数据的震慑是恒久性的!

–初阶作业
begin transaction
declare @errorSum int    –定义变量,用于累计作业试行进度中的错误
–转帐
update bank set currentMoney=currentMoney-800 where
customerName=’张三’
set @errorSum=@errorSum+@@error  –累计是或不是有不当
update bank set currentMoney=currentMoney+800 where
customerName=’李四’
set @errorSum=@errorSum+@@error  –累计是或不是有不当

3.业务操作的首要性字
  自动提交业务按钮set autocommit=0
  开始事务 start transaction /begin
  提交业务 commit
  回滚事务 rollback
  set autocommit=1
四.事务+++存款和储蓄进度 转账的事例
 
DELIMITER $$
CREATE PROCEDURE usp_transfer()
    BEGIN 
    ##荒唐总量暗中同意是0
    DECLARE t_error INTEGER DEFAULT 0; 
    ## continue 继续  hanlder 执行   并且对 t_error重新赋值为一
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1; 
    SET autocommit=0;
        START TRANSACTION; 
        UPDATE bank SET balance=balance-100 WHERE cid=1;   
        UPDATE bank SET balance =balance+100 WHERE cid=2;
        IF t_error > 0 THEN 
            ROLLBACK; 
        ELSE 
            COMMIT; 
        END IF; 
     SET autocommit=1;
    END$$ 
DELIMITER ; 
 
CALL test_sp800()

print ‘查看转帐事务进度中的余额’
select * from bank

 

–依据是不是有荒唐,分明专门的工作是提交照旧回滚
if @errorSum>0
    begin
        print ‘交易失利,回滚事务.’
        rollback transaction
    end
else
    begin
        print ‘交易成功,提交业务,写入硬盘,永世保存!’
        commit transaction
    end
go

概念四个囤积进程的最简便易行的语法是
delimiter $$
create procedure usp_stulist()
begin
  select * from student
end$$
delimiter;

 

 

索引

          模拟 银行转化!                          

 

—   创立数据库
CREATE DATABASE  myBank;
—  切换钦点的数据库
USE myBank;
—  创建表
CREATE  TABLE  IF NOT  EXISTS bank(
customerName  VARCHAR(10) NOT NULL  COMMENT ‘用户名’,
currentMoney  DESANTANAL(10,贰) NOT NULL  COMMENT ‘账户余额’
);
— 插入数据
INSERT INTO bank  VALUES(‘小黑’,50000),(‘小白’,500000);

目录提供针对性存款和储蓄在表的钦定列中的数据值的指针,然后依照钦命的11对这几个指针排序。

—  小黑  给小白  转账10000
—   修改两条数据
—    01.小黑-10000
—    02.小白+10000

目录使数据库程序没有供给对一切表张开扫描,就足以在里头找到所需数据。

UPDATE bank SET currentMoney=currentMoney-10000
 WHERE customerName=’小黑’;
 —  故意写错字段名称  让0贰  报错
UPDATE bank SET currentMoneysss=currentMoney+10000
 WHERE customerName=’小白’;
 

目录信赖于数据库的表,作为表的三个组成都部队分,1旦创设后,又数据库系统自个儿实行维护。

—  开启事务   START TRANSACTION 大概 BEGIN
—  0一.0二  为三个事情
BEGIN
 UPDATE bank SET currentMoney=currentMoney-10000
 WHERE customerName=’小黑’;
 UPDATE bank SET currentMoneysss=currentMoney+10000
 WHERE customerName=’小白’;
—  事务回滚  ROLLBACK
—  提交业务 COMMIT

 

UPDATE bank SET currentMoney=500000
 WHERE customerName=’小黑’;
—  注明mysql是暗许提交业务的!

视图

SET  autocommit=0(关闭工作自动提交) | 一(开启事务自动提交)

 

— 关闭工作自动提交
SET  autocommit=0;

视图和表类似,是一张虚拟表,日常是作为多少个或多少个表的行或列的子集创立的,视图只供查询,数据不可改动,查询数据来源于大家创建的实体表。

BEGIN;   —  开启事务
 UPDATE bank SET currentMoney=currentMoney-10000
 WHERE customerName=’小黑’;
 UPDATE bank SET currentMoney=currentMoney+10000
 WHERE customerName=’小白’;
COMMIT;  —  手动提交业务
  UPDATE  bank SET currentMoney=10000;
ROLLBACK;   — 事务回滚

 

SET  autocommit=壹;  — 苏醒活动提交

积攒进度

1.概念

 

一条恐怕多条sql语句的聚合!
 事务:便是一批操作的汇集,他们丹舟共济。要么都施行成功,要么都推行倒闭
二.政工的风味  ACID
  A:原子性  完整的,不可分割的

积累进度的定义类似于函数,它是SQL语句和操纵流语句的预编译会集。

  原子性 (Atomicity):在业务中的操作,要么都实施,要么都不实践!

积攒进程存款和储蓄在数据库内,可由应用程序调用。

  C: 一致性  事务实践实现后,数据的图景是如出1辙的()

储存进度的帮助和益处由此可见:封装复杂操作,节省编译优化时间,达成代码重用。

  壹致性(Consistency):事务必须确定保障数据库从三个1致性的情景成为另一个壹致性的情景!

 

  I: ISOLation 隔开性  七个工作试行互不影响

CREATE PROC 存储进度名

  隔绝性(Isolation):每一个事情之间互不干扰!哪怕是出新推行也不惊扰!

AS

  D: 永恒性  事务实施完后,对数码的熏陶是长久的。

BEGIN

  持久性(Durability):事务1旦被改换,那么对数据库中多少的震慑是永远性的!

SET NOCOUNT ON

3.作业操作的要紧字
  自动提交业务按键set autocommit=壹
  伊始作业 start transaction /begin
  提交业务 commit
  回滚事务 rollback
  set autocommit=1
四.事务+++存款和储蓄进程 转账的例证
 
DELIMITER $$
CREATE PROCEDURE usp_transfer()
    BEGIN 
    ##错误总量暗许是0
    DECLARE t_error INTEGER DEFAULT 0; 
    ## continue 继续  hanlder 执行   并且对 t_error重新赋值为1
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1; 
    SET autocommit=0;
        START TRANSACTION; 
        UPDATE bank SET balance=balance-100 WHERE cid=1;   
        UPDATE bank SET balance =balance+100 WHERE cid=2;
        IF t_error > 0 THEN 
            ROLLBACK; 
        ELSE 
            COMMIT; 
        END IF; 
     SET autocommit=1;
    END$$ 
DELIMITER ; 
 
CALL test_sp800()

–SQL语句

 

END

概念3个积攒进程的最简便的语法是
delimiter $$
create procedure usp_stulist()
begin
  select * from student
end$$
delimiter;

 

 

包蕴输出参数的仓库储存进度,如若参数后边带有output,则意味着此参数为出口参数,不然是不以为奇的输入参数,输入参数能够分包暗许值

          模拟 银行转账!                          

CREATE PROC 存储进程名

—   创制数据库
CREATE DATABASE  myBank;
—  切换钦点的数据库
USE myBank;
—  创建表
CREATE  TABLE  IF NOT  EXISTS bank(
customerName  VARCHAR(10) NOT NULL  COMMENT ‘用户名’,
currentMoney  DE西玛L(10,二) NOT NULL  COMMENT ‘账户余额’
);
— 插入数据
INSERT INTO bank  VALUES(‘小黑’,50000),(‘小白’,500000);

@变量名 数据格式[=默认值] [OUTPUT]

—  小黑  给小白  转账10000
—   修改两条数据
—    01.小黑-10000
—    02.小白+10000

AS

UPDATE bank SET currentMoney=currentMoney-10000
 WHERE customerName=’小黑’;
 —  故意写错字段名称  让0二  报错
UPDATE bank SET currentMoneysss=currentMoney+10000
 WHERE customerName=’小白’;
 

BEGIN

—  开启事务   START TRANSACTION 也许 BEGIN
—  0壹.02  为一个事务
BEGIN
 UPDATE bank SET currentMoney=currentMoney-10000
 WHERE customerName=’小黑’;
 UPDATE bank SET currentMoneysss=currentMoney+10000
 WHERE customerName=’小白’;
—  事务回滚  ROLLBACK
—  提交业务 COMMIT

SET NOCOUNT ON

UPDATE bank SET currentMoney=500000
 WHERE customerName=’小黑’;
—  注脚mysql是暗中同意提交业务的!

–SQL语句

SET  autocommit=0(关闭专门的学业自动提交) | 一(开启事务自动提交)

END

— 关闭工作自动提交
SET  autocommit=0;

 

BEGIN;   —  开启事务
 UPDATE bank SET currentMoney=currentMoney-10000
 WHERE customerName=’小黑’;
 UPDATE bank SET currentMoney=currentMoney+10000
 WHERE customerName=’小白’;
COMMIT;  —  手动提交业务
  UPDATE  bank SET currentMoney=10000;
ROLLBACK;   — 事务回滚

调用存款和储蓄进度:EXEC  存款和储蓄进度名 [参数]

SET  autocommit=壹;  — 苏醒活动提交

 

            视图

–调用后回去经过考试的上学的小孩子人数,以供其余sql语句调用

一.视图: 正是一张虚拟表,本质上囤积的是1对SQL的集聚

CREATE PROCEDURE proc_withOutputpara

—  视图 是一张虚拟的表
   0壹.象征一张表的部分数据或然是多张表的归咎数据!
   02.布局和数目都以组建在对真表的查询基础之上的!
   0三.视图中存放的数目实际上正是对真实表的引用!
     对视图中的数据开始展览增加,更新删除都会潜移默化到真实的表!
   04.三个实在的表能够成立N个视图!
   0伍.若是视图关联了多表,不相同意增 删!单表能够增删改
   06.视图一般都以使用查询!

@subject varchar(十)=’SQL’,  –接受参数,带默许参数,变量之间带逗号

二.定义视图的语法:
create view VW_stulist(VW_视图的效益)
as
sql语句
 小Tip:当多表中有同名列的时候,在视图这些虚拟表中,只可以有一列。手工业钦定该列是哪位表的

@count int output  –输出参数

三.视图的使用 和探寻基本表同样,直接通过select
select * from VW_stulist

AS

四.删减视图
drop view 视图名
drop table
drop database
drop index
drop constraint
究竟:drop  删除是构造   delete 删除数据

SELECT @count=count(*) FROM students S,Mark SC,course C

 

WHERE S.sID=SC.sID AND SC.cID=C.cID

5.翻看全部库全部视图

AND C.cNAME=’C#’ AND SC.SCore<60

 5.1.切换到系统数据库
  use information_schema

GO

 5.2.select * from views \G;

 

 陆.查看当前库的有所视图
   show tables status where comment=’view’

–调用存款和储蓄进程

 7.视图注意事项
一)视图能够查询多表数据
2)视图能够嵌套
3)update,insert,delete不可能封装成视图内容,通过图形化分界面能够操作数据(操作视图数据,影响的是基本表)。
四)删除视图数据的时候,有确定的限定,数据结果来自多表的时候,无法去除

DECLARE @count int,@sub varchar(10)  –证明变量

 

SET @sub=’C#’

—  创造三个视图  只得到 学生姓名 编号 以及考试战绩
CREATE  VIEW view_student_result
AS
SELECT s.studentNo 学生编号,studentName 学生姓名,
studentResult 考试成绩
FROM  student s,result r
WHERE s.`studentNo`=r.`studentNo`
—  查询视图中的内容
SELECT * FROM view_student_result
— 查询mysql数据库中具备的视图
SELECT * FROM information_schema.views;
—  删除视图
DROP  VIEW view_student_result;

EXEC  proc_withOutputpara @sub,@count=@count output

—  创立叁个表的视图  学生姓名,地址,手提式无线电话机号
CREATE VIEW  view_student
AS
SELECT  studentName 学生姓名,address 地址,phone 手机号
FROM  student

P君越INT @sub+’考试比不上格的共有’+convert(varchar(二),@count)+’人’

— 查询视图

GO

SELECT  * FROM view_student 

 

 

 

触发器

 

触发器是壹种奇特类别的仓库储存进度。

触发器是当对某二个表举办操作。诸如:update、insert、delete这个操作的时候,系统会自行调用施行该表上相应的触发器。

触发器的最紧要意义是兑现由主键和外键所无法确保的盘根错节的参照完整性和多少的1致性。

 

CREATE TTucsonIGGESportage 触发器名称

997755.com澳门葡京 ,ON 表名

FOR insert/delete/update

AS

–SQL语句

GO

 

和讯hoojo博主关于触发器的详尽介绍:

 

博主初学,有错还望各位大神提议。

转发请联系

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website