PHP学习记录和工作中遇到到问题记录(2)
程序员文章站
2022-05-31 16:09:56
...
今天从后盾网学习了mysql的事务处理流程,并对事务处理有了一些基本的认识。使用的是PDO连接数据库,使用的代码如下
<?php
$config =array(
'host'=>'127.0.0.1',
'user'=>'root',
'password'=>'root',
'database'=>'demo',
'charset'=>'utf8'
);
$dsn =sprintf("mysql:host=%s;dbname=%s;charset=%s",$config['host'],$config['database'],$config['charset']);
try{
$dbh = new PDO($dsn,$config['user'],$config['password']);
}catch(PDOException $e){
die($e->getMessage());
}
try{
$pdo->beginTransaction();
$pdo->exec('select * from demo');
$pdo->exec('update demo set name="李明" where id=1');
}catch(Exception $e){
$pdo->rollback();
die($e->getMessage());
}
事务具有四种特性ACID,即原子性(要不全执行,要不全不执行),一致性(事务提交只有两种状态,提交前的状态和提交后的状态),隔离性(每个事务可以并发互不干扰,如果有两个事务操作同一个数据需要用到锁),持久性(事务一旦提交对数据库的操作就是永久性的);
在学习的过程中还学习到了MYSQL锁的运用
悲观锁
//悲观锁是在提交前对表上锁,锁分表锁和行锁,如果where的条件是索引的话则是行锁,如果不是的话就是表锁
update demo set name="李明" where id=1 for update;
行锁的实现需要注意:
行锁必须有索引才能实现,否则会自动锁全表,那么就不是行锁了。
两个事务不能锁同一个索引。
insert,delete,update在事务中都会自动默认加上排它锁。
乐观锁
我理解的乐观锁就是加一个字段,在操作表的时候条件中加上这个字段,如果这个字段不符合要求则执行失败。
在我日常的代码开发中经常就是直接复制粘贴很少能写一些基础的东西,一些异常处理机制和使用PDO连接数据库的代码也不太熟练,希望自己能经常回顾这些最基本的代码。