MySQL Insert row, on duplicate: add suffix and re-insert

后端 未结 1 1460
无人及你
无人及你 2020-12-18 05:23

My question is rather complex, but I thought I should give it a try.

In short, I want to insert a row with a slug (short string with alphas and a dash:

相关标签:
1条回答
  • 2020-12-18 06:00

    You could create a trigger that changes the value of NEW.slug before inserting it.

    drop trigger if exists changeSlug;
    
    delimiter |
    
    CREATE TRIGGER changeSlug BEFORE INSERT ON slugs
      FOR EACH ROW BEGIN
         declare original_slug varchar(255);
         declare slug_counter int;
         set original_slug = new.slug;
         set slug_counter = 1;
         while exists (select true from slugs where slug = new.slug) do
            set new.slug = concat(original_slug, '-', slug_counter); 
            set slug_counter = slug_counter + 1;
         end while;
    
      END;
    |
    delimiter ;
    

    And this would be the results

    mysql> insert into slugs values ("dude");
    Query OK, 1 row affected (0.00 sec)
    
    mysql> insert into slugs values ("dude");
    Query OK, 1 row affected (0.00 sec)
    
    mysql> insert into slugs values ("dude");
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select * from slugs;
    +--------+
    | slug   |
    +--------+
    | dude   |
    | dude-1 |
    | dude-2 |
    +--------+
    3 rows in set (0.00 sec)
    
    0 讨论(0)
提交回复
热议问题