暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

华为GaussDB T REPLACE

墨天轮 2019-10-12
653

REPLACE

功能描述

在表中插入或者替换新的数据。当插入的数据与原有数据存在主键/唯一键冲突时,执行REPLACE语句会先删除原有数据,再插入新的数据。

REPLACE语句有三种形式:

  • 第一种是值插入,即构造一行记录并插入到表中。
  • 第二种形式是查询插入,它通过SELECT子句返回的结果集构造一行或多行记录插入到表中。
  • 第三种是设定指定字段值,与值插入类似,对于没有指定的列取其默认值。

注意事项

  • 执行该语句的用户需要有表的DELETE和INSERT权限。
  • 主键不冲突的情况下直接插入;对于主键冲突的记录,先删除再插入;affected row为1时是直接插入,为2时是先删再插入。
  • REPLACE事务提交是默认关闭的。会话退出时,需要显式COMMIT,否则记录将丢失。
  • REPLACE...SELECT形式,select_list列数必须与待插入的字段数一样。
  • REPLACE...SET语法中,若col_name无默认值,则SET col_name = col_name + 1等同于col_name = NULL;若col_name有默认值,则SET col_name = col_name + 1等同于 SET col_name = (col_name的默认值) + 1。

语法格式

  • 值替换。
    REPLACE [hint_info] [ INTO ] [ schema_name. ]table_name [ ( column_name [ , ... ] ) ] VALUES ( expression [ , ... ] )
  • 查询替换。
    REPLACE [ INTO ] [ schema_name. ]table_name [table_alais][ ( column_name [ , ... ] ) ]select_clause
    • select_clause
      SELECT [ DISTINCT ] select_list FROM table_list [ where_clause ] [ group_by_clause ] [ order_by_clause ] [ limit_clause ]
  • 表达式设置替换。
    REPLACE [ INTO ] [ schema_name. ]table_name SET {column_name = expression} [ , ... ]

参数说明

  • table_name

    待插入的表名。

  • column_name

    待插入的表字段名。

    如果insert语句所指定的字段名包含表中的所有字段,则可以省略字段名。

    取值范围:已存在的字段名。

  • expression

    插入字段的值或表达式。

  • select_clause

    SELECT查询结果集作为新值插入到表中,具体参数,参考select章节。

  • select_list

    指定查询列。

  • table_list

    指定查询表,可以是表、视图、子查询。

  • DISTINCT

    关键字,表示查询结果集是否需要去重。

    取值范围:已存在的字段名,或字段表达式。

  • where_clause

    指定查询结果集要满足的条件。

  • group_by_clause

    指定查询结果集要满足的分组规则。

  • order_by_clause

    指定查询结果集要满足的排序规则。

  • limit_clause

    指定查询结果集要满足的界限。

示例

--删除表training。 DROP TABLE IF EXISTS training;
--创建表training。 CREATE TABLE training(staff_id INT PRIMARY KEY,course_name CHAR(50),course_start_date DATETIME, course_end_date DATETIME,exam_date DATETIME,score INT);
--向表training中插入记录1。 REPLACE INTO training(staff_id,course_name,course_start_date,course_end_date,exam_date,score) VALUES(10,'SQL majorization','2017-06-15 12:00:00','2017-06-20 12:00:00','2017-06-25 12:00:00',90); --向表training中替换记录1。 REPLACE INTO training(staff_id,course_name,course_start_date,course_end_date,exam_date,score) VALUES(10,'information safety','2017-06-20 12:00:00','2017-06-25 12:00:00','2017-06-26 12:00:00',95); --使用REPLACE...SELECT向表training中替换记录1。 REPLACE INTO training(staff_id,course_name,course_start_date,course_end_date,exam_date,score) select 10,'master all kinds of thinking methonds','2017-07-15 12:00:00','2017-07-20 12:00:00','2017-07-25 12:00:00',97 from SYS_DUMMY; --使用SET向表training中插入记录2。 REPLACE /*+ nologging*/ INTO training SET staff_id = 11,course_name = 'information technology', course_start_date = '2017-07-20 12:00:00', course_end_date = '2017-07-25 12:00:00',exam_date = '2017-07-26 12:00:00',score = 95; --提交事务。 COMMIT;
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论