SQL-TCL事务控制语言&视图相关了解

#TCL语言事务控制语言P134
/*
一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行
案例:转账
张三:余额1000
李四:余额1000

update 表 set 张三的余额=500 where name = '张三';
update 表 set 李四的余额=1500 where name = '李四';
两者需要同时执行,如果其中一个失败那么久全部失败

innodb存储引擎支持事务

事务的acid属性:1.原子性:事务不可再分割,事务中执行单元要么全部执行,要么都不执行
		2.一致性:从一个一致性状态到另一个一致性状态
		3.隔离性:不受其他事务的干扰
		4.持久性:永久性改变

隐式事务:没有明显的开启和结束的标记
	例如:insert、update、delete
	
显示事务:事务具有明显的开启和结束的标记
	前提:必须先设置自动提交功能为禁用
	set autocommit=0;#只针对当前的对话有效
	
	步骤1:开启事务
	set autocommit=0;
	start transaction;
	步骤2:编写事务中的sql语句(select insert update delete)
	步骤3:结束事务
	commit 提交事务
	rollback;回滚事务
*/
SHOW VARIABLES LIKE 'autocommit';
SHOW ENGINES;

#事务的创建:
SET autocommit=0;
START TRANSACTION;

UPDATE acount SET balance=500 WHERE NAME = '张三';
UPDATE acount SET balance=1500 WHERE NAME = '李四';

COMMIT;
#或不执行:回滚
ROLLBACK;
#使用delete删除回滚有效,使用truncate删除后,回滚无效
#savepoint 节点名;设置节点、保存点的方法,可以回滚到保存的断点处
#rollback to savepoint;返回回滚点

#需要设置隔离级别以避免出现脏读、幻读,不可重复读的现象
#level read uncommitted  出现脏读、不可重复读、幻读
#level read committed 避免脏读,出现不可重复读、幻读
#level repeatable read 避免脏读、不可重复读,出现幻读
#level serializable 避免脏读、幻读、不可重复读

#mysql中默认为repeatable read
#oracle中默认read committed


#视图:
/*
含义:虚拟表,和普通表一样使用
临时性:

*/

#1.创建视图:
CREATE VIEW v1 
AS 
SELECT last_name FROM emplyees;

#2.使用
SELECT * fron v1 WHERE last_name LIKE '李四';

#视图的作用:
/*
1.实现了sql的重用
2.简化了sql操作
3.保护数据,提高了安全性
*/
#视图的修改
#create or replace v2 as select...#创建或修改表的内容
#alter view 视图名 as select...
#查看视图:select * from v2;
#删除视图:drop view v2;

#视图更新:更新时会对原始表产生影响,但大多数视图不允许增删改即可

#视图和表的对比
#create view  没有占用实际物理空间只保存sql逻辑  可增删改查,但一般不能  
#create table 占用实际物理空间			可增删改查



#查看是否有键-key
SHOW INDEX FROM mytable;

#P148
#例如本身有一个专业,但目前该专业取消了,那么有些学生的专业写的是被取消的专业,那么将这个专业都设置为空
#级联删除
#1.先添加能够执行级联删除的语句
ALTER TABLE stuinfo CONSTRAINT fk_stu_majoe FOREIGN KEY(majorid) REFERENCES major(id) ON DELETE CASCADE;#在添加外键的语句后面添加即可
#2.删除专业表中的3号专业
DELETE FROM major WHERE id=3;#即可实现删除主表中的id为3的专业,同时删除从表中的对应majorid为3的整行的值

#级联置空
#1.先添加能够执行级联置空的语句
ALTER TABLE stuinfo CONSTRAINT fk_stu_majoe FOREIGN KEY(majorid) REFERENCES major(id) ON DELETE SET NULL;#在添加外键的语句后面添加即可
#2.删除专业表中的3号专业
DELETE FROM major WHERE id=3;#即可实现删除主表中的id为3的专业,同时删除从表中的对应majorid为3的值设为null

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值