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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




