TCL语言

#TCL 语言
#transaction control language 事务控制语言

#事务:一个或一组SQL语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行。
/*innodb引擎支持事物*/

#1、事务的ACID属性(原一隔持)
/*
(1)原子性
一个事物不可分割,要么都发生要么都不发生
(2)一致性 consistency
一个事务执行从一个一致性状态到另一个一致性状态
(3)隔离性
并发执行的各个事务之间不能互相干扰
(4)持久性
一个事物一旦提交,对数据库的数据的改变就是永久性的

*/

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


*/

#开启事物
SET autocommit=0;
START TRANSACTION;
#编写事务的语句
UPDATE `tab_8` SET `name`="c" WHERE `id`=1;
UPDATE `tab_8` SET `name`="e" WHERE `id`=2;
#关闭事务
COMMIT;
#rollback ,回滚需要结束条件,么有结束条件只保存到内存中,不会对磁盘文件修改

#3、并发事物的解决
/*
多个事物访问数据库中相同的数据,如果没有采取必要的隔离机制,会导致各种并发问题

(1)脏读
(2)不可重复读(针对update)
(3)幻读(针对insert)
MySQL支持四种隔离级别
            脏读        幻读        不可重复读
read uncommitted:    ✔        ✔        ✔
read committed:    ×        ✔        ✔
repeatable read:    ×        ×        ✔
serializable:        ×        ×        ×
mysql中默认 第三个隔离级别 repaeatable read
oracle 默认第二个 read committed

命令:
#查看隔离级别
select @@tx_isolation;
set session|global transaction isolation level 隔离级别;

4、savepoint的使用
*/
#开启事物
SET autocommit=0;
START TRANSACTION;
#编写事务的语句
UPDATE `tab_8` SET `name`="c" WHERE `id`=1;
SAVEPOINT a;#设置回滚点
UPDATE `tab_8` SET `name`="e" WHERE `id`=2;
#关闭事务
ROLLBACK TO a; #回滚到保存点

#另外:delete 支持回滚,truncate不支持回滚

#视图
/*
含义:虚拟表,和普通表一样使用
MySQL 5.1 版本出现的新特性,通过表动态生成的数据

应用场景:
一、多个地方用到同样的查询结果
二、该查询结果使用的SQL语句较复杂

(1)创建
create view 视图名
as
查询语句;

*/
# 1、查询邮箱中包含a字符的员工名、部门名和工种信息
CREATE VIEW info
AS
SELECT e.`last_name`,d.`department_name`,j.*
FROM `employees` e
INNER JOIN `departments` d ON d.`department_id` = e.`department_id`
INNER JOIN `jobs` j ON e.`job_id` = j.`job_id`;

SELECT `last_name`,`department_name`,`job_id`,`job_title`
FROM info
WHERE `last_name` LIKE "%a%";

/*
好处:
(1)重用SQL语句
(2)简化了复杂的SQL操作,不必知道它的查询细节
(3)保护数据,提高安全性
*/

#(2)视图的修改
/*
方式一:
create or replace view 视图名
as
查询语句

方式二:
语法:
alter view 视图名
as
查询语句

*/
#(3)视图的删除
/*
语法:drop view 视图1,视图2
*/

#(4)查看视图
DESC info;

#(5)视图的更新
    /*插入 insert into
        
    修改 uodate set
    
    删除 drop
    
    注意:
        具备以下特点的视图不允许更新:
        (1)包含以下关键字的SQL语句:分组函数、distinct、group by、having、union 或者union all
        (2)常量视图
        (3)select 中包含子查询
        (4)join
        (5)from 一个不能更新的视图
        (6)where子句的子查询引用了from中的表
    */

#对比            是否占用空间    增删改查
/*视图    create view    几乎不占用    一般不支持
表    create table    占用        支持
*/

#测试题
#创建book表
CREATE TABLE book(
    bid INT PRIMARY KEY,
    bname VARCHAR(20) UNIQUE NOT NULL,
    price DOUBLE DEFAULT 10,
    #foreign key(typeId) references bookType(id)

);

 

上一篇:在本地安装tkinter和python


下一篇:9月7日科技资讯|华为发布麒麟 990 芯片;苹果召回部分电源插头转换器;KDevelop 5.4.2 发布