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列值都必须与已替换的行相匹配;否则,将插入一行。
作者:RichieWang
出处:https://home.cnblogs.com/u/richiewlq/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,
且在文章页面明显位置给出原文连接。
出处:https://home.cnblogs.com/u/richiewlq/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,
且在文章页面明显位置给出原文连接。