[华为云在线课程][SQL语法分类][数据控制][学习笔记]
【摘要】 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。
- 示例:回滚事务到保存点。
- 查询表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
- 查询表bonus_2019的数据。
5.思考题
- SQL语句中"commit"命令的作用是回滚一个事务(错)
- 在设置关闭自动提交后,需要显式commit的有(insert update delete)
- 现有空表t1,执行下面语句
执行语句后,t1表有1条数据(1,1),t2表有1条数据(1,1)。insert into t1 values (1,1); create table t2 as select * from t1; insert into t2 values (2,2); rollback;
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
- 示例:查看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,
- 创建表bonus_2020及索引
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';
- 将变量name值设为43
8.思考题
- 使用set global命令设置系统参数后,重启数据库后,该参数依旧生效(false)
- 使用哪条命令可以看到当前数据库中的所有进程(show processlist;)
- 使用哪条命令可以看到当前数据库中的所有表(show tables; show tables from database_name;)
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)