V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
Nixus
V2EX  ›  MySQL

MySQL 能否依次执行 SQL:先执行 SQL 甲,甲执行成功,再执行 SQL 乙;如果 SQL 甲执行失败,则放弃执行乙

  •  
  •   Nixus · 2015-12-23 17:27:31 +08:00 · 2724 次点击
    这是一个创建于 3251 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我知道事务处理可以做到,但是,事务比较适合处理一条数据的情况;

    如果有一堆数据,需要做这样的操作,该如何实现呢?

    如果有一堆数据,通过遍历来实现,那不是要不停的开启 /关闭事务,效率肯定会大幅下降的,即使遍历前开启事务,遍历后 commit/rollback ,那对数据库的操作也是挺大的

    求解决办法

    6 条回复    2015-12-23 18:37:35 +08:00
    young
        1
    young  
       2015-12-23 17:48:34 +08:00   ❤️ 1
    建议去看一下 mysql 的事务文档, 可以部分提交 /回滚
    magnetoeric
        2
    magnetoeric  
       2015-12-23 17:55:13 +08:00   ❤️ 1
    mysql savepoint
    Nixus
        3
    Nixus  
    OP
       2015-12-23 17:56:52 +08:00
    @young 能否获得被回滚的数据呢?
    qhxin
        4
    qhxin  
       2015-12-23 17:59:40 +08:00
    一堆数据也可以啊,合理规划不会影响效率的,具体情况具体分析
    elgoog1970
        5
    elgoog1970  
       2015-12-23 18:28:59 +08:00
    mysql 事务
    mko0okmko0
        6
    mko0okmko0  
       2015-12-23 18:37:35 +08:00
    假设这个 甲 有点大量.
    不要用交易:
    但需要多一个整数栏位(假设是 ipath).预设 null.
    开始甲之前,取得一个本日豪秒或是格林威治千分秒数.反正需要一个不可能重复的数字.
    汇入 甲的时候此栏放入这个数字.代表这一批 甲 的批次编号.
    汇完甲后,检查此批的数量是否正确:
    count(ipath) as cnt where ipath=批号
    如果正确:执行 乙 .
    不正确:删除 ipath=批号 的纪录.

    如果跑完 乙 ,不需要 ipath 这栏了.删除栏位.

    其实交易处理这个真的很好用阿.不然交易是拿来看的吗?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2927 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 13:41 · PVG 21:41 · LAX 05:41 · JFK 08:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.