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

关于 REPLACE INTO 语句

SQL新手 2022-12-08
1377

REPLACE INTO 语句用来插入或者替换数据,本文介绍了相关语句的使用方法和示例。

REPLACE INTO 语句

REPLACE INTO 语句会判断行记录是否存在(根据主键索引或唯一索引判断)。

  • 如果不存在,则插入记录。

  • 如果存在,则先删除已有记录,再插入新行记录。

    说明

    目标表建议有主键或者唯一索引,否则容易插入重复的记录。

REPLACE INTO 语句语法格式如下:

REPLACE INTO table_name VALUES(list_of_values);
参数是否必填描述示例
table_name指定需要插入数据的表table1
(list_of_values)插入的数据(1,'CN',2001, current_timestamp ())

示例

当记录不存在时,使用 REPLACE INTO 语句

obclient> CREATE TABLE t_replace(
     id number NOT NULL PRIMARY KEY
     , name varchar(10) NOT NULL
     , value number
     ,gmt_create timestamp NOT NULL DEFAULT current_timestamp
 );
Query OK, 0 rows affected 

obclient> REPLACE INTO t_replace values(1,'CN',2001, current_timestamp ());
Query OK, 1 row affected 

obclient> SELECT * FROM t_replace;
+----+------+-------+---------------------+
| id | name | value | gmt_create          |
+----+------+-------+---------------------+
|  1 | CN   |  2001 | 2022-03-22 16:13:55 |
+----+------+-------+---------------------+
1 row in set 

当记录存在时,使用查询语句充当 REPLACE INTO 的 values 子句

obclient> SELECT * FROM t_insert;
+----+------+-------+---------------------+
| id | name | value | gmt_create          |
+----+------+-------+---------------------+
|  1 | CN   | 10001 | 1970-01-01 16:15:17 |
|  2 | US   | 10002 | 1970-01-01 16:15:27 |
|  3 | EN   | 10003 | 1970-01-01 16:15:27 |
|  4 | JP   | 10004 | 1970-01-01 16:15:41 |
+----+------+-------+---------------------+
4 rows in set 

obclient> REPLACE INTO t_replace
     SELECT id,name,value,gmt_create  FROM t_insert;
Query OK, 5 rows affected 
Records: 4  Duplicates: 1  Warnings: 0

obclient> SELECT * FROM t_replace;
+----+------+-------+---------------------+
| id | name | value | gmt_create          |
+----+------+-------+---------------------+
|  1 | CN   | 10001 | 1970-01-01 16:15:17 |
|  2 | US   | 10002 | 1970-01-01 16:15:27 |
|  3 | EN   | 10003 | 1970-01-01 16:15:27 |
|  4 | JP   | 10004 | 1970-01-01 16:15:41 |
+----+------+-------+---------------------+
4 rows in set 

列属性为 NOT NULL 但有默认值时,使用 REPLACE INTO 语句

以下示例中,t_replace 表中 gmt_create 列属性为 NOT NULL,但是设置了默认值,所以 values 子句可以不包含 gmt_create 参数也可以执行成功。

obclient> REPLACE INTO t_replace(id, name, value) values(6,'DE',20006);
Query OK, 1 row affected 

obclient> SELECT * FROM t_replace;
+----+------+-------+---------------------+
| id | name | value | gmt_create          |
+----+------+-------+---------------------+
|  1 | CN   | 10002 | 1970-01-01 18:05:45 |
|  2 | US   | 10103 | 1970-01-01 18:05:54 |
|  3 | UK   | 10003 | 1970-01-01 18:05:54 |
|  4 | JP   | 10005 | 1970-01-01 18:06:08 |
|  6 | DE   | 20006 | 1970-01-01 18:09:19 |
+----+------+-------+---------------------+
5 rows in set
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论