MySQL事务视图,SQL应用实例

试验风流倜傥:实验案例黄金年代(附加“练习用的能够叠合的数据库–class”卡塔尔

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

                事务

1.概念

一条可能多条sql语句的聚合!
 事务:正是一批操作的聚焦,他们同甘共苦。要么都施行成功,要么都施行倒闭
2.政工的表征  ACID
  A:原子性  完整的,不可分割的

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

  C: 生龙活虎致性  事务实行达成后,数据的情形是如出大器晚成辙的(卡塔尔

  风流倜傥致性(Consistency卡塔 尔(阿拉伯语:قطر‎:事务必需保证数据库从三个大器晚成致性的状态成为另三个大器晚成致性的意况!

  I: ISOLation 隔绝性  八个专门的职业推行互不影响

  隔离性(Isolation卡塔 尔(英语:State of Qatar):各样业务之间互不烦懑!哪怕是出新实施也不打扰!

  D: 长久性  事务实行完后,对数据的影响是永远的。

  持久性(Durability卡塔 尔(阿拉伯语:قطر‎:事务大器晚成旦被改动,那么对数据库中多少的熏陶是永世性的!

3.事情操作的重大字
  自动提交业务按键set autocommit=0
  开首业务 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  DEMondeoL(10,2) NOT NULL  COMMENT ‘账户余额’
);
— 插入数据
INSERT INTO bank  VALUES(‘小黑’,50000),(‘小白’,500000);

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

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

—  开启事务   START TRANSACTION 也许 BEGIN
—  01.02  为三个政工
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(关闭工作自动提交) | 1(开启事务自动提交)

— 关闭职业自动提交
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语句的集聚!
 事务:就是一批操作的联谊,他们同舟共济。要么都奉行成功,要么都执行停业
2.事情的性情  ACID
  A:原子性  完整的,不可分割的

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

  C: 黄金时代致性  事务履行完成后,数据的情状是同样的(卡塔尔

  意气风发致性(Consistency卡塔 尔(英语:State of Qatar):事必需得保证数据库从一个黄金年代致性的场合变成另叁个风流洒脱致性的动静!

  I: ISOLation 隔绝性  五个事情推行互不影响

  隔绝性(Isolation卡塔 尔(英语:State of Qatar):各类事情之间互不烦扰!哪怕是出新试行也不惊扰!

  D: 恒久性  事务推行完后,对数据的熏陶是恒久的。

  漫长性(Durability卡塔尔国:事务风流浪漫旦被改变,那么对数据库中数据的震慑是永远性的!

3.业务操作的要害字
  自动提交业务按钮set autocommit=1
  早前业务 start transaction /begin
  提交业务 commit
  回滚事务 rollback
www.350.vip ,  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  DESpiriorL(10,2) NOT NULL  COMMENT ‘账户余额’
);
— 插入数据
INSERT INTO bank  VALUES(‘小黑’,50000),(‘小白’,500000);

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

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

—  开启事务   START TRANSACTION 可能 BEGIN
—  01.02  为贰个事情
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(关闭职业自动提交) | 1(开启事务自动提交)

— 关闭职业自动提交
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的联谊

—  视图 是一张虚构的表
   01.象征一张表的有的数据也许是多张表的汇总量据!
   02.协会和数目都是树立在对真表的询问根底之上的!
   03.视图中贮存的数据实际上正是对真实表的援引!
     对视图中的数据开展增多,更新删除都会影响到实在的表!
   04.二个诚实的表能够创制N个视图!
   05.即便视图关联了多表,不容许增 删!单表能够增加和删除改
   06.视图通常都以行使查询!

2.定义视图的语法:
create view VW_stulist(VW_视图的职能卡塔 尔(阿拉伯语:قطر‎
as
sql语句
 小Tip:当多表中有同名列的时候,在视图这几个虚构表中,只好有一列。手工业钦赐该列是哪位表的

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

4.刨除视图
drop view 视图名
drop table
drop database
drop index
drop constraint
毕竟:drop  删除是结构   delete 删除数据

 

5.查看全部库全部视图

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

 5.2.select * from views G;

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

 7.视图注意事项
1卡塔 尔(英语:State of Qatar)视图能够查询多表数据
2卡塔 尔(阿拉伯语:قطر‎视图能够嵌套
3卡塔 尔(阿拉伯语:قطر‎update,insert,delete不能够封装成视图内容,通过图形化分界面能够操作数据(操作视图数据,影响的是基本表卡塔尔国。
4卡塔 尔(英语:State of Qatar)删除视图数据的时候,有自然的限量,数据结果来自多表的时候,不能去除

 

—  创制叁个视图  只获得 学子姓名 编号 甚至考试成绩
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 

 

事务 1.概念
一条只怕多条sql语句的集结!
事务:正是一群操作的聚合,他们同舟共济。要么都推行成功,…

1、在products表中查询出厂日期晚于二〇一六年6月的水果和干果音讯。

select *
from products  where 出厂日期>’2015-04-30 ‘

2、在products表中分组查询全数水果,蔬菜,坚果的总资金。

select 种类,SUM(成本) 总成本 from products
 group by 种类

3、在products表中询问全数水果的新闻,并依据资金财产从高到低的依次突显结果。

select * from products
order by 成本 desc

4、在products表中查询资金在1—5元的蔬菜信息。

select *
from products  where 成本 between
1 and 5 and  种类=’蔬菜’

5、在products表中有着水果的名称,种类和出厂日期音讯插入新表products_new中。

select 名称,种类,出厂日期  into aaa from products  where 连串=’水果’

尝试二:多表查询(附加“演习用的能够叠合的数据库–benet”卡塔尔国

 要求:

1、在表A和表B 中利用内接二连三查询学子姓名,学园和生意

select
a.namenamea,a.school schoola,b.name nameb,b.job jobb  from A,b wherea.name=b.name

2、在表A和表B 中动用左外连接查询学子姓名,高校和生意。

select
a.namenamea,a.school schoola,b.name nameb,b.job jobb  from A left join bon
a.name=b.name

3、在表A和表B 中利用右外连接查询学子姓名,高校和生意。
select
a.name namea,a.school schoola,b.name nameb,b.jobjobb  from A right join bon
a.name=b.name

4、在表A和表B 中动用完整连接查询学子姓名,学园和生意。

select
a.namenamea,a.school schoola,b.name nameb,b.job jobb  from A full join bon
a.name=b.name

尝试三:实验案例二(附加“练习用的能够附加的数据库–class”卡塔 尔(阿拉伯语:قطر‎

1、在products表和sales表中询问产物的名目,连串,花销,发售地方和贩卖价格。

select products.名称名称a,

products.类别种类a,

products.开支花销a,

sales.名称名称b,

sales.发售卖价格格价格b,

sales.贩卖地方地方b

from products,sales where
products.名称=sales.名称

2、在products表和sales表中询问销到吉林的付加物名称,体系,费用和发售卖价格格。

select products.名称名称a,

products.种类类别a,

products.费用费用a,

sales.名称名称b,

sales.出贩卖价格格价格b

from products,sales where
products.名称=sales.名称

and

出售位置=’贵州’

3、在products表和sales表中查询销到首都的蔬菜名称,体系,花费和发卖价格。

select products.名称名称a,

products.连串体系a,

products.费用花销a,

sales.名称名称b,

sales.贩卖价格价格b

from products,sales where
products.名称=sales.名称

发表评论

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