mysql之TQL(Transaction Control Language)

事务的概念

事务是由单独单元的一个或多个sql语句组成,在这个单元中每个mysql语句相互依赖。整个单元作为一个不可分割的整体,如果单元中某条sql语句一旦执行失败或产生错误,整个单元就会回滚,单元中的所有sql语句执行成功,则事务被执行完成。

存储引擎

mysql中存在不同的存储引擎,使用不同的技术将数据放入数据库中。可以通过show engines查看mysql支持的存储引擎。其中典型的存储引擎有2个innodb是支持事务的,myisam不支持事务。

事务的特性

ACDI

  • 原子性(Atomicity):原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。

  • 一致性(Consistency):事务必须从一个一致性的状态变换到另一个一致性状态。
    例子:a给b100元钱,那么a就要-100,b就要+100,这两件事情必须同时发生,就叫做事务的一致性。

  • 隔离性(Isolation):事务的隔离性是指一个事务执行不能被其他事务干扰。

  • 持久性(Durability):持久性是指一个事务一旦被提交对数据库的改变是永久的。

set autocommit=0;
start transaction;
...
savepoint a
...
commit;rollback;rollback to a;

事务的隔离级别

  • 脏读(dirty read)
    事务A访问了数据库,它干了一件事情,往数据库里加上了新来的牛人的名字“tom”,但是没有提交事务。来了另一个事务B,他要查询所有牛人的名字,这时,如果没有事务之间没有有效隔离,那么事务B返回的结果中就会出现“tom”的名字。
  • 不可重复读(unrepeatable read)
    事务A访问了数据库,他要查看ID是1的牛人的名字,这时,事务B来了,因为ID是1的牛人改名字了,所以要更新一下,然后提交了事务。接着,事务A还想再看看ID是1的牛人的名字,结果,两次读出来的ID是1的牛人名字竟然不相同,这就是不可重复读。
  • 幻读(phantom problem)
    事务A访问了数据库,他想要看看数据库的牛人都有哪些,事务B来了,往数据库加入了一个新的牛人。这时候,事务A忘了刚才的牛人都有哪些了,于是又执行了。结果,第一次有三个牛人,第二次有四个牛人。这种情况就叫幻读。

数据库一般有4种隔离级别:

  • Read uncommitted:允许两个事务并行,假如写事务执行了其中一个更改表的操作,并且未提交,那么另一个读事务在查询过程中就会显示更改过后的表。这就叫脏读,Read uncommitted会出现脏读。

  • Read committed:允许两个事务并行,假如写事务执行了其中一个更改表的操作,当且仅当提交的时候,那么另一个读事务在查询过程中才会显示更改过后的表。叫不可重复读,Read committed出现不可重复度。

  • Repeatable read:允许两个事务并行,写事务执行更改表操作并且提交并不会影响正在执行的读事务中的查询。在写事务提交后的新读事务会显示更改过后的表,Repeatable read会出现幻读。

  • Serializable:不允许两个事务并行,只能是一个事务一个事务执行,不能多个事务同时执行,后面来的事务会阻塞,等待前面的事务提交。

orcle只有Read committed和Serializable两种。
mysql有以上4种隔离级别。

通过HTML网页对MySQL数据库进行增删改查,你需要使用服务器端语言(如PHP、Python等)来处理用户的请求,并与MySQL数据库进行交互。以下是一个简单的示例: 1. 首先,确保你已经安装了MySQL数据库,并创建了相应的数据库和表。 2. 在HTML网页上,你可以使用表单来接收用户的输入。例如,你可以创建一个包含输入框和提交按钮的表单。 ```html <form action="process.php" method="POST"> <label for="name">名称:</label> <input type="text" id="name" name="name"> <label for="age">年龄:</label> <input type="text" id="age" name="age"> <input type="submit" value="添加"> </form> ``` 3. 在服务器端,你可以使用服务器端语言来处理表单的提交,并将数据插入到MySQL数据库中。以下是一个使用PHP处理表单提交的示例(假设你已经安装了PHP并配置了服务器): ```php <?php // 连接到MySQL数据库 $servername = "localhost"; $username = "your_username"; $password = "your_password"; $dbname = "your_database"; $conn = new mysqli($servername, $username, $password, $dbname); // 检查连接是否成功 if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); } // 处理表单提交 if ($_SERVER["REQUEST_METHOD"] == "POST") { $name = $_POST["name"]; $age = $_POST["age"]; // 执行插入操作 $sql = "INSERT INTO your_table (name, age) VALUES ('$name', $age)"; if ($conn->query($sql) === TRUE) { echo "数据插入成功"; } else { echo "错误: " . $sql . "<br>" . $conn->error; } } // 关闭数据库连接 $conn->close(); ?> ``` 以上是向MySQL数据库插入数据的示例。你可以类似的方式处理删除、修改和查询操作。请注意,为了安全起见,你应该对用户输入进行适当的验证和过滤,以防止SQL注入等安全问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值