mysql创建视图和事务的语句_MySQL的事务和视图

事务

1.概念

一条或者多条sql语句的集合!

事务:就是一堆操作的集合,他们同生共死。要么都执行成功,要么都执行失败

2.事务的特性  ACID

A:原子性  完整的,不可分割的

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

C: 一致性  事务执行完毕后,数据的状态是一致的()

一致性(Consistency):事务必须保证数据库从一个一致性的状态变成另一个一致性的状态!

I: ISOLation 隔离性  两个事务执行互不影响

隔离性(Isolation):每个事务之间互不干扰!哪怕是并发执行也不干扰!

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  DECIMAL(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):事务必须保证数据库从一个一致性的状态变成另一个一致性的状态!

I: ISOLation 隔离性  两个事务执行互不影响

隔离性(Isolation):每个事务之间互不干扰!哪怕是并发执行也不干扰!

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

持久性(Durability):事务一旦被改变,那么对数据库中数据的影响是永久性的!

3.事务操作的关键字

自动提交事务开关set autocommit=1

开始事务 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  DECIMAL(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)视图可以查询多表数据

2)视图可以嵌套

3)update,insert,delete不能封装成视图内容,通过图形化界面可以操作数据(操作视图数据,影响的是基本表)。

4)删除视图数据的时候,有一定的限定,数据结果来源于多表的时候,不能删除

--  创建一个视图  只获取 学生姓名 编号 以及考试成绩

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

你可能感兴趣的:(mysql创建视图和事务的语句)