MySQL学习笔记(六):MySQL事务

mysql> create database shiwu charset=utf8; #创建数据库
Query OK, 1 row affected (0.00 sec)

mysql> use shiwu;
Database changed
mysql> create table runoob_transaction_test(id int(5)) engine=innodb; #创建表
Query OK, 0 rows affected (0.60 sec)

mysql> select * from runoob_transaction_test;
Empty set (0.01 sec)

mysql> begin; # 开始事务
Query OK, 0 rows affected (0.00 sec)

mysql> insert into runoob_transaction_test value(5);
Query OK, 1 row affected (0.04 sec)

mysql> insert into runoob_transaction_test value(6);
Query OK, 1 row affected (0.00 sec)

mysql> commit; # 提交事务
Query OK, 0 rows affected (0.05 sec)

mysql> select * from runoob_transaction_test;
+------+
| id   |
+------+
|    5 |
|    6 |
+------+
2 rows in set (0.00 sec)

mysql> begin; # 开始事务
Query OK, 0 rows affected (0.00 sec)

mysql> insert into runoob_transaction_test values(7);
Query OK, 1 row affected (0.03 sec)

mysql> rollback;# 回滚事务
Query OK, 0 rows affected (0.07 sec)

mysql> select * from runoob_transaction_test;
+------+
| id   |
+------+
|    5 |
|    6 |
+------+
2 rows in set (0.00 sec)

 

Django事务

from django.db import transaction
#首先要导包
@transaction.atomic
@innerdef list(request):
    post= request.POST
    address = post.get('email')
    cart_id=post.getlist('cart_id')

    # 在调用一个view里面的方法之前,django开始一个事务如果发出的响应没有问题,
    # Django就会提交这个事务。如果在view这里产生一个异常,Django就会回滚这次事务
    # 开启事物保护
    sid = transaction.savepoint()
    try:
        # 1.建立新的订单信息
        # transaction.savepoint_commit(sid)  #事物的提交
        order = OrderInfo()
        now = datetime.now()
        uid = request.session['user_id']
        order.oid=('%s%d')%(now.strftime('%Y%m%d%H%M%S'), uid)  # 拼接字符代码
        order.user_id=uid
        order.udate = now
        order.oaddress = address
        print(order.oaddress,order.udate,order.user_id,order.oid,uid,now)
        order.otatal=0
        order.save()
        total=0  # 计算好的总价
        for cid in cart_id:
            cart=CartInfo.objects.get(pk=cid)
            # 2.判断库存,减少数据库库存
            if cart.goods.gkucun>=cart.count:
                cart.goods.gkucun-=cart.count
                cart.goods.save()         # 连表保存数据库的值
                # 把信息添加订单
                datail = OrderDetailInfo()
                datail.order=order        # 保存的外键对应ID
                datail.goods=cart.goods          #保存外键对应Id
                datail.price=cart.goods.gprice
                datail.count=cart.count
                # print(order,cart.goods,cart.goods.gprice)

                datail.save()
                # 计算总价
                total+=cart.goods.gprice*cart.count
                # 购车用完了删除
                cart.delete()
            else: # 购车数量比库存大
                transaction.savepoint_rollback(sid) #事务的回滚
                return redirect('/cart/')
        order.ototal = total
        print(total)
        order.save() # 计算完了 保存总价格
        transaction.savepoint_commit(sid) #提交事务的逻辑
        return redirect('/user/order/1')

    except :
        # 发生异常就回滚
        transaction.savepoint_rollback(sid)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值