首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

面试官再问你怎么修改订单,就把这篇甩给他

基本功能 创建订单 随着购物流程更新订单状态 查询订单,包括用订单数据生成各种报表 数据表 订单主表:也叫订单表,保存订单的基本信息 订单主表和后面的几个子表都是一对多,关联的外键就是订单主表的主键,...也就是订单号 订单商品表:保存订单中的商品信息 订单支付表:保存订单的支付和退款信息 订单优惠表:保存订单使用的所有优惠信息。...用户在浏览器页面上点击“提交订单”按钮的时候,浏览器就会给订单系统发一个创建订单的请求,订单系统的后端服务,在收到请求之后,往数据库的订单表插入一条订单数据,创建订单成功....这时候即使重试的666请求再来,因为它和上一条666请求带着相同的版本号,上一条请求更新成功后,这个版本号已经变了,所以重试请求的更新必然失败 无论哪种情况,数据库中的数据与页面上给用户的反馈都是一致的...实现订单幂等的方法,你完全可以套用在其他需要实现幂等的服务中,只需要这个服务操作的数据保存在数据库中,并且有一张带有主键的数据表即可 参考 后端存储实战

98532

SQL命令 UPDATE(三)

此设置不适用于用NOCHECK关键字定义的外键。 在UPDATE操作期间,对于每个具有更新字段值的外键引用,都会在被引用表中的旧(更新前)引用行和新(更新后)引用行上获得共享锁。...如果对CASCADE、SET NULL或SET DEFAULT定义的外键字段执行了带有%NOLOCK的UPDATE操作,则相应的更改外键表的引用操作也会使用%NOLOCK。...传统SQL锁升级:类不使用“E”类型锁升级的最可能的原因是存在一个多属性IDKey索引。 在本例中,每个%Save都会增加锁计数器的值。...如果用户是该表的Owner(创建者),则自动授予该用户对该表的所有特权。 否则,必须向用户授予该表的权限。 如果不这样做,将导致一个带有%msg的SQLCODE -99错误。...尝试更新具有列级ReadOnly (SELECT或REFERENCES)权限的字段的值(即使是NULL值)将导致SQLCODE -138错误:无法为只读字段插入/更新值。

