本篇内容主要讲解“数据库的事务提交和回滚”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“数据库的事务提交和回滚”吧!
事务 - (transaction / tx)
原子性操作性(不可以分割的操作) - 要么全做, 要么全不做
事务的特点 - ACID 特性
A - atomicity 原子性 : 不可分割, 要么成功要么全失败
C - Consistency 一致性: 事务前后数据状态要保持一致, 总数一致
I - Isolation - 隔离性 : 多个事务不能看到对方的中间状态(提交或者回滚之前的状态)
D - Duration 持久性: 事务完成后数据要持久化(事务的影响要反映在物理存储上)
不需要显式使用事务语句开始一个事务,当遇到第一个DML语句时,一个事务开始,在出现以下情况时,事务结束。
(1)当遇到 commit 语句 或 rollback 语句时,将提交或回滚事务。
(2)当用户退出 Oracle工具时。
(3)当机器失效或系统奔溃时。
操作方法
begin; -开始事物
commit; - 提交事物
Python 默认是取消自动提交的
rollback- 回撤操作, 只要操作没有执行 commit 就可以进行回滚操作, 撤回
例如:
create table tb_account
(
accid char(4) not null,
uname varchar(20) not null,
balance float default 0
)
insert into tb_account values
('1111', '张明禄', 1200.99),
('2222', '王大锤', 500);
-- 开启一个事物 start transaction
begin;
update tb_account set balance=balance-1000
where accid='1111';
update tb_account set balance=balance+1000
where accid='2222';
commit; -- 提交 才能改变
rollback; -- 撤销
begin;
delete from tb_account; -- 没有commmit 不会删除表
rollback;
SQL 注射***
def main():
config = {
'host': 'localhost',
'user': 'root',
'passwd': '123456',
'db': 'hrs',
'charset': 'utf8',
'cursorclass': pymysql.cursors.DictCursor
}
conn = pymysql.connect(**config)
try:
uid = input('用户名: ')
pwd = input('密码: ')
with conn.cursor() as cursor:
# 注射***的万能密码: a' or '1'='1
"""
sql = "select 'x' from tb_user where username='%s' \
and userpass='%s'" % (uid, pwd)
if cursor.execute(sql) > 0:
"""
# cursor.callproc('sp_dept_avg_sal', ())
# 定义存储过程 / PyMySQL调用存储过程
if cursor.execute(
'select 1 from tb_user where username=%s and userpass=%s',
(uid, pwd)):
print('登录成功, 开始使用系统')
else:
print('用户名或密码错误')
finally:
conn.close()
到此,相信大家对“数据库的事务提交和回滚”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。