MYSQL:RELPACE用法

RELPACE类似于INSERT的方法,但如果表中的旧行与主键或惟一索引的新行具有相同的值,则在插入新行之前删除旧行

为了测试方便我们首先要创建一张表

CREATE TABLE test (
  id INT UNSIGNED NOT NULL AUTO_INCREMENT,
  data VARCHAR(64) DEFAULT NULL,
  ts TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (id)
);

当我们创建要表,然后运行一下程序

 1 mysql> REPLACE INTO test VALUES (1, 'Old', '2014-08-20 18:47:00');
 2 Query OK, 1 row affected (0.04 sec)
 3 
 4 mysql> REPLACE INTO test VALUES (1, 'New', '2014-08-20 18:47:42');
 5 Query OK, 2 rows affected (0.04 sec)
 6 
 7 mysql> SELECT * FROM test;
 8 +----+------+---------------------+
 9 | id | data | ts                  |
10 +----+------+---------------------+
11 |  1 | New  | 2014-08-20 18:47:42 |
12 +----+------+---------------------+
13 1 row in set (0.00 sec)

## 现在我们创建的第二个表几乎与第一个表相同,除了主键现在包含2列,如下所示:

1 CREATE TABLE test2 (
2   id INT UNSIGNED NOT NULL AUTO_INCREMENT,
3   data VARCHAR(64) DEFAULT NULL,
4   ts TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
5   PRIMARY KEY (id, ts)
6 );

当我们在test2上运行相同的两个替换语句,就像我们在原始测试表中所做的那样,我们得到了一个不同的结果:

mysql> REPLACE INTO test2 VALUES (1, 'Old', '2014-08-20 18:47:00');
Query OK, 1 row affected (0.05 sec)

mysql> REPLACE INTO test2 VALUES (1, 'New', '2014-08-20 18:47:42');
Query OK, 1 row affected (0.06 sec)

mysql> SELECT * FROM test2;
+----+------+---------------------+
| id | data | ts                  |
+----+------+---------------------+
|  1 | Old  | 2014-08-20 18:47:00 |
|  1 | New  | 2014-08-20 18:47:42 |
+----+------+---------------------+
2 rows in set (0.00 sec)

这是因为,当在test2上运行时,id和ts列值都必须与已替换的行相匹配;否则,将插入一行。

 

转载于:https://www.cnblogs.com/richiewlq/p/7522782.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值