首页 > 数据库 >PHP mysql 大量批量insert或update数据出错问题

PHP mysql 大量批量insert或update数据出错问题

时间:2024-04-30 15:37:31浏览次数:30  
标签:insert SET users age UPDATE update mysql WHERE name

UPDATE users SET age = 30 WHERE name = 'Alice';
UPDATE users SET age = 25 WHERE name = 'Bob';
UPDATE users SET age = 35 WHERE name = 'Charlie';

以上代码会导致并发性问题,因为多个更新语句可能会同时执行,导致数据错乱。

解决办法:

1、使用锁定

LOCK TABLES users WRITE;
UPDATE users SET age = 30 WHERE name = 'Alice';
UPDATE users SET age = 25 WHERE name = 'Bob';
UPDATE users SET age = 35 WHERE name = 'Charlie';
UNLOCK TABLES;

2、使用事务

START TRANSACTION;
UPDATE users SET age = 30 WHERE name = 'Alice';
UPDATE users SET age = 25 WHERE name = 'Bob';
UPDATE users SET age = 35 WHERE name = 'Charlie';
COMMIT;

一般使用事务,PHP操作:

$sqls=["START TRANSACTION"];//开启事务避免出错
for($datas as $d){
    $sql="............";
    array_push($sqls,$sql);
}
array_push($sqls,"COMMIT");
$sqls=implode(";",$sqls);
$result=$pdo->query($sqls);

或者:

$db->query('START TRANSACTION');
$db->query('update member set money=money+'.$money.' where memberId='.$memberId);
$db->query('insert into mem_log(money) values('.$money.')');
$db->query('commit');

 

或者:

try {
    // 开启事务
    $pdo->beginTransaction();
    // 执行一些SQL操作
    $pdo->exec("INSERT INTO table1 (column1) VALUES ('value1')");
    $pdo->exec("UPDATE table2 SET column2 = 'value2' WHERE id = 1");
    // 提交事务
    $pdo->commit();
} catch (Exception $e) {
    // 发生错误,回滚事务
    $pdo->rollBack();
    // 处理错误,例如打印错误信息
    echo "Error: " . $e->getMessage();
}

标签:insert,SET,users,age,UPDATE,update,mysql,WHERE,name
From: https://www.cnblogs.com/prefertea/p/18168091

相关文章

  • MYSQL中Join的用法
    1、笛卡尔积(没有加筛选条件的内连接)两表关联,把左表的列和右表的列通过笛卡尔积的形式表达出来。mysql>select*fromt1joint2;或者mysql>select*fromt1innerjoint2;或者mysql>select*fromt1,t2;2、左连接两表关联,左表全部保留,右表关联不上用null表......
  • centos 7 下完全卸载 mysql 5.6
    centos下完全卸载mysql5.6 1查看已经安装的服务rpm-qa|grep-imysql-i作用是不区分大小写mysql-community-common-5.6.51-2.el7.x86_64mysql-community-libs-5.6.51-2.el7.x86_64mysql-community-server-5.6.51-2.el7.x86_64mysql-community-release-el7-5.noarchmy......
  • mysql-B+树
    MySQL中的InnoDB存储引擎广泛使用了B+树作为索引的数据结构,这是因为它特别适合于磁盘I/O密集型操作,能够高效地处理大量的数据查询。B+树的基本特性有序性:B+树的所有叶子节点包含了全部的关键字以及对应的数据记录指针,并且这些叶子节点是按关键字的大小顺序链接在一起的。这使......
  • CentOS安装MySQL的两种方式——RPM和YUM
    0、首先确认是否安装过MySQLyumlistinstalled|grepmysqlrpm-qa|grepmysql若果有安装,需要先删除旧版本。yumremovemysql一、通过官网下载tar压缩包(或者直接下载RPM安装包)1.打开MySQL官网下载地址,选择适合自己的版本,下载tar压缩包。2.通过WinSCP等工具上传到CentO......
  • 【教程】Homebrew安装MySQL 8 & 设置root密码
    ✨Homebrew安装MySQL8brewinstallmysql==>CaveatsWe'veinstalledyourMySQLdatabasewithoutarootpassword.Tosecureitrun:mysql_secure_installationMySQLisconfiguredtoonlyallowconnectionsfromlocalhostbydefaultToconnectr......
  • Mysql启动报错:Job for mysqld.service failed because the control process exited wi
      该方法会删除mysql数据,慎用centos7上使用yum安装mysql后,启动报错[root@localhost~]#systemctlstartmysqldJobformysqld.servicefailedbecausethecontrolprocessexitedwitherrorcode.See"systemctlstatusmysqld.service"and"journalctl-xe"for......
  • Mysql锁机制与优化实践以及MVCC底层原理剖析
    学习来源-图灵课堂https://vip.tulingxueyuan.cn锁学习参考:https://juejin.cn/post/7307889500545253395  锁机制为了保证数据的一致性,当访问共享变量的时候我们可以针对共享数据加锁,但是加锁要时要注意加锁的成本,还有加锁的粒度,还有就是是否会发生死锁,还有就是发生了死锁......
  • 3分钟部署mysql并开启binlog
    curl-fsSLhttps://get.docker.com|bashyum-yinstalldocker-cesudosystemctlstartdockersudosystemctlenabledockermysql快速安装sudodockerpullmysqlmkdir-p/opt/module/mysql/conf/opt/module/mysql/data/opt/module/mysql/conf/config.d/touch/opt......
  • Mysql、Oracle、SqlServer的JDBC连接实现和对比(提供驱动包)
    Mysql、Oracle、SqlServer的JDBC连接实现和对比(提供驱动包)首先,我们需要准备数据库连接所需的jar包。目前mysql的驱动包可能比较好找,但是oracle和sqlserver的有很多,要找到能用的要花一点点心思,这里直接把下载地址和版本发送出来。Mysql:驱动程序包:mysql-connector-java-5.1.3......
  • mysql-undo log
    MySQL的UndoLog(回滚日志)是InnoDB存储引擎中一个核心的组件,它主要有以下两个目的:确保事务的原子性支持多版本并发控制(MVCC)1.事务的原子性保证UndoLog记录了数据更改之前的状态。当一个事务开始修改数据时,InnoDB首先会在UndoLog中记录这些更改的反向操作(比如,一个......