1.6K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Redis Cluster 数据分片

    槽指派Redis 集群通过分片的方式来保存数据库中的键值对:集群的整个数据库被分为 16384 个槽(slot),数据库中的每个键都属于这 16384 个槽的其中一个,集群中的每个节点可以处理 0 个或最多...---除了将键值对保存在数据库里面之外,节点还会用 clusterState 结构中的 slots_to_keys 跳跃表来保存槽和键之间的关系:typedef struct clusterState...)都是一个数据库键:每当节点往数据库中添加一个新的键值对时,节点就会将这个键以及键的槽号关联到 slots_to_keys 跳跃表。...通过在 slots_to_keys 跳跃表中记录各个数据库键所属的槽,节点可以很方便地对属于某个或某些槽的所有数据库键进行批量操作,例如命令 cluster getkeysinslots 错误在进行重新分片期间,源节点向目标节点迁移一个槽的过程中,可能会出现这样一种情况:属于被迁移槽的一部分键值对保存在源节点里面,而另一部分键值对则保存在目标节点里面。

    69550

    腾讯二面:Redis 事务支持 ACID 么?

    数据库的完整性约束包括但不限于: 实体完整性(如行的主键存在且唯一); 列完整性(如字段的类型、大小、长度要符合要求) 外键约束; 用户自定义完整性(如转账前后,两个账户余额的和应该不变)。...持久性(Durability):事务一旦提交,所有的修改将永久的保存到数据库中,即使系统崩溃重启后数据也不会丢失。...但是,这个命令只能用来主动放弃事务执行,把暂存的命令队列清空,起不到回滚的效果。 所以,事务命令操作的结果不会被保存到 RDB 快照中,使用 RDB 快照进行恢复时,数据库里的数据也是一致的。...如果我们使用了 AOF 日志,而事务操作还没有被记录到 AOF 日志时,实例就发生了故障,那么,使用 AOF 日志恢复的数据库数据是一致的。...如果只有部分操作被记录到了 AOF 日志,我们可以使用 redis-check-aof 清除事务中已经完成的操作,数据库恢复后也是一致的。 什么是 WATCH 机制?

    1.9K20

    MyBB

    0x00前言 MyBB是一种非常流行的开源论坛软件。然而,即使是一个流行的工具也可能包含可能导致整个系统崩溃的错误或错误链。在本文中,我们将介绍远程代码执行漏洞利用链。...(将单引号添加到通过代理截获的用户搜索请求中的自定义Bio字段的键中) SQL注入的发生是由于从用户传输的数据没有完全控制/转义。...在创建或编辑模板时,也可以插入变量值,例如,{lang→users_signature}, {memprofile['signature']}。 模板保存在数据库的mybb_templates表中。...然而,这是不可能的。在将模板保存到数据库之前,将在admin/modules/style/templates.php的536行中调用check_template函数。...(保存模板时,调用check_template函数) check_template函数的目的是通过eval函数检查用户传递的模板中是否存在允许在系统中执行任意代码的结构。

    53230

    mysql事务回滚机制概述

    用户输入需要取款的金额,按下确认键; 5 从后台数据库中减掉用户账户上的对应金额; 6 ATM吐出钱; 7 用户把钱拿走。...事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位,事务回滚是指将该事务已经完成的对数据库的更新操作撤销,在事务中,每个正确的原子 操作都会被顺序执行,直到遇到错误的原子操作...回滚的意思其实即使如果之前是插入操作的话,那么会执行删除之前插入的记录,如果是修改操作的话,那么会执行将update之前的记录还原。 因此,正确的原子操作是真正被执行过的,是物理执行。...就是主键的计数记录的当前值是保存在内存中,并不是存在磁盘中的,当mysql server处于运行的时候,这个计数值只会随着 insert增长,不会随着delete减少。...列的最大值,然后将这个值放到auto_increment计数器中,所以ROLLBACK MYSQL的auto_increment计数器也不会做负运算 事务分为哪些种:扁平事务,带有保存点扁平事务

    2.7K20

    mysql事务回滚机制概述「建议收藏」

    4 用户输入需要取款的金额,按下确认键; 5 从后台数据库中减掉用户账户上的对应金额; 6 ATM吐出钱; 7 用户把钱拿走。...事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位,事务回滚是指将该事务已经完成的对数据库的更新操作撤销,在事务中,每个正确的原子 操作都会被顺序执行,直到遇到错误的原子操作...回滚的意思其实即使如果之前是插入操作的话,那么会执行删除之前插入的记录,如果是修改操作的话,那么会执行将update之前的记录还原。 因此,正确的原子操作是真正被执行过的,是物理执行。...就是主键的计数记录的当前值是保存在内存中,并不是存在磁盘中的,当mysql server处于运行的时候,这个计数值只会随着 insert增长,不会随着delete减少。...列的最大值,然后将这个值放到auto_increment计数器中,所以ROLLBACK MYSQL的auto_increment计数器也不会做负运算 事务分为哪些种:扁平事务,带有保存点扁平事务

    2.6K10

    SQL命令 SELECT(一)

    SQL命令 SELECT(一) 从数据库中的一个或多个表中检索行。...FROM table-ref - 可选的——对一个或多个表的引用,从中检索数据。 每个FROM子句都需要一个有效的table-ref,即使SELECT不引用该表。...在使用带有JOIN语法的视图时存在一些限制。 子查询必须用括号括起来。 table-ref可以是限定的(schema.tablename),也可以是不限定的(tablename)。...注意:对表具有表级SELECT特权并不能充分测试该表是否实际存在。 如果指定的用户具有%All角色,则CheckPrivilege()返回1,即使指定的表或视图不存在。...在SQL中,对于任何引用表数据的SELECT,都需要一个带有有效表引用的FROM子句。 对于不访问表数据的SELECT, FROM子句是可选的。

    5.3K10

    适合用于面试的一些redis基础知识的总结

    RDB与AOF持久化 过期键淘汰处理 功能之发布与订阅-subscribe redis事务的实现 redis基础 redis是一个开源的,内存中的数据结构存储系统,它可以用作数据库,缓存和消息中间件...AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾.Redis还能对AOF文件进行后台重写,使得AOF...如果你只希望你的数据在服务器运行的时候存在,你也可以不使用任何持久化方式....特点:redis事务不支持回滚,即使事务队列中的命令是执行错误的,也会执行下去,直到事务队列中的命令一直执行完。...一致性: WATCH 带有WATCH命令的事务会将客户端和被监视的键在数据库的watched_keys字典中进行关联, watched_keys

    43110

    《redis 设计与实现》--总结

    2.单机数据库的实现 数据库 Redis服务器讲所有数据库保存在一个db数组中,默认创建16个数据库。 切换数据库:select 0 #选择0号数据库 数据库键空间 键空间的键也是数据库的键。...一个带有过期字典的数据库例子:(实际中,键空间的键和过期字典中的键都指向同一个键对象) ?...AOF重写:已过期的键不会被保存到重写的AOF文件。 复制: 主服务器删除一个过期键,会显示向所有的从服务器发送DEL命令,告知删除。 从服务器遇到过期的键也不会删除。...只有接收到DEL命令后才会删除过期键。 RDB持久化 通过保存数据库中的键值对来记录数据库状态不同。 功能:将Redis在内存中的数据库状态保存到磁盘中,避免数据意外丢失。...对日志的写入操作采用的是append模式,写入过程即使出现宕机,也不会破坏日志文件中已经存在的内容。如果日志过大,Redis可以自动启用rewrite机制。

    1.2K40

    《redis 设计与实现》--总结

    2.单机数据库的实现 数据库 Redis服务器讲所有数据库保存在一个db数组中,默认创建16个数据库。 切换数据库:select 0 #选择0号数据库 数据库键空间 键空间的键也是数据库的键。...一个带有过期字典的数据库例子:(实际中,键空间的键和过期字典中的键都指向同一个键对象) 键。 ### RDB持久化 通过保存数据库中的键值对来记录数据库状态不同。 功能:将Redis在内存中的数据库状态保存到磁盘中,避免数据意外丢失。...RDB文件是一个经过压缩的二进制文件,保存在硬盘中,因此Redis进程退出,只要RDB文件仍在,就可以用来还原数据库的状态。...对日志的写入操作采用的是append模式,写入过程即使出现宕机,也不会破坏日志文件中已经存在的内容。如果日志过大,Redis可以自动启用rewrite机制。

    81021

    面试官最喜欢问的Redis知识

    回顾总结:字典被广泛用于实现redis的各种功能,其中包括数据库和哈希键。 a、Redis中的字典使用哈希表作为底层实现,每个字典带有两个哈希表,一个平时使用,一个仅在进行rehash时使用。...04 — Redis持久化 Redis是一个内存数据库,它将自己的数据库状态存储在内存里面,所以如果不想办法将储存在内存中的数据库状态保存到磁盘里面,那么一旦服务器进程退出,服务器中的数据库状态也会消失不见...4.1 RDB持久化 RDB文件是保存在磁盘里面的,所以即使Redis服务器进程退出,甚至运行Redis服务器的计算机停机,但只要RDB文件仍然存在,Redis服务器就可以用它来还原数据库状态。...命令追加:当AOF持久化功能处于打开状态时,服务器在执行完一个写命令后,会以协议格式将被执行的写命令追加到服务器状态的aof_buf缓冲区的末尾: 重点内容: AOF文件通过保存所有修改数据库的写命令请求来记录服务器的数据库状态...服务器的性能有很大影响 服务器只要载入并重新执行保存在AOF文件中的命令,就可以还原数据库本来的状态 AOF重写可以产生一个新的AOF文件,这个新的AOF文件和原有的AOF文件所保存的数据库状态一样,但体积更小

    35420

    从零开始学PostgreSQL (十四):高级功能

    在一些基础的数据库系统中,实现这一点(如果有的话)通常需要先检查 cities 表是否存在相匹配的记录,然后根据检查结果决定是否插入或拒绝新的 weather 记录。...外键使用案例:通过将 weather 表中的 city 字段定义为参照 cities 表中 name 字段的外键,可以自动阻止向 weather 表中插入不存在于 cities 表中的城市名称。...行为调整:外键的行为可以依据具体需求进行调整,例如在删除或更新主表中的记录时对外键表的影响策略。...事务具有原子性:从其他事务的角度来看,它要么完全发生,要么根本不发生。 我们还需要一个保证,即一旦事务被数据库系统确认完成,它确实已经被永久记录下来,即使随后发生崩溃也不会丢失。...事务在定义保存点和回滚到保存点之间所做的所有数据库更改都将被取消,但早于保存点的更改会被保留。 回滚到保存点后,该保存点仍然存在,因此你可以多次回滚到它。

    15410

    Redis缓存基础

    数据存储在内存中,访问速度快; 数据类型丰富:⽀持字符串、列表、集合、有序集合、哈希表等数据类型; 操作原⼦性:Redis的所有操作都是原⼦性的,同时也⽀持事务; 可持久化:可以将内存中的数据保存到硬盘中...在列表的左边向指定的键中添加列表元素,如果该键并不存在,Redis将为该键创建⼀个新的链表,如果这个键已经存在,则是向list添加元素。 rpush key value1 value2......这之后在缓存失效的这段时间内,该缓存⼀直是错误的脏数据。 先更新数据库,再删除缓存 此时更新数据库成功了,⽽删除缓存失败了,那么数据库中就会是新数据,⽽缓存中是旧数据,数据就出现了不⼀致情况。...发⽣语法错误也能保证事务的原⼦性:语法错误指的是在 Redis 通过 MULTI 命令开启事务之后,提交到队列中的命令存在语法错误,那么 Redis 会⽴⻢返回错误并放弃事务的执⾏,即使在之前有语法正确的命令...发⽣运⾏错误⽆法保证事务的原⼦性:各个命令都加⼊到队列中等待执⾏,当 Redis 通过 EXEC 命令提交事务时,执⾏到错误命令时就会报错,此时由于前⾯正确的命令已经执⾏了,⽆法放弃,所以就出现⼀个事务中正确的命令正常执

    12710

    还不知道怎么实现分布式服务接口的幂等性?

    比如支付之前记录一条这个订单的支付流水 每次接收请求判断之前是否处理过 若有一个订单已支付,就已经有了一条支付流水,那么如果重复发送这个请求,则此时先插入支付流水,orderId已存在,唯一键约束生效,...该订单号其实就是订单表的主键,如此一来,重复请求中带的都是同一订单号。订单服务在订单表中插入数据的时候,执行的这些重复INSERT语句中的主键,也都是同一个订单号。...保存一个是否处理过的标识也可以,服务的不同实例可以一起操作Redis。 幂等创建订单的时序图 ? 如果因为重复订单导致插入订单表失败,订单服务不要把这个错误返回给前端页面....这时候即使重试的666请求再来,因为它和上一条666请求带着相同的版本号,上一条请求更新成功后,这个版本号已经变了,所以重试请求的更新必然失败 无论哪种情况,数据库中的数据与页面上给用户的反馈都是一致的...实现订单幂等的方法,完全可以套用在其他需要实现幂等的服务中,只需要这个服务操作的数据保存在数据库中,并且有一张带有主键的数据表即可 参考 后端存储实战

    50720

    Redis 设计与实现: redisObject 数据结构,以及 Redis 的数据类型

    redisObject 数据结构,以及 Redis 的数据类型 redisObject 是 Redis 类型系统的核心, 数据库中的每个键、值,以及 Redis 本身处理的参数, 都表示为这种数据类型。...type 记录了对象所保存的值的类型,它的值可能是以下常量的其中一个(定义位于 redis.h): /* * 对象类型 */ #define REDIS_STRING 0 // 字符串 #define...,那么这个对象就是一个 Redis 哈希表,它的值保存在一个 zipmap 里,而 ptr 指针就指向这个 zipmap ;诸如此类。...当执行一个处理数据类型的命令时, Redis 执行以下步骤: 根据给定 key ,在数据库字典中查找和它相对应的 redisObject ,如果没找到,就返回 NULL 。...作为例子,下图展示了三个列表,它们都带有指向共享对象数组中某个值对象的指针: ?

    2.3K20

    Redis系列——5.持久化

    开发redis的人也不傻,他们写了一个持久化的方案,将内存中的数据写入到硬盘中,这样数据丢不了。 什么是持久化? redis持久化就是对数据的更新保存在磁盘上,以便数据恢复。...持久化的实现方式 1.快照(RDB) a 简介 对数据在某时某点的完整备份。 将数据完整的生成一个快照,以二进制格式保存在硬盘中,后缀为.rdb。当需要进行恢复时,再从硬盘加载到内存中。...2.写日志(AOF) a 简介 所有数据更新语句都记录在日志中。 b 三种触发条件 always:让缓冲区的数据及时刷新到硬盘。...db.number) # 遍历所有键 for key in db: # 如果键带有过期时间,并且已经过期,那么跳过这个键 if key.have_expire_time() and key.is_expired...所以redis添加了AOF重写缓存的概念,在重写期间,redis在执行新的命令之后,将命令添加到原来的AOF文件中,同时也将命令添加到AOF重写缓存中,这样在完成重写工作后,再将AOF重写缓存中的命令添加到新的

    36020

    Redis底层原理--03. Redis 数据类型

    对象处理机制 由于 redis 需要对每一个 key 产生不同的操作,所以Redis 必须让每个键都带有类型信息,使得程序可以检查键的类型,并为它选择合适的处理方式 为了解决以上问题, Redis 构建了自己的类型系统...,那么这个对象就是一个 Redis 哈希表,它的值保存在一个 zipmap 里,而 ptr 指针就指向这个 zipmap ....将客户端的信息记录到 server.db[i]->blocking_keys 中(其中 i 为客户端所使用的数据库号码)。...key 属性指向造成阻塞的键,而 db 则指向该键所在的数据库。...试图往集合里添加一个新元素,并且这个元素不能被表示为 long long 类型(也即是,它不是一个整数) 字典编码 当使用 REDIS_ENCODING_HT 编码时,集合将元素保存到字典的键里面

    58530

    Kafka 基础概念及架构

    Kafka集群中按照主题分类管理,⼀个主题可以有多个分区,⼀个分区可以有多个副本分区。 每个记录由⼀个键,⼀个值和⼀个时间戳组成。...:Kafka经常被⽤来记录Web⽤户或者App⽤户的各种活动,如浏览⽹⻚、搜索、点击等活动,这些活动信息被各个服务器发布到Kafka的Topic中,然后消费者通过订阅这些Topic来做实时的监控分析,亦可保存到数据库...四、Kafka 基本架构 消息和批次 消息: Kafka 的数据单元称为消息。消息可以看做数据库表的一条“行记录”,消息由字节数组组成。 消息有键,键也是一个字节数组。...,在创建消息时,Kafka 会把它添加到消息⾥ 在给定的分区⾥,每个消息的偏移量都是唯⼀的 消费者把每个分区最后读取的消息偏移量保存在Zookeeper 或Kafka(现在是存在Kafka上的) 上,如果消费者关闭或重启...副本被保存在broker 上,每个broker 可以保存成百上千个属于不同主题和分区的副本 副本有两种类型: ⾸领副本:每个分区都有⼀个⾸领副本。

    88310
    领券