精华内容
下载资源
问答
  • replaceupdate 区分本文主要对比一下 Sqlite 中的 replace 语句和 update 语句 。在本例中使用如下数据库表:图1该表的表名为student, 存储学生信息。 所有字段的数据类型都是TEXT 。 其中id和name作为复合...

    转replace 与 update 区分

    本文主要对比一下 Sqlite 中的 replace 语句和 update 语句 。

    在本例中使用如下数据库表:

    format,png

    图1

    该表的表名为student, 存储学生信息。 所有字段的数据类型都是TEXT 。 其中id和name作为复合主键。 email字段加上了唯一约束。建表语句如下:

    CREATE TABLE IF NOT EXISTS student (

    "id" TEXT,

    "name" TEXT NOT NULL,

    "sex" TEXT,

    "email" TEXT UNIQUE,

    "fenshu" TEXT CHECK(fenshu > 0),

    "tecid" TEXT REFERENCES teacher(id),

    "class" TEXT,

    PRIMARY KEY(id, name)

    )

    1. replace语句会删除原有的一条记录, 并且插入一条新的记录来替换原记录。

    为了验证这个结论, 下面打开Sqlite命令行, 执行以下语句来替换id为2的记录。

    sqlite> replace into student (id, name, sex, email, fenshu, tecid, class) values ('2', 'lisi', '*F', '123456@qq.com', '80', '2', '1');

    执行完这条语句之后, student表中的数据变成下图所示:

    format,png

    图2

    对比图1和图2 , 可以发现: 在图1中, id为2 的记录是表中的第一条记录, 当执行完上述的replace语句之后, id为2的记录位于整张表的最后。 这就说明, 这条replace语句删除了原有的id为2的记录, 有插入了一条新的id为2的记录。

    2. 一般用replace语句替换一条记录的所有列, 如果在replace语句中没有指定某列, 在replace之后这列的值被置空 。

    下面我们还是以id为2 的记录做实验, 执行如下语句:

    sqlite> replace into student (id, name, sex, email, fenshu, tecid) values ('2','lisi', '*F', '123456@qq.com', '80', '2');

    该语句还是替换id为2, name为lisi的记录, 只是在指定列的时候, 没有指定class列。 在执行完成之后, 表中的数据如下:

    format,png

    图3

    对比图2和图3 , 可以看到, id为2, name为lisi的记录的class字段没有值。

    3. replace根据主键确定被替换的是哪一条记录

    在该表中, 把id和name指定为复合主键。 在上面两条语句执行的时候, 都在values中指定了id为2, name为lisi 。 执行之后看到的结果也是id为2, name为lisi的记录被替换。 这就说明了replace语句根据主键的值确定被替换的是哪一条记录。

    4 replace语句不能根据where子句来定位要被替换的记录

    执行以下语句:

    sqlite> replace into student (id, name, sex, email, fenshu, tecid) values ('2','lisi', '*F', '123456@qq.com', '80', '2') where id = '2';

    会报如下错误:

    Error: near "where": syntax error

    5. 如果执行replace语句时, 不存在要替换的记录, 那么就会插入一条新的记录。

    在student表中, 我们让id和name成为复合主键。 下面我们使用replace语句替换id为100, name为a 的记录。 从图3中可以看到, 表中存在name为a的记录, 但是这条记录的id为7, 而不是100 。也就是说 id为100, name为a 的记录不存在。

    执行如下语句:

    sqlite> replace into student (id, name, sex, email, fenshu, tecid, class) values ('100', 'a', '*F', '123456@qq.com', '80', '2', '1');

    执行完成之后, 表中的数据如下:

    format,png

    图4

    可以看到, 在表中插入了一条新的记录。

    6. 如果新插入的或替换的记录中, 有字段和表中的其他记录冲突, 那么会删除那条其他记录。

    上面的第5步同时也说明了这个问题。 对比图4 和图5 , 发现在插入一条新的id为100, name为a的记录之后, 还删除了id为2, name为lisi的记录。 为什么会这样呢? 我们在开始的时候说过, 表中的email字段加上了唯一约束。 id为2的记录的email和新插入的id为100的记录中的email相同, 都是123456@qq.com 。 这就导致违反唯一约束, 所以在插入id为100的记录之前, 删除了id为2的记录。

    下面再次验证一下。 现在我们替换id为5, name为lisi3 的记录, 将它的email替换为2@163.com 。 表中的id为5的记录的email字段也是2@163.com , 所以会导致违反唯一约束。

    执行下面的语句:

    sqlite> replace into student (id, name, sex, email, fenshu, tecid, class) values ('5', 'lisi3', 'F', '2@163.com', '80', '2', '1');

    执行完这条语句之后, 表中的数据如下图:

    format,png

    图5

    对比图4 和 图5 , 发现id为5的记录被替换掉, 并且把这条记录的email设置为2@163.com, 这和图4中原有的id为6的记录冲突, 所以导致id为6的记录被删除, 在图5 中已经没有id为6的那条记录了。

    replace语句和update语句的对比

    update语句使用where子句定位被更新的记录;

    update语句可以一次更新一条记录, 也可以更新多条记录, 只要这多条记录都复合where子句的要求;

    update只会在原记录上更新字段的值, 不会删除原有记录, 然后再插入新纪录;

    如果在update语句中没有指定一些字段, 那么这些字段维持原有的值, 而不会被置空;

    展开全文
  • <div><p>Hi , ...<p>I like to avoid <code>update_attribute</code> (singular) although, in this case it doesn't make a difference.</p><p>该提问来源于开源项目:ManageIQ/manageiq</p></div>
  • Replace calls with update - https://github.com/rails/rails/pull/31998</p> <pre><code>DEPRECATION WARNING: update_attributes is deprecated and will be removed from Rails 6.1</code></pre>该提问来源于...
  • <div><p>Replace the current batch and bash update scripts on OSX and Windows with a Golang process to handle the tasks. This should help improve the issues some users experiencing usually concerning ...
  • INERT REPLACE UPDATE区别

    2016-05-12 13:28:26
    insert into表示插入数据,数据库会检查主键,如果出现重复会报错;replace into表示插入替换数据,需求表中有PrimaryKey,或者unique...REPLACE也可以使用SET语句,替换update,UPDATE在没有匹配记录时什么都不做,而...

    insert into表示插入数据,数据库会检查主键,如果出现重复会报错;
    replace into表示插入替换数据,需求表中有PrimaryKey,或者unique索引,如果数据库已经存在数据,则用新数据替换,如果没有数据效果则和insert into一样

    REPLACE也可以使用SET语句,替换update,UPDATE在没有匹配记录时什么都不做,而REPLACE在有重复记录时更新,在没有重复记录时插入

    Java代码  收藏代码
    1. REPLACE INTO users SET id = 123, name = ‘赵本山’, age = 50;  

    insert ignore表示,如果表中如果已经存在相同的记录,则忽略当前新数据;
    测试代码如下:

    Sql代码  收藏代码
    1. create table testtb(  
    2. id int not null primary key,  
    3. name varchar(50),  
    4. age int  
    5. );  
    6. insert into testtb(id,name,age)values(1,'bb',13);  
    7. select * from testtb;  
    8. insert ignore into testtb(id,name,age)values(1,'aa',13);  
    9. select * from testtb;  
    10. replace into testtb(id,name,age)values(1,"aa",12);  
    11. select * from testtb;  

    INSERT IGNORE 与INSERT INTO的区别就是INSERT IGNORE会忽略数据库中已经存在 的数据,如果数据库没有数据,就插入新的数据,如果有数据的话就跳过这条数据。这样就可以保留数据库中已经存在数据,达到在间隙中插入数据的目的。

     

    用于INSERT 语句的DELAYED 选项是MySQL 相对于标准SQL 的扩展。如果您的客户端不能等待INSERT 完成,则这个选项是非常有用的。当您使用MySQL 进行日志编写时,这是非常常见的问题。您也可以定期运行SELECT和UPDATE 语句,这些语句花费的时间较长。

    当一个客户端使用INSERT DELAYED 时,会立刻从服务器处得到一个确定。并且行被排入队列,当表没有被其它线程使用时,此行被插入。

    使用INSERT DELAYED 的另一个重要的好处是,来自许多客户端的插入被集中在一起,并被编写入一个块。这比执行许多独立的插入要快很多。

    说明: INSERT DELAYED INTO,是客户端提交数据给MySQL,MySQL返回OK状态给客户端。而这是并不是已经将数据插入表,而是存储在内存里面等待排队。当mysql有空余时,再插入。
      这样的好处是,提高插入的速度,客户端不需要等待太长时间。坏处是,不能返回自动递增的ID,以及系统崩溃时,MySQL还没有来得及插入数据的话,这些数据将会丢失。
    注意,当没有使用表时,INSERT DELAYED 比常规的INSERT 要慢。对于服务器来说,为每个含有延迟行的表操纵一个独立的线程,也是一个额外的系统开销。这意味着只有当您确认您需要时,才应使用INSERT DELAYED 。
    展开全文
  • <div><p>Removes the dependency on update-notifier-common which is no longer available in Debian 8. <p>Fix for #80.</p><p>该提问来源于开源项目:chef-cookbooks/apt</p></div>
  • replace使用场景:遇到存在就更新,不存在就插入 replace将delete和insert结合,形成一个原子操作,避免使用事务 replace使用时表中一定要有唯一索引,否则就和insert效果一样 replace执行后返回所影响的行数,返回...

    insert

    标准的sql语句中,插入数据只有一种形式insert into tablename (列明) values (列值);

    插入多条insert into tablename (列明) values (列值),(列值),(列值);

    mysql中还有另一中插入数据方式,insert into tablename set column1=val1,column2=val2;

    insert into tablrname () value();遇到都是空值的情况,会插入一条数据,值是默认值

    replace

    语句 replace into tablename (列明) values (列值);

    或者 replace into tablename set column1=val1,column2=val2;

    插入多条 replace into tablename (列明) values (列值),(列值),(列值);

    replace使用场景:遇到存在就更新,不存在就插入

    replace将delete和insert结合,形成一个原子操作,避免使用事务

    replace使用时表中一定要有唯一索引,否则就和insert效果一样

    replace执行后返回所影响的行数,返回1表示没有重复记录,等同insert,返回2表示有一条重复的记录,效果是先delete后insert,如果返回值大于2,表示表中有多个唯一索引,

    table 中a,b,c,上字段都是唯一索引有值

    a b c

    1 1 1

    2 2 2

    3 3 3

    执行 replace insert table(a,b,c) values(1,2,3);

    执行后返回4,数据库最后数据

    a b c

    1 2 3

    replace会对比每一个唯一索引的值,只要有重复就会删除替换

    展开全文
  • 有时候需要在表中更换一些字符串为NULL,可以使用下面的句子:...有时候需要进行替换操作UPDATE `tablename`SET `fieldname` = REPLACE(`fieldname`, '需要被替换的字符串', '需要替换的内容')有时候在更新数据...

    有时候需要在表中更换一些字符串为NULL,可以使用下面的句子:

    update tablename set fieldname = "textstring" where fieldname is null;

    有时候需要进行替换操作

    UPDATE `tablename`

    SET `fieldname` = REPLACE(`fieldname`, '需要被替换的字符串', '需要替换的内容')

    有时候在更新数据库,只更新一些字段如timezone,zipcode字段,使用下面的句子:

    这是python进行操作的例子

    db = pymysql.connect(host='127.0.0.1',

    port=3306,

    user='root',

    passwd='root',

    db='datadata')

    cursor = db.cursor()

    insert_sql = """

    INSERT INTO us_areacodeprefix(`id`, `areacodeprefix_id`, `linkname`, `timezone`, `latitude`, `longitude`, `zipcode`) VALUES (%s, %s, %s, %s, %s, %s, %s)

    ON DUPLICATE KEY UPDATE timezone=VALUES(timezone),zipcode=VALUES(zipcode)

    """

    # 执行SQL语句

    cursor.execute(insert_sql, (id, areacodeprefix_id,'',timezone,'','',zipcode))

    # 提交到数据库执行

    db.commit()

    其中id为主键,先读取主键的id,然后再更新。

    更新完毕后,改回原来的状态即可。

    展开全文
  • INSERT REPLACE UPDATE区别

    2011-01-30 15:29:07
    在日常的开发中,经常会遇到如下的场景:查看某条记录是否存在,不存在的话创建一条心记录,存在的话更新某些字段。一般的处理方式如下 $result = mysql_query('select * from xxx... mysql_query('update ...'); }...
  • re talking about <code>oc update</code> which is deprecated: <pre><code>console $ oc update W0430 17:49:23.614487 18313 cmd.go:372] update is DEPRECATED and will be removed in a future version. Use ...
  • sql update replace

    千次阅读 2018-11-16 11:12:09
    SELECT VALUE from table WHERE value ...UPDATE table set value=REPLACE(value,'str1','str2'); SELECT VALUE from te_t_env_property_value WHERE value like "%192.168.5.222%"; UPDATE te_t_env...
  • update中使用replace

    2021-03-01 15:39:41
    在SQL中使用REPLACE更新某表中某个字段的详细内容 ...update 表名 set 字段名=replace(字段名,更新前数据,更新后数据) where ......; update titles_test set emp_no=replace(emp_no,'10001','10005') where id=5;
  • replaceupdate 区分本文主要对比一下 Sqlite 中的 replace 语句和 update 语句 。 在本例中使用如下数据库表: 图1 该表的表名为student, 存储学生信息。 所有字段的数据类型都是TEXT...
  • mysql UPDATEREPLACE

    2019-09-27 03:19:16
    UPDATEREPLACE基本类似,但是它们之间有两点不同。 首先查重,1. 当没有找到匹配记录(不存在重复记录)时: UPDATE什么都不做, REPLACE会做insert动作。2. 当找到匹配记录(存在重复记录)时: UPDATE可以更新...
  • 在标准的SQL中有3个语句,它们是INSERT、UPDATE以及DELETE。在MySQL中又多了一个REPLACE语句,因此,本文以MySQL为背景来讨论如何使有SQL中的更新语句。 一、INSERT和REPLACE     &
  • 2. Replace Uservoice in the code with similar functions that link to the Hylo community 3. Update the README here to point to the Hylo community 4. Update the help box based on Ben's ...
  • "update replace" attribute

    2020-12-01 16:12:16
    update replace" statement to replace an attribute only changes the value and not the enter attribute. Suppose: <pre><code> <continent id="europe"> <name>Europe</name>...
  • replaceupdate的区别是什么

    千次阅读 2016-07-25 10:17:18
    replace 来自于古老的 xBase 语法,update 来自于 SQL 语法。 对于单表来说,除了语法上的区别之外,功能基本相同。 对多表替换来说,replace 需要从表先有索引,然后主表 set relation to 关键字段 ...
  • SQL UPdate Replace语法

    千次阅读 2014-06-11 09:49:07
    UPDATE table_name SET city = replace(city, 'Salt', 'Olympic') WHERE city LIKE 'Salt%';
  • SQL UPDATE REPLACE

    2008-12-19 10:42:00
    REPLACE用第三个表达式替换第一个字符串表达式中出现的所有第二个给定字符串表达式。语法REPLACE ( string_expression1 ,string_expression2 ,string_expression3 )参数string_expression1待搜索的字符串表达式。...
  • SQL update Replace 语法

    2011-11-18 14:12:46
    UPDATE 表名 SET 字段=REPLACE(字段名,'被替换内容','要替换成的内容')例如:use hctv_15; 库use hc_application; 表update hc_application set icon_focus = replace(icon_focus,'192.168.1.2','localhost') where ...
  • Mysql插入区别一、INSERT(一)单条插入(二)多条插入二、REPLACE三、UPDATE 一、INSERT (一)单条插入 1 标准的SQL语句中用法:(列名必须和列值的数一致) INSERT INTO tablename(列名…) VALUES(列值); INSERT INTO ...
  • replace语句和update语句的对比 update语句使用where子句定位被更新的记录; update语句可以一次更新一条记录, 也可以更新多条记录, 只要这多条记录都复合where子句的要求; update只会在原记录上更新字段的值, ...
  • At the moment, this is just the <code>Replace</code> strategy, which terminates all current non-allocated GameServers and immediately starts up new GameServers to replace them. <p>Includes ...
  • The problem was in the correct building of Mongo update query, in particular when appending toSet and ToUnset Builders. In the replace case, now it also uses a cleaner BSONObjectBuilder instead of the...
  • replace into 与 insert update 功能类似 总结下: replace into 是根据表中的唯一索引或主键来判断是否重复的。如果没有则replace into不起作用直接插入。 replace into如果遇到重复的值,会先把之前的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,267
精华内容 8,106
关键字:

replaceupdate