[华为云在线课程][SQL语法分类][数据控制][学习笔记]

举报
John2021 发表于 2022/08/13 12:52:03 2022/08/13
【摘要】 1.事务控制事务是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。事务控制提供了事务的启动、提交、两阶段提交准备、回滚、设置隔离级别操作,并支持在事务中创建保存点。功能相关SQL提交事务commit回滚事务rollbackGaussDB(for MySQL)没有提供显式定义事务开始的语句,第一个可执行SQL(除登录语句外)隐含事务的开始。 2.提交事务...

1.事务控制

  • 事务是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。

  • 事务控制提供了事务的启动、提交、两阶段提交准备、回滚、设置隔离级别操作,并支持在事务中创建保存点。

    功能 相关SQL
    提交事务 commit
    回滚事务 rollback
  • GaussDB(for MySQL)没有提供显式定义事务开始的语句,第一个可执行SQL(除登录语句外)隐含事务的开始。

2.提交事务

  • 功能描述
    • 该语句使当前事务工作单元中的所有操作"永久化",并结束该事务。
  • 语法格式
    commit;
    
  • 示例
    -- 设置禁止自动提交
    set autocommit=0;
    -- 创建表training
    drop table if exists training;
    create table training(
        staff_id int not null ,
        staff_name varchar(16),
        course_name char(20),
        course_start_date datetime,
        course_end_date datetime,
        exam_date datetime,
        score int
    );
    -- 向表training中插入记录
    insert into training(staff_id, staff_name, course_name, course_start_date, course_end_date, exam_date, score)
    values (10,'lipeng','java','2022-08-12 22:58:00','2022-08-12 22:58:00','2022-08-12 22:58:00',90);
    -- 提交事务
    commit ;
    

3.回滚事务

  • 功能描述
    • 该语句回滚(废除)当前事务工作单元中的所有操作,并结束该事务。
  • 语法格式
    rollback [ to savepoint savepoint_name ]
    
  • 示例:创建表posts,插入数据,回滚所有操作并结束事务。
    -- 设置禁止自动提交
    set autocommit =0;
    -- 创建表posts
    drop table if exists posts;
    create table posts(
        post_id char(2) not null ,
        post_name char(16) not null ,
        basic_wage int,
        basic_bonus int
    );
    -- 向表中posts插入记录
    insert into posts(post_id, post_name, basic_wage, basic_bonus) values('a','general manager',50000,5000);
    -- 回滚事务
    rollback ;
    

4.事务保存点

  • 功能描述
    • savepoint语句用于在事务中设置保存点。
    • 保存点提供了一种灵活的回滚,事务在执行中可以回滚到某个保存点。在该保存点以前的操作有效,而以后的操作被回滚。一个事务中可以设置多个保存点。
  • 语法格式
    savepoint savepoint_name
    
  • 示例:回滚事务到保存点
    • 创建表bonus_2019。
      drop table if exists bonus_2019;
      create table bonus_2019(
          staff_id int not null ,
          staff_name char(50),
          job varchar(30),
          bonus int
      );
      
    • 向表bonus_2019中插入记录1。
      insert into bonus_2019(staff_id, staff_name, job, bonus) values (23,'limingwnag','developer',5000);
      
    • 设置保存点s1。
      savepoint s1;
      
    • 向表bonus_2019中插入记录2。
      insert into bonus_2019(staff_id, staff_name, job, bonus) values(24,'liyuyu','tester',7000);
      
    • 设置保存点s2。
      savepoint s2;
      
  • 示例:回滚事务到保存点。
    • 查询表bonus_2019的数据。
      select * from bonus_2019;
      
      23,limingwnag,developer,5000
      24,liyuyu,tester,7000
      
    • 回滚到保存点s1。
      rollback to savepoint s1;
      
    • 查询表bonus_2019的数据。
      select * from bonus_2019;
      
      23,limingwang,developer,5000
      

5.思考题

  • SQL语句中"commit"命令的作用是回滚一个事务(错)
  • 在设置关闭自动提交后,需要显式commit的有(insert update delete)
  • 现有空表t1,执行下面语句
    insert into t1 values (1,1);
    create table t2 as select * from t1;
    insert into t2 values (2,2);
    rollback;
    
    执行语句后,t1表有1条数据(1,1),t2表有1条数据(1,1)。

6.SHOW命令

  • 功能描述
    • 该语句有许多形式,可以提供有关于数据库、表、列和有关于服务器状态等信息。
  • 语法格式
    show {binary|master} logs
    show character set [like_or_where]
    show databases
    show tables
    show create database db_name
    show create table tbl_name
    show index from tbl_name [from db_name]
    show warnings [limit [offset,]row_count]
    show privileges
    show processlist
    
  • 示例:显式实例下的数据库。
    show databases ;
    
  • 示例:显示数据库中的表
    • 创建表bonus_2019
      drop table if exists bonus_2019;
      create table bonus_2019(
          staff_id int not null ,
          staff_name char(50),
          job varchar(30),
          bonus int
      );
      
    • 查看数据库中的表
      show tables ;
      show tables from database_name;
      
    • 结果
      bonus_2019
      
  • 示例:查看bonus_2019表的建表语句
    show create table bonus_2019;
    
    • 结果为
    CREATE TABLE `bonus_2019` (
    `staff_id` int NOT NULL,
    `staff_name` char(50) DEFAULT NULL,
    `job` varchar(30) DEFAULT NULL,
    `bonus` int DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
    
  • 示例:显式表中的索引
    • 创建表bonus_2020及索引
      drop table if exists bonus_2020;
      create table bonus_2020(
          staff_id int not null primary key auto_increment,
          staff_name char(50),
          job varchar(30),
          bonus int
      );
      create index idx_staff on bonus_2020(staff_name);
      
    • 查看bonus_2020表的索引
      show index from bonus_2020;
      
    • 结果为:
      bonus_2020,0,PRIMARY,1,staff_id,A,0,,,"",BTREE,"","",YES,
      bonus_2020,1,idx_staff,1,staff_name,A,0,,,YES,BTREE,"","",YES,
      

7.SET命令

  • 功能描述
    • 该语句使用户可以将值分配给不同的变量、服务器或客户端的操作。
  • 语法格式
    set variable = expr [,variable = expr] ...
    variable:
    {
        user_var_name
        |param_name
        |local_var_name
        |{global|@@global.}system_var_name
        |{persist|@@persist.}system_var_name
        |{persist_only|@@persist_only.}system_var_name
        |[session|@@session.|@@]system_var_name
    }
    
  • 示例
    • 将变量name值设为43
      set @name=43;
      
    • 将全局参数max_connections设置为1000
      set global max_connections=1000;
      set @@global max_connections=1000;
      
    • 将当前会话的sql_mode值设置为traditional(只影响当前会话)
      set session sql_mode='traditional';
      set local sql_mode='traditional';
      set @@session.sql_mode='traditional';
      set @@local.sql_mode='traditional';
      set @@sql_mode='traditional';
      set sql_mode='traditional';
      

8.思考题

  • 使用set global命令设置系统参数后,重启数据库后,该参数依旧生效(false)
  • 使用哪条命令可以看到当前数据库中的所有进程(show processlist;)
  • 使用哪条命令可以看到当前数据库中的所有表(show tables; show tables from database_name;)
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。