不確定您是否有興趣觸發器,但您可以依靠BEFORE INSERT
觸發器。觸發器需要檢查被插入的新的uri
是否有一個複製條目,如果是,則附加dateStringOfYourFormat並插入。
例:
mysql> drop table mytable;
Query OK, 0 rows affected (0.03 sec)
mysql> create table mytable(uri varchar(128));
Query OK, 0 rows affected (0.05 sec)
mysql> drop trigger uri_modifier;
ERROR 1360 (HY000): Trigger does not exist
mysql> delimiter //
mysql> create trigger uri_modifier before insert on mytable
-> for each row
-> begin
-> if (select count(uri) from mytable where uri=NEW.uri) > 0 then
-> set @modified_uri_string=concat(NEW.uri, '-', date_add(sysdate(), interval floor(rand()*1e6) microsecond));
-> set [email protected]_uri_string;
-> end if;
-> end//
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql> delimiter ;
mysql>
mysql> set @my_new_uri_string = 'my_uri_string_to_search';
Query OK, 0 rows affected (0.00 sec)
mysql> set @modified_uri_string = @my_new_uri_string;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from mytable;
Empty set (0.00 sec)
mysql> insert into mytable values(@my_new_uri_string);
Query OK, 1 row affected (0.03 sec)
mysql> select @my_new_uri_string, @modified_uri_string;
+-------------------------+-------------------------+
| @my_new_uri_string | @modified_uri_string |
+-------------------------+-------------------------+
| my_uri_string_to_search | my_uri_string_to_search |
+-------------------------+-------------------------+
1 row in set (0.00 sec)
mysql> select * from mytable;
+-------------------------+
| uri |
+-------------------------+
| my_uri_string_to_search |
+-------------------------+
1 row in set (0.00 sec)
mysql> insert into mytable values(@my_new_uri_string);
Query OK, 1 row affected (0.03 sec)
mysql> select @my_new_uri_string, @modified_uri_string;
+-------------------------+----------------------------------------------------+
| @my_new_uri_string | @modified_uri_string |
+-------------------------+----------------------------------------------------+
| my_uri_string_to_search | my_uri_string_to_search-2012-05-03 02:21:39.983405 |
+-------------------------+----------------------------------------------------+
1 row in set (0.00 sec)
mysql> select * from mytable;
+----------------------------------------------------+
| uri |
+----------------------------------------------------+
| my_uri_string_to_search |
| my_uri_string_to_search-2012-05-03 02:21:39.983405 |
+----------------------------------------------------+
2 rows in set (0.02 sec)
mysql> insert into mytable values(@my_new_uri_string);
Query OK, 1 row affected (0.01 sec)
mysql> select @my_new_uri_string, @modified_uri_string;
+-------------------------+----------------------------------------------------+
| @my_new_uri_string | @modified_uri_string |
+-------------------------+----------------------------------------------------+
| my_uri_string_to_search | my_uri_string_to_search-2012-05-03 02:21:39.412580 |
+-------------------------+----------------------------------------------------+
1 row in set (0.00 sec)
mysql> select * from mytable;
+----------------------------------------------------+
| uri |
+----------------------------------------------------+
| my_uri_string_to_search |
| my_uri_string_to_search-2012-05-03 02:21:39.983405 |
| my_uri_string_to_search-2012-05-03 02:21:39.412580 |
+----------------------------------------------------+
3 rows in set (0.00 sec)
mysql>
mysql>
確保如果uri
插入不同的是比傳入,你有一個手柄知道修改後的值是什麼。
使用重複鍵更新將強制它更新現有的條目,而不是插入一個新的 – Anigel
刪除sql-injection標籤作爲誤解 –