• 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列值都必须与已替换的行相匹配;否则,将插入一行。

  • 相关阅读:
    CDQ分治·学习笔记
    高斯消元板子
    [HEOI2012]朋友圈
    [CTSC2008]祭祀
    Medium | LeetCode 140. 单词拆分 II | 回溯(递归)
    Hard | LeetCode 212. 单词搜索 II | 回溯 + 前缀树
    Medium | LeetCode 131. 分割回文串 | 回溯 + 动态规划预处理
    Hard | LeetCode 329. 矩阵中的最长递增路径 | 矩阵+DFS
    Hard | LeetCode 76. 最小覆盖子串 | 滑动窗口
    Medium | LeetCode 130. 被围绕的区域 | 矩阵 + DFS
  • 原文地址:https://www.cnblogs.com/richiewlq/p/7522782.html
Copyright © 2020-2023  润新知