实验---------------七

### 创建数据库和数据表



```sql

-- 步骤1:创建数据库 transaction_test

CREATE DATABASE IF NOT EXISTS transaction_test;



-- 步骤2:选择数据库

USE transaction_test;



-- 步骤3:创建表 account

DROP TABLE IF EXISTS `account`;



CREATE TABLE `account` (

  `accountno` int(11) DEFAULT NULL,

  `value` int(11) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8;



-- 步骤4:创建表 student

CREATE TABLE IF NOT EXISTS student (

  studentid char(6) PRIMARY KEY,

  name varchar(10),

  sex char(2)

) ENGINE=InnoDB;

```



### 事务的提交



#### 步骤1



```sql

-- 开启事务

START TRANSACTION;



-- 插入账户信息(111,500)

INSERT INTO account (accountno, value) VALUES (111, 500);



-- 提交事务

COMMIT;

```



#### 步骤2



```sql

-- 开启事务

START TRANSACTION;



-- 插入账户信息(222,500)

INSERT INTO account (accountno, value) VALUES (222, 500);

```



在另一个 MySQL 客户端窗口查询 `account` 表中的记录,观察查询情况。



### 事务的回滚



#### 步骤1



```sql

-- 开启事务

START TRANSACTION;



-- 插入账户信息(444,500)

INSERT INTO account (accountno, value) VALUES (444, 500);



-- 设置保存点 p1

SAVEPOINT p1;



-- 将账号为“444”的账户余额增加1000

UPDATE account SET value = value + 1000 WHERE accountno = 444;

```



#### 步骤4



```sql

-- 回滚事务到保存点 p1

ROLLBACK TO SAVEPOINT p1;

```



#### 步骤6



```sql

-- 回滚整个事务

ROLLBACK;

```



#### 步骤7



```sql

-- 查看 account 表中记录情况

SELECT * FROM account;

```



### 事务的原子性



#### 步骤1



```sql

-- 开启事务

START TRANSACTION;



-- 插入两条账户信息(555,500)和(666,500)

INSERT INTO account (accountno, value) VALUES (555, 500), (666, 500);



-- 提交事务

COMMIT;

```



#### 步骤2



```sql

-- 开启第二个事务

START TRANSACTION;



-- 插入两条账户信息(777,500)和(888,-500)

INSERT INTO account (accountno, value) VALUES (777, 500), (888, -500);



-- 回滚事务

ROLLBACK;

```



### 事务的隔离性



#### 步骤1



在 navicat 客户端使用 root 用户在事务中将账号为“111”的余额增加500,但不提交该事务。



#### 步骤2



```sql

-- 使用 root 账户登录,在 mysql 客户端创建用户 ok,并赋予操作权限

CREATE USER 'ok'@'localhost' IDENTIFIED BY '123';

GRANT ALL PRIVILEGES ON transaction_test.* TO 'ok'@'localhost';



-- 使用 ok 账户登录

-- 开启事务

START TRANSACTION;



-- 将账号为“111”的余额增加 500

UPDATE account SET value = value + 500 WHERE accountno = 111;

```



当 root 用户打开事务使用 commit 命令提交后,发现了什么?



### 注意



请按照具体环境修改 SQL 语句中的数据库和表名。在 MySQL 客户端执行上述 SQL 语句进行演示。由于涉及事务操作,请谨慎执行。

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
sqli-labs是一个SQL注入学习平台,通过一系列的关卡来帮助用户学习和实践SQL注入技术。以下是一个通关指南,帮助你逐个完成sqli-labs的关卡: 1. 第一关:基础SQL注入 - 输入 `' OR 1=1 --` 作为用户名和密码,绕过登录验证。 2. 第二关:字符串型注入 - 在用户名字段中输入 `' OR '1'='1`,在密码字段中输入任意值。 3. 第三关:整数型注入 - 在用户名字段中输入 `admin' OR '1'='1`,在密码字段中输入任意值。 4. 第四关:布尔型注入 - 在用户名字段中输入 `' OR 1=1 --`,在密码字段中输入任意值。 5. 第五关:时间型注入 - 在用户名字段中输入 `' OR SLEEP(5) --`,在密码字段中输入任意值。 6. 第六关:错误型注入 - 在用户名字段中输入 `' OR 1=1 --`,在密码字段中输入任意值。 7. 第七关:盲注 - 使用盲注技巧逐步猜测数据库的信息,例如利用 `AND` 和 `OR` 运算符进行条件判断。 8. 第八关:受限字符型注入 - 输入 `' OR '1'='1` 作为用户名,并在密码字段中输入任意值。 9. 第九关:受限函数型注入 - 使用一些受限制的函数,如 `GROUP_CONCAT` 或 `SUBSTRING` 来构造注入语句。 10. 第十关:盲注进阶 - 使用盲注技巧和条件判断,尝试逐步猜测数据库的信息。 这只是sqli-labs的一部分关卡,通关后你可以继续探索更多高级的SQL注入技术。在进行任何实验之前,请确保已经了解并遵守所有适用的法律和道德规范。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值