-
2021-12-08 15:10:46
redis的数据更新尝尝涉及到和数据库的数据一致性的问题的。最有效的redis数据库一致性的操作方式是如下的:
强调一点,redis不要直接做数据更新方案,存在问题的。redis不要直接对缓存数据执行更新操作。
1.先更新数据库;
2.删除缓存;
3.当再次查询的时候,查询缓存重建缓存就可以了;
上面还是存在一个缓存脏数据的问题的。可以使用乐观锁的方式来解决问题的。
下面是解决问题的整个的流程的:
上面的操作还存在一个问题的:
1.当更新数据库成功了,但是删除缓存数据失效了。这个时候可以使用kafka的方式来补偿删除redis的数据的。
这种情况下是这样的流程图的,可以采用定于mysql的binlog的方式来实现补偿消费订阅的。当时还是存在一个问题的。在补偿消费消费的期间,读取的缓存的数据还是脏数据的。
但是这样的话更多相关内容 -
SQL的数据更新操作(增、删、改)
2020-04-08 17:46:05数据更新 增(数据的增加) 语法: INSERT INTO 表名称 [(字段1,字段2,字段3,...)] VALUES(值1,值2,值3,...) 注意: 如果需要进行增加数据的话,则以下的几种数据类型要分别处理: 增加数字:直接编写数字,...前言:
关于查询操作(概念+习题)请看以下两篇文章
目录
数据更新
增(数据的增加)
语法:
INSERT INTO 表名称 [(字段1,字段2,字段3,...)] VALUES(值1,值2,值3,...)
注意:
如果需要进行增加数据的话,则以下的几种数据类型要分别处理:
增加数字:直接编写数字,如:123;
增加字符串:字符串应该使用‘声明;
增加DATE数据:
第一种:可以按照已有的字符串的格式编写字符串,如:‘20-6月-06’;
第二种:利用TO_DATE函数将字符串变为DATE型数据;
第三种:如果设置的时间为当前系统时间,则使用SYSDATE;
演示:
添加雇佣员工的数据信息
完整添加数据字段,需填写每个列的字段
语句:
SQL>insert into myemp (empno,ename,hiredate,sal,comm,job) values(7777,'Eichi',TO_DATE('1998-09-12','yyyy-mm-dd'),15000, 700,8888,'BOSS');
结果:
语句:
SQL>insert into myemp (empno,ename,hiredate,sal,comm, job ) values (8888,'yichen',SYSDATE,3000,7777,'KING');
结果:
简便添加数据的话,需要按照表的列的原始顺序来进行添加
SQL>insert into myemp values (9999,'heisenberg','BOSS2',9999,sysdate,10000,null,30);
改(数据的修改)
语法:
UPDATE 表名称 SET 更新字段1=更新值1,更新字段2=更新值2,...[WHERE 更新条件(s)];
举例+演示:
- 更新员工编号为7369的员工的工资为5000,奖金为2000,职位升级为'MANAGER',职位更新时间为当前时间
SQL> update myemp set sal=2000,job='MANAGER',hiredate=sysdate where empno=7369;
- 所有员工的工资统一改为20000
SQL> update myemp set sal=20000;
不添加限定条件,即就是对所有的数据项进行修改
删(数据的删除)
语法:
DELETE FROM 表名称 [WHERE 删除条件(s)];
举例+演示:
- 删除1987年入职的员工的信息
SQL> delete from myemp where TO_CHAR(hiredate,'yyyy')=1987;
注意:如果删除的时候没有相应匹配条件的时候,则更新记录为0,更新操作也一样。
可见,1987年入职的员工的信息被删除了
不加限制条件则根更新操作相同,即对表的全部数据项进行操作,
删除myemp表
SQL> delete from myemp;
事务处理
事务的回滚:
ROLLBACK,更新操作回到原点
演示:
回滚刚才删除的表,可见,删除的表就这么恢复了
事务的提交:
COMMIT,真正的发出更新请求,一旦提交后无法回滚
死锁:
此时新开一个会话,如果会话1对7369数据项进行修改sal为2000,那么在没有提交前,只有会话1可以对这个数据继续进行修改,其他会话将不能修改这个数据
一旦提交,其他会话才能进行操作
数据伪列
ROWNUM
概述:OWNUM为每一个显示的记录都会自动的随着查询生成的行号。
注意:该行号不是永久的,会随着查询的显示变化而变化
举例+演示:
- 查询emp表的部门是30的rownum,empno,ename,job,hiredate和sal
SQL>select rownum,empno,ename,job,hiredate,sal from emp where deptno=30;
- 查询前五条记录
SQL>select rownum,empno,ename,job,hiredate,sal from emp where rownum<=5;
- 查询6-10行记录
思路:利用子查询
SQL>select * from (select rownum rn,empno,ename,job,hiredate,sal from emp where rownum<=10) temp where temp.rn>5;
ROWID
概述:每一条记录的ROWID都不会重复,所以即使所有列的内容重复,ROWID也不会重复.
格式为:AAAL+XAAEAAAAANAAA
数据对象号:AAAL+X
相对文件号:AAE
数据块号: AAAAAN
数据行号: AAA
老规矩文末有彩蛋~
-
MongoDB 数据更新操作
2019-03-11 20:14:46各种更新操作符 "$set" "$set" 与 "." 操作 "$unset" "$inc" "$rename" "$pop" "$push" "$addToSet" $pull ...目录
MongoDB 更新文档
MongoDB 使用 update() 和 save() 方法来更新集合中的文档。
update() 方法
update() 方法用于更新已存在的文档。语法格式如下:
db.collection.update( <query>, <update>, { upsert: <boolean>, multi: <boolean>, writeConcern: <document> } )
参数说明:
- query : update的查询条件,类似sql update查询内where后面的。
- update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
- upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
- multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
- writeConcern :可选,抛出异常的级别。
官方连接连接地址:https://docs.mongodb.com/manual/reference/update-methods/
实例
我们先向数据库插入点数据(集合名称为 products):
{ _id: 100, sku: "abc123", quantity: 250, instock: true, reorder: false, details: { model: "14Q2", make: "xyz" }, tags: [ "apparel", "clothing" ], ratings: [ { by: "ijk", rating: 4 } ] }
查询截图:
各种更新操作符
"$set"
"$set" 用来指定一个键的值。如果这个键不存在,则创建它。
示例:更新 quantity 字段、更新 details 的内容以及更新 tags 的值。
db.products.update( { _id: 100 }, { $set: { quantity: 500, details: { model: "14Q3", make: "xyz" }, tags: [ "coats", "outerwear", "clothing" ] } } )
查询结果(可以看到对应的值已经被修改):
"$set" 与 "." 操作
示例:使用 "." 符号更新数据内容
db.products.update( { _id: 100 }, { $set: { "details.make": "zzz" } } )
同样可以使用 "." 符号操作数组内容
db.products.update( { _id: 100 }, { $set: { "tags.1": "rain gear", "ratings.0.rating": 2 } } )
示例:创建不存在的 key 值
db.products.update( { _id: 100 }, { $set: { "name": "not the name" } } );
"$unset"
从文档中移除指定的键。若要完全删除键 “name” ,使用 “$unset” 即可:
db.products.update( { _id: 100 }, { $unset: { "name": 1 } } );
"$inc"
"$inc" 修改器用来增加已有键的值,或者在键不存在时创建一个键。inc就是专门来增加(和减少)数字的。
"$inc"只能用于整数、长整数或双精度浮点数。要是用在其他类型的数据上就会导致操作失败。
"$inc" 可以接收正数或者负数的值。
示例:将 "quantity" 值减少 1
db.products.update( { _id: 100 }, { $inc : { "quantity": -1 } } );
"$rename"
$rename 操作符可以重命名字段名称,新的字段名称不能和文档中现有的字段名相同。
// 语法: { $rename: { <old name1>: <new name1>, <old name2>: <new name2>, ... } }
示例:修改 "sku" 为 "skuName"
db.products.update( { _id: 100 }, { $rename : { "sku": "skuName" } } );
"$pop"
只能用于对 数组(array)进行操作。用于移除数组第一个元素,或者用于移除数组的最后一个元素。
// 语法 -1 表示移除数组第一个元素, 1 表示移除数组最后一个元素 { $pop: { <field>: <-1 | 1>, ... } }
首先插入数据(集合名称:students):
// 插入数据 { _id: 1, scores: [ 8, 9, 10 ] }
示例:移除第一个元素
db.students.update( { _id: 1 }, { $pop: { scores: -1 } } ) // 查询返回 { _id: 1, scores: [ 9, 10 ] }
示例:移除最后一个元素
db.students.update( { _id: 1 }, { $pop: { scores: 1 } } ) // 查询返回 { _id: 1, scores: [ 9 ] }
"$push"
如果指定的键已经存在,会向已有的数组末尾加入一个元素,要是没有就会创建一个新的数组。
// 插入数据 { "_id" : 100.0, "details" : { "model" : "14Q3", "make" : "zzz" }, "tags" : [ "coats", "outerwear", "clothing" ], "sku" : "abc123" }
示例: 向 tags 中增加一个元素
db.products.update( { _id: 100}, { $push: {tags: "push"} } ); // 返回结果 {..."tags" : [ "coats", "outerwear", "clothing", "push"], ...}
示例:添加一个不存在的 key “name”
db.getCollection('products').update( {_id : 100}, {$push: { name : "sku" } } );
可以看到,push 只能对数组进行操作。
"$addToSet"
向集合数据中添加数组内容,如果数据存在就做追加操作,如果数据不存在就做新增 key 与内容操作。
// 语法 {"$addToSet" : {成员: 内容} }
示例:向数据中的 name 字段追加内容(紧接着前面"$push"操作的数据来)
db.getCollection('products').update( {_id : 100}, { $addToSet : { name : "Name" } } );
示例:追加一个不存在的 key item (此时的操作和 $push 类似)
db.getCollection('products').update( {_id : 100}, { $addToSet : { item : "Name" } } );
$pull
// 语法 { $pull: { <field1>: <value|condition>, <field2>: <value|condition>, ... } }
pull操作符移除指定字段值为数组,且匹配pull操作符移除指定字段值为数组,且匹配pull语句声明的查询条件的所有元素。
示例:移除 tags 中的 “push” 与 coats 值
db.products.update( { _id : 100 }, { $pull: { tags: { $in: [ "push", "coats" ] } } } )
示例:移除 name 中的 “Name”
db.products.update( { _id : 100 }, { $pull: { name : "Name" } } )
findAndModify()
另外简单介绍下这个操作:
// 语法如下 db.collection.findAndModify({ query: <document>, sort: <document>, remove: <boolean>, update: <document>, new: <boolean>, fields: <document>, upsert: <boolean>, bypassDocumentValidation: <boolean>, writeConcern: <document>, collation: <document>, arrayFilters: [ <filterdocument1>, ... ] });
如果我们想对 某个数据进行全部修改,就可以使用 findAndModify() 方法:
db.products.findAndModify({ query: { _id: 100}, update: { "details" : { "model" : "14Q3", "make" : "zzz" }, "tags" : [ "coats", "outerwear", "clothing", "push" ], "sku" : "abc123" } });
附:
官网链接:https://docs.mongodb.com/manual/reference/operator/update/
-
未定义数组索引: id | ThinkPHP5 数据更新操作出错
2019-09-22 22:32:23报错的原因大概率就是因为数据更新操作不当,从而导致了报错。具体原因,目前我还没想清楚,明白了再过来更新。 总结来就是,当发现自己的程序有错误的时候,就应该立刻解决已知的错误,因为你不知道是否这个已知...
错误提示如上,data
打印出来如下:
很显然,表单传过来的数据中是有id
的,所以获取不到id
实在是匪夷所思;而这条数据是我用来更新数据表中的数据的,因为之前出现过图中的
/index/grade/doedit_html
这种无厘头的数据在数组中,所以我就对其进行了删除(array_shift($data);
),从而完成更新操作(因为若是数组中含有数据表中没有的字段信息,更新操作是无法完成的)。后来在开发过程中,先出现了这个问题,我也就没想那么多,准备先把
未定义的数组索引
这个bug解决后再修改这个数据更新的问题,实在看不出错在哪,最后改了数据更新问题后发现未定义的数组索引
也就没了。所以这个
未定义数组索引
报错的原因大概率就是因为数据更新操作不当,从而导致了报错。具体原因,目前我还没想清楚,明白了再过来更新。总结来就是,当发现自己的程序有错误的时候,就应该立刻解决已知的错误,因为你不知道是否这个已知的错误会带来另一个你未知的错误。
-
hive中数据更新以及实现
2020-03-12 13:30:04hive暂时没有实现更新操作的,所以要更新数据就要通过自己手动进行更新。 拿业务数据来说,使用sqoop脚本是可以直接把全量数据抽取到hive中,sqoop也有两种增量抽取数据的方法,一种是基于自增列,一种是基于时间列... -
SQL Server 2012 更新数据(添加数据、修改数据、删除数据)
2019-04-28 16:53:48展开“数据库”,打开相应的数据库,然后再展开“表”,,右击需要操作的数据表,选择“编辑前200行”,进入表数据编辑面板,就可以对表中的数据进行添加、修改和删除操作了。 需要说明的是,如果对数据... -
关于React中数据的更新操作
2018-11-12 21:19:51关于数据更新操作,如果首次接触React的话,我们可能会想到给将更新的数据写到定时器中,让数据不断改变,像这样做: function tick() { const element = ( <div> <h1>Hello, world... -
怎么更新Mysql数据表视图中数据
2021-01-19 02:40:15本篇文章主要给大家介绍mysql数据表中视图中数据的更新操作。相关mysql视频教程推荐:《mysql教程》mysql数据表视图的定义及相关操作,如查询、修改、删除、添加等操作介绍,在我们近期发布的文章中,已经给大家详细... -
MySQL - 数据表操作_更新表中的数据记录
2020-07-10 17:56:22更新数据记录是数据操作中常见的操作,可以更新表中已经存在数据记录中的值。在MySQL中可以通过UPDATE语句来实现更新数据记录,该SQL语句可以通过如下几种方式使用:更新特定数据记录、更新所有数据记录、更新JSON... -
MySQL基本操作三:数据的插入、更新、删除
2018-08-17 22:14:03介绍MySQL中数据的插入,更新,删除操作前,我先建一个表。方便后面举例子。这是一个学生信息表: CREATE TABLE tab_student( Name CHAR(20), StuID VARCHAR(20), Rank INT ); 建好以后,长成这样: 1. ... -
SQL语句,数据更新,数据插入删除修改和对视图的更新操作
2015-12-27 11:13:48--插入一个新学生元组 INSERT INTO S(SNO,ANAME,SEX,SDEPT,AGE) VALUES('200915128','陈冬','M',18,'CS'); --插入张成民的信息到s表中 INSERT INTO S VALUES('200915126','张成民','M',18,'CS');... -
python操作之更新数据库中某个字段的数据
2020-11-17 20:02:24请注意这是连接数据库操作,还不是更新。 import pymysql #导包 #连接数据库 db = pymysql.connect(host='localhost', user='用户名', password='数据库密码', port=3306, db='你的数据库名字') #定义游标 cursor = ... -
数据的操作
2021-11-17 22:47:46在MySQL软件中关于数据的操作,包含插入数据记录操作(CREATE )、查询数据记录(SELECT)、更新数据记录操作(UPDATE )和刪除数据记录操作(DELETE)。 在MySQL软件中,可以通过SQL语句中的DML语句来实现数据的操作,... -
数据库操作:更新数据update
2020-03-01 15:18:38为了更新(修改)表中数据,可以使用UPDATE语句。 可采用两种方式:更新表中特定行;更新表中所有行。 UPDATE语句由三部分组成:要更新的表;列名和它们的新值;要更新行的过滤条件。 UPDATE user SET name='AA'... -
Java - 使用JDBC操作数据库时,如何提升读取数据的性能?如何提升更新数据的性能?
2019-03-16 12:04:43分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!...要提升更新数据的性能可以使用PreparedStatement语句构建批处理,将若干SQL语句置于一个批处理... -
MongoDB详解--使用Java对MongoDB中存在的数据进行更新不存在的数据进行插入的操作
2019-03-07 15:39:47今天有个需求,就是把收到的数据实时进行更新到mongodb(之前一直都是插入操作),而Mongodb中也...那么如何使用Java进行这种更新操作呢。下面直接上代码。 连接mongo集群工具类: public class MongoUtils { p... -
jpa更新操作,数据库更新了,但是查询的还是旧的数据
2019-03-12 18:32:43jpa进行update的操作后,更新了数据库,但是一级缓存没有更新,所以紧接着查询出来的是缓存中的旧数据,此时只要在对应的 update方法上加入@Modifying(clearAutomatically = true)即可,它更新完数据库后会主动清理... -
HIVE中数据更新(update)操作的实现
2015-12-30 09:19:34数据更新是一种常见的操作,然后数据仓库的概念一般要求的是数据是集成、稳定的。HIVE作为一种分布式环境下以HDFS为支撑的数据仓库,它同样更多的要求数据是不可变的。 然而现实很多任务中,往往需要对数据进行... -
Elasticsearch操作数据后马上更新的办法
2018-05-16 13:34:32我们经常有这样的需求,在对 Elasticsearch 数据进行操作的时候,要及时返回刚刚操作完毕的数据,或者数据列表。 比如加入存储一条数据后,我马上要返回数据的总条数,这个时候,会出问题,Elasticsearch会返回操作... -
SQL高级操作之二——更新数据(带条件并限制个数的更新)
2018-09-02 14:43:191、 在更新数据的时候,特别要注意:通常一定是跟随条件更新 Update 表名 set 字段名 = 新值 where 判断条件; 2、 如果没有条件,是全表更新数据。但是可以使用limit 来限制更新的数量; Update 表名 set 字段名 ... -
DataGrip 客户端工具修改更新数据操作
2019-09-28 21:03:09双击选中(可选中多列,批量更新)要修改的数据字段 --> 编辑-->提交: -
kettle 如何同步完成数据之后,再执行时间更新操作
2019-03-15 11:25:06现将表中的数据全部同步到目标表,然后再将全部数据的最新时间,更新到时间同步配置表中。 操作步骤如下: 1)主作业主要转换(获取最后更新时间、增量同步记录数据并更新同步时间到配置表) 2)同步数据并更新... -
SQL 数据更新语句
2019-07-24 09:42:13一、实验目的及要求 1. 加深对SQL数据更新(插入、修改及删除)语句的基本语法格式的掌握 ... 加深对约束条件在数据更新操作执行中的作用问题的了解 二、实验环境 Microsoft SQL Server 2008 ... -
Vue数据更新视图不更新的几种解决方案
2019-10-16 20:56:22在一个组件实例中,只有在data里初始化的数据才是响应的,Vue不能检测到对象属性的添加或删除,...数组数据变动,使用某些方法操作数组,变动数据时,有些方法无法被vue监测 push(),pop(),shift(),unshift(),... -
数据库的更新操作
2017-06-05 21:32:33DML操作语法之中,除了查询之外还有数据库的更新操作,数据的更新操作主要包括:增加,修改,删除数据 首先将emp表复制一份:CREATE TABLE myemp AS SELECT * FROM emp;如果想进行增加数据的话,则以下的几种数据... -
kettle执行更新/插入操作后没有数据的问题
2020-02-28 14:05:42今天遇见了kettle执行"更新/插入"操作过程非常顺利,没有任何异常,但是目标库中取不到数据问题 试了好多种方法均无效果 设置"插入/更新"组件中的update选项为N 未取到数据 设置"插入/更新"不执行任何更新勾选 未取... -
Influxdb的更新操作
2020-09-28 10:35:27查看官网得知InfluxDB 虽然提供了和SQL 类似的数据库语句,但是对于更新数据和删除数据是不支持的。这里说的不支持是SQL 不支持。 如下数据:记录某个坐标点的温度值,现在我想修改36分那个时间点的温度值为22°。... -
sql update操作数据更新成功,返回的影响行数是0
2019-03-08 15:17:43以前使用sql server, mysql时候,本能以为update操作返回的行数能判断对记录的操作结果,除了数据库异常,一般确实能反应操作的真实情况,但是,为何却出现update数据更新成功,反而返回影响行数为0的情况呢?... -
vue中数据改变,视图不更新的原因以及解决方法(强制更新视图)
2021-03-15 11:04:45我们在开发过程中会碰到数据更新,但是视图并未改变的情况,情况如下: 1.数组数据改变时,使用某些方法操作数组,数据变了,但是视图并没改变。(页面没有监测到数据改变) 解决办法: 使用下面这些方法操作数组,... -
高并发下如何对数据库进行更新操作
2019-08-05 09:28:47方案详情:加锁查询拦截,在更新前,加锁(分布式系统用分布式锁、也可用数据库锁等),查询需要更新的数据是否存在且未被 更新,根据查询结果做更新操作,更新后释放锁; 适用情况:对数据需要进行多...