sql >> データベース >  >> RDS >> Mysql

MySQL挿入行、重複時:サフィックスを追加して再挿入

    トリガーを作成 できます 挿入する前にNEW.slugの値を変更します。

    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 ;
    

    そしてこれが結果になります

    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)
    



    1. SQLの結果をリストPythonに変換します

    2. ajax関数とphpで行を削除します

    3. MySQL-Pythonで文字列ごとに複数のクエリを実行する方法はありますか?

    4. DEFERRABLE INITIALLY IMMEDIATEで定義された制約はまだ延期されていますか?